用链表实现栈的基本功能
用链表实现栈的初始化、入栈、出栈、删除和销毁、
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
typedef int SElemType;
typedef int Status;
#define Ok 1;
#define Error 0;
#define Ture 1;
#define False 0;
typedef struct StackNode{
SElemType data;
struct StackNode *next;
}StackNode, *LinkStack;
Status InitStack(LinkStack &s)//初始化栈
{
s=NULL;
return Ok;
}
Status Push(LinkStack &s,SElemType e)//入栈
{
StackNode *p;
p=new StackNode;
p->data=e;
p->next=s;
s=p;
return Ok;
}
Status Pop(LinkStack &s,SElemType &e)//出栈
{
StackNode *p;
if(s==NULL) return Error;
e=s->data;
p=s;
s=s->next;
delete p;
return Ok;
}
SElemType GetTop(LinkStack s)//取栈顶元素
{
if(s!=NULL)
return s->data;
}
Status ClearStack(LinkStack &s)//清空栈
{
StackNode *p;
p=s;
while(s!=NULL)
{
p=s;
s=s->next;
delete p;
}
}
Status StackDestroy(LinkStack s)//销毁栈
{
StackNode *p,*q;
p=s;
if(p==NULL)
free(p);
else
{
while(!p)
{
q=p;
p=p->next;
free(q);
}
}
return Ok;
}
Status StackTraverse(LinkStack s)
{
if(s==NULL)
printf("当前为空栈\n");
else
{
StackNode *p;
p=s;
printf("顶-->");
while(p->next!=NULL)
{
printf("%d",p->data);
p=p->next;
}
printf("%d",p->data);
printf("-->底");
}
}
int main(){
LinkStack s;
SElemType e;
int i,j;
printf("1.创建 2.入栈 3.出栈 4.清空 5.销毁 0.退出\n");
while(i!=EOF){
scanf("%d",&i);
switch(i){
case(1):
InitStack(s);
printf("建栈成功\n");
break;
case(2):
int n;
printf("请输入进栈的个数\n");
scanf("%d",&n);
printf("输入进栈元素\n");
while(n--){
int m;
scanf("%d",&m);
Push(s,m);
}
StackTraverse(s);
puts("");
break;
case(3):
Pop(s,e);
printf("出栈元素是%d\n",e);
StackTraverse(s);
break;
case(4):
ClearStack(s);
if(s==NULL)
{
printf("清空成功\n");
StackTraverse(s);
}
else
printf("清空失败\n");
break;
case(5):
StackDestroy(s);
printf("销毁成功\n");
case(0):
exit(0);
break;
}
}
return 0;
}