#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
typedef int Elemtype;
typedef struct StackNode{
Elemtype data;
struct StackNode *next;
}StackNode;
typedef struct{
struct StackNode *top;
}LinkStack;
void InitStack(LinkStack *s)
{
s->top=NULL;
printf("\n已经成功初始化链栈!\n");
}
void setEmpty(LinkStack *s)
{
s->top=NULL;
printf("\n链栈已经置空!\n");
}
void pushLstack(LinkStack *s,Elemtype x)
{
StackNode *p;
p=(StackNode *)malloc(sizeof(StackNode));
p->data=x;
p->next=s->top;
s->top=p;
}
Elemtype popLstack(LinkStack *s)
{
Elemtype x;
StackNode *p;
p=s->top;
if(s->top==0)
{
printf("\n栈空,不能出栈!\n");
return 0;
}
x=p->data; printf("\n当前数据为:%d\n",x);
s->top=p->next;
free(p);
return x;
}
Elemtype StackTop(LinkStack *s)
{
Elemtype x;
if(s->top==0)
{
printf("\n链栈空\n");
return 0;
}
{
x=s->top->data;printf("\n\n当前链栈的栈顶元素为:%d\n",x); return x;
}
}
void Disp(LinkStack *s)
{
printf("\n链栈中的数据为:\n");
printf("==================================\n");
StackNode *p;
p=s->top;
while(p!=NULL)
{
printf("%d\n",p->data);
p=p->next;
}
printf("===================================\n");
}
void main()
{
int i,n,a;
LinkStack *s;
s=(LinkStack *)malloc(sizeof(LinkStack));
int cord;
printf("第一次使用必须初始化!\n");
do
{
printf("\n");
printf("\n");
printf("\n=============主菜单============\n");
printf("\n 1 初始化链表 \n");
printf("\n 2 入栈 \n");
printf("\n 3 出栈 \n");
printf("\n 4 取栈顶元素 \n");
printf("\n 5 置空链栈 \n");
printf("\n 6 结束 程序 \n");
printf("\n===============================\n");
printf("请你输入您的选择(1,2,3,4,5,6)");
scanf("%d",&cord);
printf("\n");
switch(cord)
{
case 1:{
InitStack(s);
Disp(s);}break;
case 2:{
printf("输入将要压入链栈的数据个数:n=");
scanf("%d",&n);
printf("依次将%d个数据压入链栈:\n",n);
for(i=1;i<=n;i++)
{ scanf("%d",&a);
pushLstack(s,a);
}
Disp(s);
}break;
case 3:{
popLstack(s); Disp(s);
}break;
case 4:{
StackTop(s);printf("\n");
}break;
case 5:{
setEmpty(s);
Disp(s);
}break;
case 6:exit(0);
}
}while(cord<=6);
}