链栈基本操作函数,运行到显示栈时就有问题了,但自己看了半天觉得不论是入栈函数还是显示函数都没问题,亲们帮忙看看,是哪儿错了啊
#include <iostream>链栈? 数据结构
using namespace std;
typedef struct snode{
int data;
struct snode *next;
}LinkStack;
void InitStack(LinkStack *&s)
{
s = new LinkStack;
s->next = NULL;
}
int EmptyStack(LinkStack *s)
{
return(s->next == NULL);
}
void Push(LinkStack *&s, int e)//入栈
{
LinkStack *p;
p = new LinkStack;
p->data = e;
p->next = s->next;
p = s->next;
}
int GetTop(LinkStack *s, int &e)//取栈顶元素
{
if(EmptyStack(s))
{
return 0;
}
else
{
e = s->next->data;
return 1;
}
}
int Pop(LinkStack *s, int &e)//出栈
{
LinkStack *p;
if(EmptyStack(s))
{
return 0;
}
else
{
p = s->next;
e = p->data;
s->next = p->next;
delete(p);
return 1;
}
}
void DispStack(LinkStack *s)//显示栈中元素
{
LinkStack *p;
p = s->next;
while(p != NULL)
{
cout<<p->data<<" ";
p = p->next;
}
}
void main()
{
LinkStack *s=NULL;
int n,i,x,y,z;
InitStack(s);
cout<<"How many Elements?"<<endl;
cin>>n;
cout<<"Pleast input:"<<endl;
for(i=0;i<n;i++)
{
cin>>x;
Push(s, x);
}
DispStack(s);
y=GetTop(s,z);
if(!y)
cout<<"Stack is empty!"<<endl;
else
cout<<"top is :"<<z<<endl;
cout<<"Push what?"<<endl;
cin>>x;
Push(s,x);
DispStack(s);
y=GetTop(s,z);
if(!y)
cout<<"Stack is empty!"<<endl;
else
cout<<"top is :"<<z<<endl;
cout<<"Pop......"<<endl;
y=Pop(s,z);
if(!y)
cout<<"Stack is empty!"<<endl;
else
cout<<z<<" is already pop!"<<endl;
DispStack(s);
y=GetTop(s,z);
if(!y)
cout<<"Stack is empty!"<<endl;
else
cout<<"top is :"<<z<<endl;
}
void Push(LinkStack *&s, int e)//入栈
{
LinkStack *p;
p = new LinkStack;
p->data = e;
p->next = s->next;
p = s->next;//这句反了吧,是s->next=p;吧
}