数据与结构-顺序栈

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

 

posted @ 2022-06-14 22:50  回忆也交给时间  阅读(27)  评论(0编辑  收藏  举报