ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

数据与结构-顺序栈

2022-06-14 23:02:34  阅读:168  来源: 互联网

标签:case SeqStack return top break 顺序 printf 数据 结构


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

 

标签:case,SeqStack,return,top,break,顺序,printf,数据,结构
来源: https://www.cnblogs.com/5ran2yl/p/16376767.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有