#include<stdio.h>
#include<stdlib.h>
#define maxsize 64
typedef int datatype;
//定义结构体
typedef struct
{
datatype data[maxsize];
int top;
} seqstack;
//建立顺序栈
seqstack *SET(seqstack *s)
{
int i;
s=(seqstack*)malloc(sizeof(seqstack));
s->top=-1;
printf("请输入顺序栈元素(整型,以0结束):");
scanf("%d",&i);
do
{
s->top++;
s->data[s->top]=i;
scanf("%d",&i);
}
while(i!=0);
printf("顺序栈建立成功\n");
return s;
}
//清空栈
void SETNULL(seqstack *s)
{
s->top=-1;
}
//判断栈空
int EMPTY(seqstack *s)
{
if(s->top>=0)
return 0;
else return 1;
}
//进栈
seqstack *PUSH(seqstack *s)
{
int x;
printf("你想要插入的数字:");
scanf("%d",&x);
if(s->top==maxsize-1)
{
printf("overflow");
return NULL;
}
else
{
s->top++;
s->data[s->top]=x;
}
return s;
}
//退栈
seqstack *POP(seqstack *s)
{
if(s->top<0)
{
printf("underlow");
return s;
}
else
{
s->top--;
printf("删除的栈顶元素是:");
printf("%d\n",(s->data[s->top+1]));
}
return s;
}
//取栈顶
void TOP(seqstack *s)
{
if(s->top<0)
{
printf("stack is empty");
}
else
{
printf("当前的栈顶元素是:");
printf("%d\n",(s->data[s->top]));
}
}
//输出栈
void print(seqstack *s)
{
int i;
if(s->top<0)
{
printf("清空栈成功!");
}
for(i=s->top; i>=0; i--)
printf("%d ",s->data[i]);
}
//主函数
int main()
{
seqstack *s;
int i,j;
printf("1.建立一个顺序栈\n");
printf("2.输出栈\n");
printf("3.进栈\n");
printf("4.退栈\n");
printf("5.取栈顶元素\n");
printf("6.清空栈\n");
printf("7.判断栈是否为空\n");
printf("8.结束程序\n");
do
{
printf("\n\n请选择想要实现的功能:");
scanf("%d",&i);
switch(i)
{
case 1:
s=SET(s);
break;
case 2:
print(s);
printf("\n");
break;
case 3:
s=PUSH(s);
print(s);
printf("\n");
break;
case 4:
s=POP(s);
print(s);
printf("\n");
break;
case 5:
TOP(s);
break;
case 6:
SETNULL(s);
print(s);
printf("\n");
break;
case 7:
j=EMPTY(s);
if(j==1)
printf("空栈\n");
else
printf("非空栈\n");
break;
case 8:
exit (0);
}
}
while(1);
return 0;
}
实验运行效果图