• 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. 栈是有限制的顺序表。注意取值与取址的适用情况。
  • 相关阅读:
    Eclipse中jsp、js文件编辑时,卡死现象解决汇总
    环境安装备忘录 Nginx
    环境安装备忘录 Redis redis-slave-端口号.conf
    环境安装备忘录 Redis redis-common.conf
    环境安装备忘录 Redis
    Leetcode 131 Palindrome Partitioning(DFS思路)
    排序算法之快速排序(Quick Sort) -- 适用于Leetcode 75 Sort Colors
    谈STL的重要应用与实现
    二分图匹配相关问题
    理解操作系统相关知识
  • 原文地址:https://www.cnblogs.com/slz99/p/12527745.html
Copyright © 2020-2023  润新知