#include<iostream>
#include<stdlib.h>
using namespace std;
struct LinkstNode
{
int data;
LinkstNode *next;
};
void InitStack(LinkstNode *&s)
{
s=(LinkstNode *)malloc(sizeof(LinkstNode));
s->next=NULL;
}
void Push(LinkstNode *&s,int a[],int n)
{
LinkstNode *r;
s=(LinkstNode *)malloc(sizeof(LinkstNode));
s->next=NULL;
for(int i=0;i<n;i++)
{
r=(LinkstNode *)malloc(sizeof(LinkstNode));
r->data=https://bbs.csdn.net/topics/a[i];
r->next=s->next;
s->next=r;
}
}
void Push(LinkstNode *&s,int e)
{
LinkstNode *r;
s=(LinkstNode *)malloc(sizeof(LinkstNode));
s->next=NULL;
r=(LinkstNode *)malloc(sizeof(LinkstNode));
r->data=https://bbs.csdn.net/topics/e;
r->next=s->next;
s->next=r;
}
bool Locate(LinkstNode *&s,int e,int i)
{
int j=0;
LinkstNode *p=s,*r;
if(i<=0)
return false;
while(j<i-1&&p!=NULL)
{
j++;
p=p->next;
}
if(p==NULL)
return false;
else
{
r=(LinkstNode *)malloc(sizeof(LinkstNode));
r->data=https://bbs.csdn.net/topics/e;
r->next=p->next;
p->next=s;
return true;
}
}
void DispStack(LinkstNode *s,int n)
{
int a[n];
for(int i=0;i<n;i++)
{
a[i]=s->next->data;
s=s->next;
}
cout<<"出堆疊的順序"<<endl;
for(int i=0;i<n;i++)
{
cout<<a[i]<<" ";
}
cout<<endl;
}
bool pop(LinkstNode *s,int &e)
{
LinkstNode *p;
if(s->next==NULL)
return false;
p=s->next;
e=p->data;
s->next=p->next;
free(p);
return true;
}
bool gettop(LinkstNode *s)
{
LinkstNode *p;
int e;
if(s->next==NULL)
return false;
e=s->next->data;
return e;
}
void paixu(LinkstNode *s)
{
LinkstNode *m;
InitStack(m);
int temp1;
int temp2;
pop(s,temp1);
cout<<"取出s堆疊中的元素:"<<temp1<<"放入m堆疊中"<<endl;
Push(m,temp1);
while(s->next!=NULL)
{
pop(s,temp1);
cout<<"取出s堆疊中的元素:"<<temp1<<endl;
if(temp1>gettop(m))
{
cout<<"因為"<<temp1<<">"<<gettop(m)<<"所以將"<<temp1<<"放入m堆疊"<<endl;
Locate(m,temp1,1);
cout<<"取出m的第一個元素:"<<gettop(m)<<endl;
}
if(temp1<gettop(m))
{
pop(m,temp2);
cout<<"因為"<<temp1<<"<"<<temp2<<"所以將"<<temp2<<"取出"<<endl;
Locate(s,temp2,1);
cout<<"將"<<temp2<<"放回s堆疊"<<endl;
Locate(m,temp1,1);
cout<<"將"<<temp1<<"放入m堆疊"<<endl;
Locate(m,temp2,1);
cout<<"將"<<temp2<<"放入m堆疊"<<endl;
}
}
}
main()
{
int a[4]={2,4,5,1};
int n=4;
LinkstNode *s;
InitStack(s);
Push(s,a,n);
DispStack(s,n);
paixu(s);
}

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/206176.html
標籤:C++ 語言
