数据结构-顺序栈

 
#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!\n");
}
int Pop(sqstack *p)
{
    int x;
    if(p->top!=0)
    {
        x=p->stack[p->top];
        printf("以前的栈顶元素%d已经被删除 !\n",x);
        p->top=p->top-1;
        return x;
    }
   else
      {
          printf("underflow!\n");
          return 0;
      }
  }
  int Gettop(sqstack *p)
  {
      int x;
      if(p->top!=0)
      {
          x=p->stack[p->top];
          return x;
      }
      else
      {
          printf("underflow\n");
          return 0;
      }
  }
  void Outstack(sqstack *p)
  {
      int i;
      printf("\n");
      if(p->top<0)
      {
          printf("这是一个空栈 !");
          printf("\n");
       }
      else
        for(i=p->top;i>=0;i--)
           printf("第 %d 个数据元素是: %d\n",i,p->stack[i]);

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

 

posted @ 2013-10-17 14:15  心绪如泥  阅读(410)  评论(0编辑  收藏  举报