#include
#include
#define MAXSIZE 100 //顺序栈的存储空间的初始分配量
#define SElemType int
typedef struct
{
SElemType *base;
SElemType *top;
int stacksize;
} SqStack;
//栈的初始化
void InitStack(SqStack *S)
{
S->base=(SElemType *)malloc(sizeof(SqStack)*MAXSIZE); //分配最大存储内存
if(!S->base)
{
printf("初始化失败!\n");
exit(0);
}
else
{
S->top=S->base; //top初始值为base,栈空
S->stacksize=MAXSIZE; //stacksize置为栈的最大存储容量
printf("初始化成功!\n");
}
return 0;
}
//入栈
void Push(SqStack *S)
{
SElemType e;
printf("请输入入栈元素: ");
if(S->top - S->base==S->stacksize)
printf("栈满\n");
else
{
scanf("%d\n",&e);
*S->top++=e; //把S栈顶指针指向E,运算完成后栈空间才自增1
printf("入栈成功,栈顶元素为:%d\n\n",e);
}
}
//出栈
void Pop(SqStack S,SElemType *e)
{
if(S->top-S->base==S->stacksize)
printf("\n栈满\n\n");
else
{
e=--S->top; //优先级 '.' > "--" = '*'
if(S->base==S->top)
printf("栈空\n\n");
else
printf("出栈成功,栈顶元素为:%d\n\n",*S->top );
}
return 0;
}
//取栈顶元素,不修改栈顶指针
void GetTop(SqStack *S,SElemType *e)
{
if(*S->top!=*S->base) //栈非空
printf("%d\n\n",*S->top);
else
printf("sorry! zhankong!\n\n");
return 0;
}
int main()
{
int x;
SElemType e;
SqStack S;
InitStack(&S);
for(;;)
{
printf("主菜单\n");
printf("1、入栈\n2、出栈\n3、输出栈顶元素\n4、退出\n");
printf("请选择:");
scanf("%d",&x);
switch(x)
{
case 1:
Push(&S);
break;
case 2:
Pop(&S,&e);
break;
case 3:
GetTop(&S,&e);
break;
case 4:
exit(0);
}
}
return 0;
}