#include<stdio.h>
#include<stdlib.h>
#define Stack_Size 50
#define StackElementType int
#define FALSE 0
#define TRUE 1
//定义栈
typedef struct
{
StackElementType elem[Stack_Size];
int top;
}SeqStack;
//初始化
void InitStack(SeqStack *S)
{
S->top = -1;
}
//进栈
int Push(SeqStack *S, StackElementType x)
{
if(S->top==Stack_Size-1)
return(FALSE);
S->top++;
S->elem[S->top] = x;
return(TRUE);
}
//出栈
int Pop(SeqStack *S)
{
StackElementType x;
if(S->top==-1)
return(FALSE);
else
{
x =S->elem[S->top];
S->top--;
return(TRUE);
}
}
//读取栈顶元素
int GetTop(SeqStack *S)
{
StackElementType x;
if(S->top==-1)
return(FALSE);
else
{
x=S->elem[S->top];
return(TRUE);
}
}
void OutStack(SeqStack *p)
{
int i;
if(p->top<0)
printf("这是一个空栈!");
printf("\n");
for(i=p->top;i>=0;i--)
printf("第%d个数据元素是:%6d\n",i,p->elem[i]);
}
int main()
{
SeqStack *q;
int MAM,y;
StackElementType a;
printf("作者:xxx\t学号:xxxxxxxxxxxx \n");
printf("第一次使用必须初始化!\n");
printf("---------------------------\n");
printf(" 主菜单 \n");
printf(" 1 初始化顺序栈 \n");
printf(" 2 插入一个元素 \n");
printf(" 3 删除栈顶元素 \n");
printf(" 4 取栈顶元素 \n");
printf(" 5 结束程序运行 \n");
printf("---------------------------\n");
do
{
printf("请输入您的选择( 1, 2, 3, 4, 5 )\n");
scanf("%d",&MAM);
printf("\n");
switch(MAM)
{
case 1:
{
q=(SeqStack*)malloc(sizeof(SeqStack));
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("\n栈顶元素为:%d\n",y);
OutStack(q);
}break;
case 5:
exit(0);
}
}while(MAM<=5);
}