#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 20
//链栈
typedef int Elemtype;
typedef struct Stacknode
{
Elemtype data;
struct Stacknode *next;
int size;//栈的长度
} slStacktype;
//初始化
void init(slStacktype *top)
{
top=malloc(sizeof(slStacktype));
top->next=NULL;
top->size=0;
}
//入栈
int pushLstack(slStacktype *top,Elemtype x)
{
slStacktype *p;
if((p=(slStacktype*)malloc(sizeof(slStacktype)))==NULL)
return -1;//申请空间失败
p->data=x;
p->next=top->next;
top->next=p;
top->size++;
return 1;//成功
}
//出栈
Elemtype popStack(slStacktype *top)
{
slStacktype *p;
Elemtype x;
if(top->next==NULL)
return -1;//栈空,无法出栈
p=top->next;
top->next=p->next;
x=p->data;
free(p);
top->size--;
return x;
}
//判断栈是否为空
int Empty_SeqStack(slStacktype *top)
{
if(top->next!=NULL)
return 1;
else
return 0;
}
//取栈顶元素
Elemtype Top_SeqStack(slStacktype *top)
{
return top->data;
}
//求长度
int long_slStacktype(slStacktype *top)
{
return (top->size);
}
void output(slStacktype *top)
{
slStacktype *p;
p=top->next;
printf("遍历栈结果为:\n");
while(p->size)
{
printf("%3d",p->data);
p=p->next;
p->size--;
}
}
int main()
{
slStacktype top1;
int num9,num4;
Elemtype num=10,num1,num2,num3;
init(&top1);
printf("0表示退出栈\n");
printf("1表示入栈\n");
printf("2表示出栈\n");
printf("3表示取栈顶元素\n");
printf("4表示判断栈是否为空\n");
printf("6表示销毁栈\n");
printf("7表示求栈的长度\n");
printf("8遍历栈\n");
printf("请输入你的指令!\n");
printf("go:\n");
while(num!=0)
{
scanf("%d",&num);
switch(num)
{
case 0:num=0;
break;
case 1:printf("请输入入栈元素:\n");
scanf("%d\n",&num1);
pushLstack(&top1,num1);
break;
case 2:num2=popStack(&top1);
printf("出栈元素是:%d\n",num2);
break;
case 3:num3=Top_SeqStack(&top1);
printf("栈顶元素是:%d\n",num3);
break;
case 4:num4=Empty_SeqStack(&top1);
printf("判断结果为:%d\n",num4);
printf("1表示非空,0表示空栈\n");
break;
case 6:num=0;
break;
case 7:num9=long_slStacktype(&top1);
printf("栈的长度是:%d\n",num9);
break;
case 8:output(&top1);
break;
default:printf("输入错误!");
break;
}
}
}