#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define TRUE 1
#define FALSE 0
#define ERROR 0
#define OVERFLOW -2
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 20
//typedef int Status;
typedef struct Stack{//顺序栈
int *base;
int *top;
int stacksize; //栈可使用的最大容量
} SqStack;
int InitStack (SqStack &S){ //0栈的初始化
S.base=(int *)malloc (STACK_INIT_SIZE *sizeof(int));
if (! S.base) exit (OVERFLOW);
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;//栈的空间大小
return 1;
}
int Push(SqStack &S, int e){//1入栈
if (S.top – S.base>= S.stacksize){
S.base=(int*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(int));
if(!S.base) exit(OVERFLOW);//如果分配失败,则退出
S.top=S.base+S.stacksize;//栈顶
S.stacksize+=STACKINCREMENT;//栈空间
}
*S.top++=e;
return 1;
}
int Pop(SqStack &S){//2出栈
int e;
if( S.top==S.base)
{
printf(“栈为空\n”);
return ERROR;//空栈
}
e=*–S.top;
return e;//返回栈顶元素
}
void Print(SqStack &S){//输出
if( S.top==S.base)
{
printf(“栈为空\n”);
return ;//空栈
}
while(S.top>S.base)
{
printf(“%d “,*S.base);
S.base++;
}
printf(“\n”);
return ;
}
void tip()
{
printf(“*********计科101陈东东*************\n”);
printf(“输入0创建空栈\n”);
printf(“输入1进栈\n”);
printf(“输入2出栈\n”);
printf(“输入4输出栈元素\n”);
printf(“输入-1退出\n”);
printf(“**********************\n”);
}
int main()
{
int x,k;
SqStack S;
//struct Stack S;
tip();
while(scanf(“%d”,&k),k!=-1)
{
switch(k)
{
case 0:InitStack(S);
printf(“操作完毕\n”);
tip();
break;
case 1:
printf(“请输入进栈元素:”);
scanf(“%d”,&x);
Push(S, x);
printf(“操作完毕\n”);
tip();
break;
case 2:
printf(“%d 出栈\n”,Pop(S));
printf(“操作完毕\n”);
tip();
break;
case 4:
Print(S);
printf(“操作完毕\n”);
tip();
break;
}
}
return 0;
}