#include<stdio.h>
#include<stdlib.h>
#define FALSE 0
#define OK 1
#define TURE 1
typedef int Status;
typedef struct SNode{
int data;//数据域
struct SNode *next;//指针域
}SNode,*Node;
typedef struct{
Node top;
}LinkStack;
//初始化栈
void InitStack(LinkStack *s)
{
s->top=NULL;
}
//压栈
int Push(LinkStack *s,int e)
{
SNode *p;
p=(Node)malloc(sizeof(SNode));//生成新结点
if(p==NULL)
return FALSE;//分配空间失败
p->data=e;//为新结点数据域赋值
if(s->top==NULL)//如果栈顶为空
s->top=p;//修改栈顶指针
else
{
p->next=s->top;//将新结点插入栈顶
s->top=p;//修改栈顶指针
}
return TURE;
}
//出栈
Status Pop(LinkStack *s,int *e)
{
SNode *p;
if(s->top==NULL)
return FALSE;//栈为空,出栈失败
p=s->top;
s->top=p->next;//修改栈顶指针
*e=p->data;//保存栈顶元素的值
free(p);//释放出栈结点
return TURE;
}
void main()
{
int ch=1;
LinkStack s;
InitStack(&s);
while(ch!=0)
{
system("cls");
printf("1.初始化栈\t2.压栈\t3.出栈\n0.退出\n");
printf("请选择:\n");
scanf("%d",&ch);
switch(ch)
{
case 0:printf("byebye!\n");
break;
case 1:{
InitStack(&s);
printf("初始化成功\n");
break;
}
case 2:
{
int e;
printf("请输入你要压栈的数值:\n");
scanf("%d",&e);
if(Push(&s,e)==OK)
printf("压栈成功\n");
else
printf("压栈失败\n");
break;
}
case 3:
{
int e;
if(Pop(&s,&e)==OK)
printf("元素为:%d\n",e);
else
printf("出栈失败\n");
break;
}
default:
printf("输入错误,请重新输入\n");
break;
}
system("pause");
}
}
数据结构-C语言实现链栈
最新推荐文章于 2023-09-09 08:00:00 发布