zoukankan      html  css  js  c++  java
  • C语言-顺序栈的实现

    顺序栈

    1.实验目的

    掌握栈的特点(先进后出)及其基本操作。如入栈、出栈等,栈的顺序存储结构和链式存储结构,以便在实际问题中灵活运用。

    2.实验内容

    创建一个顺序栈,实现数据的入栈和出栈运算,进而验证栈的先进后出的特性。步骤如下:

    1. 创建入栈和出栈函数;
    2. 在主函数中输入数据,以“”做结束标志,调用入栈和出栈函数。

    3.实验工具

    Visual C++

    4.实验代码

    如下:

    //Authors:xiaobei
    
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    
    typedef struct
    {
     char *base;
     char *top;
     int stacksize;
    }SqStack;
    
    void InitStack(SqStack &S);    //S为结构体名,是首地址,用&来取址
    void Push(SqStack &S,char e);
    void Pop(SqStack &S,char &e);
    void menu();
    
    int main()
    {
     SqStack stack_a;
     int i,user,n;
     char E[5],e;
     InitStack(stack_a);
     while(1)
     {
      menu();
      scanf("%d",&user);
      switch(user)
      {
      case 1:{
       printf("请输入入栈元素:");
       getchar();
       gets(E);
       for(i=0;i<5;i++)
       {
    //scanf(" %c",&e);   
    //%c前加空格,或者前用getchar(),防止scanf在接收字符时接收到“
    ”
    //E[i]==""时结束
        if(E[i])
         Push(stack_a,E[i]);
        else
         break;
       }
          };break;
      case 2:{
       printf("请输入出栈元素个数:");
       scanf("%d",&n);
       for(i = 0;i<n;i++)
       {
        Pop(stack_a,e);
       };break;
          }
      case 0:exit(0);
      }
     }
     return 0;
    }
    
    //打印菜单
    void menu()
    {
     printf("
    *************
    1.入栈
    2.出栈
    0.退出
    *************
    >>>");
    }
    
    //栈的初始化
    void InitStack(SqStack &S)
    {
     S.base = (char*)malloc(5*sizeof(char));
     if(!S.base)
     {
      printf("内存分配失败!
    ");
      exit(0);
     }
     S.top = S.base;
     S.stacksize = 5;
     printf("内存分配成功!
    ");
    }
    
    //入栈
    void Push(SqStack &S,char e)
    {
     if(S.top - S.base == S.stacksize)
      printf("栈满!
    ");
     else
     {
      *S.top++ = e;
      printf("%c入栈成功!
    ",e);
     }
    }
    
    //出栈
    void Pop(SqStack &S,char &e)
    {
     if(S.top == S.base)
      printf("栈空!
    ");
     else
     {
      e = *--S.top;
      printf("%c出栈成功!
    ",e);
     }
    }

    5.总结

    1. 栈是“先进后出”。
    2. 顺序栈在栈顶进行操做。
    3. 栈满的标志是top-base == size。
    4. 栈是有限制的顺序表。注意取值与取址的适用情况。
  • 相关阅读:
    TensorFlow-Slim 简介+Demo
    AI 常见术语总结
    经典深度学习CNN总结
    YOLO V3 原理
    tf.app.run() 运行结束时,报错:SystemExit exception: no description
    VSCode中相对路径设置问题
    SSD算法原理
    机器学习-交叉熵原理
    tensorflow scope的作用
    水池进水和出水两个线程问题
  • 原文地址:https://www.cnblogs.com/slz99/p/12527745.html
Copyright © 2011-2022 走看看