#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;
 }
