#include<stdio.h>
#include<stdlib.h>
#define MAX 20
typedef struct
{
int stack[MAX];
int top;
}sqstack;
void Initstack(sqstack *p) /*初始化*/
{
if(!p)
printf("error");
p->top=-1;
}
void Push(sqstack *p,int x)
{
if(p->top<MAX-1)
{
p->top=p->top+1;
p->stack[p->top]=x;
}
else printf("overflow!
");
}
int Pop(sqstack *p)
{
int x;
if(p->top!=0)
{
x=p->stack[p->top];
printf("以前的栈顶元素%d已经被删除 !
",x);
p->top=p->top-1;
return x;
}
else
{
printf("underflow!
");
return 0;
}
}
int Gettop(sqstack *p)
{
int x;
if(p->top!=0)
{
x=p->stack[p->top];
return x;
}
else
{
printf("underflow
");
return 0;
}
}
void Outstack(sqstack *p)
{
int i;
printf("
");
if(p->top<0)
{
printf("这是一个空栈 !");
printf("
");
}
else
for(i=p->top;i>=0;i--)
printf("第 %d 个数据元素是: %d
",i,p->stack[i]);
}
void Setempty(sqstack *p)
{
p->top=-1;
}
void main()
{
sqstack *q;
int y,cord;
int a;
do
{
printf("
");
printf("第一次使用必须初始化 !
");
printf("
");
printf("
主菜单
");
printf("
1 初始化顺序栈
");
printf("
2 插入一个元素
");
printf("
3 删除栈顶元素
");
printf("
4 取栈顶元素
");
printf("
5 置空顺序栈
");
printf("
6 结束程序运行
");
printf("
----------------------------------
");
printf("请输入您的选择 (1,2,3,4,5,6)");
scanf("%d",&cord);
printf("
");
switch(cord)
{
case 1:
{
q=(sqstack *)malloc(sizeof(sqstack));
Initstack(q);
Outstack(q);
}break;
case 2:
{
printf("请输入要插入的数据元素 :a=");
scanf("%d",&a);
Push(q,a);
Outstack(q);
}break;
case 3:
{
Pop(q);
Outstack(q);
}
break;
case 4:
{
y=Gettop(q);
printf("
栈顶元素为 : %d",y);
Outstack(q);
}break;
case 5:
{
Setempty(q);
printf("
顺序栈被置空!
");
Outstack(q);
}break;
case 6:
exit(0);
}
}while(cord<=6);
}