读书人

链栈基本操作函数运行到显示栈时就有

发布时间: 2013-10-31 12:03:52 作者: rapoo

链栈基本操作函数,运行到显示栈时就有问题了,但自己看了半天觉得不论是入栈函数还是显示函数都没问题,亲们帮忙看看,是哪儿错了啊

#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;吧
}

读书人网 >C++

热点推荐