栈的链表实现
在刚学习数据结构的时候,我们经常地会用到顺序栈,一个学弟问到我怎样用链表实现栈,下午花了一点时间,好久没有写过这个东西了传上来大家一起交流学习!
/*
日期:2014-3-25
作者:徐刘根
名称:栈的链表实现
环境:VC++
*/
#include<iostream.h>
typedef struct node
{
int data;
struct node *next;
}StackNode,*PStackNode;
typedef struct
{
PStackNode top;
}LinkStack,*PLinkStack;
PLinkStack Init_LinkStack( )//初始化空栈无入口参数
{
PLinkStack S=new LinkStack();
if(S)
S->top=NULL;
cout<<"初始化成功"<<endl;
return(S);
}
int Empty_LinkStack(PLinkStack S)//判断栈是否为空入口参数:顺序栈,返回值:0表示为空,1表示非空
{
if(S->top==NULL)
{
cout<<"栈是空的"<<endl;
return 1;
}
else
{
cout<<"栈非空"<<endl;
return 0;
}
}
int Push_LinkStack(PLinkStack S,int x)//在栈顶插入一新元素X入口参数为顺序栈返回值:1表示入栈成功0表示失败
{
PStackNode p=new StackNode();
if(!p)
{
cout<<"内存溢出"<<endl;
return 0;
}
p->data=x;
p->next=S->top;
S->top=p;
cout<<"入栈成功,入栈元素为:"<<p->data<<endl;
return 1;
}
int Pop_LinkStack(PLinkStack S, int *x)//删除栈顶元素并保存在*X,入口参数:顺序栈,返回值1表示成功0表示失败
{
PStackNode p;
if(Empty_LinkStack(S))
{
cout<<"栈空,不能出栈"<<endl;
return 0;
}
*x=S->top->data;
p=S->top;
cout<<"出栈元素为:"<<p->data<<endl;
S->top=S->top->next;
delete(p);
cout<<"出栈成功"<<endl;
return 1;
}
int GetTop_LinkStack(PLinkStack S,int *x)//取出栈顶元素,入口参数:顺序栈,被取出的元素指针。
{
if(Empty_LinkStack(S))
{
cout<<"栈空"<<endl;
return 0;
}
*x=S->top->data;
cout<<"取栈顶元素为:"<<*x<<endl;
return 1;
}
int Bianli_Seqstack(PLinkStack S)//遍历栈入口参数为顺序栈
{
if(Empty_LinkStack(S))
{
cout<<"栈空,不能出栈"<<endl;
return 0;
}
else
{
PStackNode p,q;
cout<<"栈元素遍历为:"<<endl;
if(S)
{
p=S->top;
while(p)
{
cout<<"--------"<<p->data<<"-------"<<endl;
q=p;
p=p->next;
}
}
}
return 1;
}
void Destory_LinkStack(PLinkStack *S)//销毁栈入口参数要销毁的顺序栈指针地址
{
PStackNode p,q;
if(*S)
{
p=(*S)->top;
while(p)
{
q=p;
p=p->next;
delete(q);
}
delete(*S);
}
*S=NULL;
cout<<"栈已经删除了"<<endl;
return ;
}
void main()
{
PLinkStack S =NULL;
int i;
cout<<"-------栈的线性表操作------"<<endl;
while(true)
{
cout<<"***************************"<<endl;
cout<<"<1>--栈的初始化 <2>--入栈操作 "<<endl;
cout<<"<3>--出栈操作 <4>--判断栈是否空"<<endl;
cout<<"<5>--取出栈顶元素 <6>--遍历栈 "<<endl;
cout<<"<7>--销毁栈 "<<endl;
cout<<"请选择您的操作"<<endl;
cin>>i;
switch(i)
{
case 1:S=Init_LinkStack(); break;
case 2:
int x;
cout<<"请输入您要插入的元素"<<endl;
cin>>x;
Push_LinkStack( S,x );break;
case 3:
Pop_LinkStack( S,&x);break;
case 4:
Empty_LinkStack(S);break;
case 5:
GetTop_LinkStack(S,&x);break;
case 6:
Bianli_Seqstack(S);break;
case 7:
Destory_LinkStack(&S);break;
default:
cout<<"输入操作不正确,请重新选择!"<<endl;break;
}
}
}
运行结果如下:
本文标题:【数据结构】栈的链表实现
本文链接:https://blog.quwenai.cn/post/3494.html
版权声明:本文不使用任何协议授权,您可以任何形式自由转载或使用。







还没有评论,来说两句吧...