#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 20
typedef int datetype;
typedef struct
{
datetype date[MAXSIZE];
int top;
}SeqStack;
SeqStack *s;
SeqStack* Init_SeqStack()
{
s=malloc(sizeof(SeqStack));
s->top=-1;
return s;//建立一个指向为NULL的空栈
}
//判断栈是否为空
int Empty_SeqStack(SeqStack *s)
{
if(s->top==-1)
return 1;//返回1时,栈为空栈
else
return 0;//返回0时,栈不为空栈
}
//入栈
int Push_SeqStack(SeqStack *s,datetype x)
{
if(s->top==MAXSIZE-1)
return -1;
//判断栈满了没有
else
{
s->top++;
s->date[s->top]=x;
return 1;
}
}
//出栈
datetype Pop_SeqStack(SeqStack *s,datetype *x)
{
if(Empty_SeqStack(s))//空栈结果为1,为真,执行return 0,返回
return 0;//栈空不能出栈
else{
*x=s->date[s->top];
s->top--;
return *x;
}
}
//取栈顶元素
datetype Top_SeqStack(SeqStack *s)
{
if(Empty_SeqStack(s))
return 0;
else
return (s->date[s->top]);
}
//清空栈
SeqStack Clear_SeqStack(SeqStack *s)
{
if(s->top!=-1)
s->top=-1;
}
//求长度
datetype long_SeqStack(SeqStack *s)
{
int i=0;
while(s->top!=-1)
{
i++;
s->top--;
}
return i;
}
//遍历栈
void output(SeqStack *s)
{
SeqStack p;
p.top=s->top;
if(p.top!=-1)
{
printf("栈内元素为:\n");
while(p.top!=-1)
{
printf("%3d",s->date[p.top]);
p.top--;
}}
else
printf("栈空,无元素。\n");
}
int main()
{
int num=1,num2,num4,num7;
datetype num1,num3;
SeqStack* s1=Init_SeqStack();
printf("0表示退出栈\n");
printf("1表示入栈\n");
printf("2表示出栈\n");
printf("3表示取栈顶元素\n");
printf("4表示判断栈是否为空\n");
printf("5表示清空栈\n");
printf("6表示销毁栈\n");
printf("7表示求栈的长度\n");
printf("8表示遍历栈\n");
while(num!=0)//0表示退出循环栈
{
printf("\n请输入你的指令:");
scanf("%d",&num);
switch(num){
case 0:num=0;
break;
case 1:printf("请输入入栈元素:\n");
scanf("%d",&num2);
Push_SeqStack(s1,num2);
break;
case 2:num3=Pop_SeqStack(s1,&num2);
if(num3==0&&s1->top==-1)
printf("栈空不能出栈!\n");
else
printf("%d",num3);
break;
case 3:num2=Top_SeqStack(s1);
printf("%d",num2);
break;
case 4:num4=Empty_SeqStack(s1);
printf("yes:空栈,no:非空栈\n");
if(num4==1)
printf("结果为:%c%c%c\n",121,101,115);
else if(num4==0)
printf("结果为:%c%c\n",110,111);
else
printf("程序错误!请检查判断空栈函数!\n");
break;
case 5:Clear_SeqStack(s1);
break;
case 6:
num=0;
break;
case 7:num7=long_SeqStack(s1);
printf("%d",num7);
break;
case 8:output(s1);
break;
default:printf("输入错误!请重输:\n");
}
}
}