#include <stdio.h>
#include <stdlib.h>
#define false 0
#define true 1
#define maxsize 100
typedef int stackelementtype;
typedef struct
{
stackelementtype elem[maxsize];
int top;
}seqstack;
seqstack s1;
/*---------------------函数声明------------------------*/
void initstack(seqstack *s);
int emptystack(seqstack *s);
int fullstack(seqstack *s);
int pushstack(seqstack *s,stackelementtype x);
int popstack(seqstack *s,stackelementtype *x);
int gettopstack(seqstack *s,stackelementtype *x);
void displaymenu();
void outstack(seqstack *s);
/*-----------------------------------------------------*/
void initstack(seqstack *s)
{
s->top=-1;
}
int emptystack(seqstack *s)
{
return(s->top==-1?true:false);
}
int fullstack(seqstack *s)
{
return(s->top==maxsize-1?true:false);
}
int pushstack(seqstack *s,stackelementtype x)
{
if(s->top==maxsize-1)
{
return(false);
}
s->top++;
s->elem[s->top]=x;
return(true);
}
int popstack(seqstack *s,stackelementtype *x)
{
if(s->top==-1)
{
return(false);
}
else
{
*x=s->elem[s->top];
s->top--;
return(true);
}
}
int gettopstack(seqstack *s,stackelementtype *x)
{
if(s->top==-1)
{
return(false);
}
else
{
*x=s->elem[s->top];
return(true);
}
}
void outstack(seqstack *s)
{
int i;
printf("\n栈为:\n");
for(i=0;i<=s->top;i++)
{
printf("%d\t",s->elem[i]);
}
getch();
displaymenu();
}
void displaymenu()
{
int k;
stackelementtype x;
system("cls");
do
{
printf("\t\t1.-------------初始化栈\n");
printf("\t\t2.-------------压栈元素\n");
printf("\t\t3.-------------出栈元素\n");
printf("\t\t4.-------------取栈顶元素\n");
printf("\t\t5.-------------打印栈元素\n");
printf("\t\t6.-------------退出\n");
printf("请输入您的选择:");
scanf("%d",&k);
switch(k)
{
case 1:
system("cls");
initstack(&s1);
printf("初始化成功!");
printf("\n按任意键返回主菜单...");
getch();
displaymenu();
break;
case 2:
system("cls");
printf("请输入您要压栈的元素:\t\t");
scanf("%d",&x);
if(pushstack(&s1,x))
{
printf("\n压栈成功!");
}
else
{
printf("\n压栈失败!");
}
printf("\n按任意键返回主菜单...");
getch();
displaymenu();
break;
case 3:
system("cls");
printf("按任意键出栈...\n");
getch();
popstack(&s1,&x);
if(pushstack(&s1,x))
{
printf("\n出栈成功!");
printf("\n出栈元素为:\t%d",x);
}
else
{
printf("\n出栈失败!");
}
outstack(&s1);
printf("\n按任意键返回主菜单...");
getch();
displaymenu();
break;
case 4:
system("cls");
gettopstack(&s1,&x);
outstack(&s1);
getch();
displaymenu();
break;
case 5:
system("cls");
outstack(&s1);
getch();
break;
case 6:
system("cls");
printf("按任意键退出...");
getch();
exit(0);
}
}while(k>6||k<1);
}
void main()
{
displaymenu();
}