数据结构–链栈
代码:
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
typedef int ElemType;
#define ERROR 0
#define OK 1
typedef struct node //定义结点
{
ElemType date;
struct node *next;
}LinkStack;
int menu() //菜单
{
int i;
printf("=============链栈==================\n");
printf("========1.初始化链栈===========\n");
printf("========2.链栈进栈操作===========\n");
printf("========3.链栈出栈操作===========\n");
printf("========4.读取栈顶元素===========\n");
printf("========5.判空链栈=============\n");
printf("please input your action (1--5):\n");
scanf("%d",&i);
return i;
}
int *initstack() //链栈初始化
{
LinkStack *S;
S=(LinkStack *)malloc(sizeof(LinkStack));
S->next=NULL;
printf("初始化成功\n");
return S;
}
int push(LinkStack *S,int n) //元素进栈
{
LinkStack *p;
p=(LinkStack *)malloc(sizeof(LinkStack));
p->date=n;
p->next=S->next;
S->next=p;
return OK;
}
int pop(LinkStack *S,int *e) //元素出栈
{
LinkStack *p;
if(S->next==NULL)
return ERROR;
p=S->next;
*e=p->date;
S->next=p->next;
free(p);
return OK;
}
int gettop(LinkStack *S,int *e) //取栈顶元素
{
LinkStack *p;
if(S->next==NULL)
return ERROR;
p=S->next;
*e=p->date;
return OK;
}
int stackempty(LinkStack *S) //判空操作
{
if(S->next==NULL)
return OK;
else
return ERROR;
}
int main() //主函数
{
LinkStack *S;
int n,b,*e;
while(1)
{
b=menu();
switch(b)
{
case 1:system("cls");
S=initstack();
break;
case 2:system("cls");
printf("请输入您要加入的元素\n");
scanf("%d",&n);
b=push(&S,n);
if(b==1)
printf("入栈成功\n");
break;
case 3:system("cls");
b=pop(&S,&e);
if(b==1)
printf("出栈成功\n");
else
printf("出栈失败\n");
printf("出栈元素为%d\n",e);
break;
case 4:system("cls");
b=gettop(&S,&e);
if(b==1)
printf("取元素成功\n");
else
printf("取元素失败\n");
printf("元素为%d\n",e);
break;
case 5:system("cls");
b=stackempty(&S);
if(b==1)
printf("链栈为空\n");
else
printf("链栈不为空\n");
break;
}
}
return 0;
}
1590

被折叠的 条评论
为什么被折叠?



