数据结构-顺序栈

 
#include<stdio.h>
#include<stdlib.h>
#define MAX  20
typedef struct 
{
    int stack[MAX];
    int top;
}sqstack;
void Initstack(sqstack *p)   /*初始化*/
{
if(!p)
    printf("error");
    p->top=-1; 
}
void Push(sqstack *p,int x)
{
    if(p->top<MAX-1)
    {
        p->top=p->top+1;
        p->stack[p->top]=x;
    }
    else printf("overflow!
");
}
int Pop(sqstack *p)
{
    int x;
    if(p->top!=0)
    {
        x=p->stack[p->top];
        printf("以前的栈顶元素%d已经被删除 !
",x);
        p->top=p->top-1;
        return x;
    }
   else
      {
          printf("underflow!
");
          return 0;
      }
  }
  int Gettop(sqstack *p)
  {
      int x;
      if(p->top!=0)
      {
          x=p->stack[p->top];
          return x;
      }
      else
      {
          printf("underflow
");
          return 0;
      }
  }
  void Outstack(sqstack *p)
  {
      int i;
      printf("
");
      if(p->top<0)
      {
          printf("这是一个空栈 !");
          printf("
");
       }
      else
        for(i=p->top;i>=0;i--)
           printf("第 %d 个数据元素是: %d
",i,p->stack[i]);

  }
  void Setempty(sqstack *p)
  {
     p->top=-1;
  }
   void main()
    {
        sqstack *q;
        int y,cord;
        int a;
        do
        {
            printf("
");
            printf("第一次使用必须初始化 !
");
            printf("
");
            printf("
            主菜单                
");
            printf("
      1    初始化顺序栈           
");
            printf("
      2    插入一个元素           
");
            printf("
      3    删除栈顶元素           
");
            printf("
      4    取栈顶元素             
");
            printf("
      5    置空顺序栈             
");
            printf("
      6    结束程序运行           
");
            printf("
----------------------------------
");
            printf("请输入您的选择 (1,2,3,4,5,6)");
            scanf("%d",&cord);
            printf("
");
            switch(cord)
            {
                case 1:
                {
                    q=(sqstack *)malloc(sizeof(sqstack));
                    Initstack(q);
                    Outstack(q);
                }break;
                case 2:
                { 
                   printf("请输入要插入的数据元素 :a=");
                   scanf("%d",&a);
                   Push(q,a);
                   Outstack(q);
                }break;
                case 3:
                {
                    Pop(q);
                    Outstack(q);
                }
                break;
                case 4:
                {
                    y=Gettop(q);
                    printf("
 栈顶元素为 : %d",y);
                    Outstack(q);
                }break;
                case 5:
                {
                    Setempty(q);
                    printf("
顺序栈被置空! 
");
                    Outstack(q);
                }break;
                case 6:
                exit(0);
            }
         }while(cord<=6);
    }