码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 使用C语言实现顺序栈


    目录

    1.顺序栈

    2.顺序栈的相关操作

    (1)数据结构定义

    (2)初始化

    (3)重新申请空间和判空操作

    (4)入栈

    ​编辑

    (5)出栈和获取栈顶元素

    (6)主函数


    1.顺序栈

    栈:限定仅在表尾进行插入或删除操作的线性表。

    顺序栈:顺序存储结构是利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素,同时附设指针top指示栈顶元素在顺序栈中的位置。

     栈的应用:

    使用栈将十进制转换为八进制

    使用栈判断括号是否匹配

    使用栈判断是否为回文串

    注:栈的大小不可变,然而在我们的这个程序中当元素量达到MAXSIZE时,又重新申请空间,存储更多的元素(动态存储)。

    2.顺序栈的相关操作

    (1)数据结构定义

    1. #include
    2. #include
    3. #define MAXSIZE 5
    4. typedef int ElemType;
    5. typedef struct SqStack {
    6. ElemType *data;
    7. int top;
    8. int Maxsize;
    9. }SqStack;
    10. //菜单栏
    11. void MenuSqStack(){
    12. printf("----------1.入栈元素--------\n");
    13. printf("----------2.获取栈顶元素----\n");
    14. printf("----------3.弹出栈顶元素----\n");
    15. printf("----------4.重新初始化------\n");
    16. printf("----------5.退出操作--------\n");
    17. }

    (2)初始化

    1. //初始化
    2. void InitSqStack(SqStack&s){
    3. s.data=(ElemType*)malloc(MAXSIZE*sizeof(ElemType));
    4. if(s.data==NULL){
    5. printf("申请空间失败!\n");
    6. return ;
    7. }
    8. s.Maxsize=MAXSIZE;
    9. s.top=0;
    10. }

    (3)重新申请空间和判空操作

    1. //重新申请空间
    2. void reMalloc(SqStack&s,int len){
    3. ElemType*newbase=(ElemType*)realloc(s.data,(s.Maxsize+len)*sizeof(ElemType));
    4. s.data=newbase;
    5. s.Maxsize=s.Maxsize+len;
    6. }
    7. //判空
    8. bool StackEmpty(SqStack s){
    9. if(s.top==0){
    10. return true;
    11. }else{
    12. return false;
    13. }
    14. }

    (4)入栈

     

    注:如果当前栈空间已满,那么重新申请空间(在原来的基础上加上申请的空间)。

    1. //入栈
    2. void Push(SqStack&s,ElemType e){
    3. if(s.top>=s.Maxsize){
    4. printf("栈已满!\n");
    5. int len=0;
    6. printf("请输入申请空间的大小: ");
    7. scanf("%d",&len);
    8. reMalloc(s,len);
    9. return ;
    10. }
    11. s.data[s.top]=e;
    12. s.top=s.top+1;
    13. printf("入栈成功!\n");
    14. }

     

    (5)出栈和获取栈顶元素

    1. //出栈
    2. bool Pop(SqStack&s,ElemType&e){
    3. if(StackEmpty(s)){
    4. printf("栈已空!\n");
    5. return false;
    6. }
    7. s.top--;
    8. e=s.data[s.top];
    9. return true;
    10. }
    11. //获取栈顶元素
    12. void GetTopElem(SqStack s,ElemType&e){
    13. if(StackEmpty(s)){
    14. printf("栈已空!\n");
    15. return;
    16. }
    17. e=s.data[--s.top];
    18. }

    (6)主函数

    1. int main(){
    2. SqStack s;
    3. ElemType e;
    4. InitSqStack(s);
    5. while(1){
    6. int flag=0;
    7. bool popFlag=false;
    8. MenuSqStack();
    9. printf("请输入操作: ");
    10. scanf("%d",&flag);
    11. switch(flag){
    12. case 1:
    13. printf("请输入元素(-1_end): ");
    14. scanf("%d",&e);
    15. while(e!=-1){
    16. Push(s,e);
    17. printf("请输入元素(-1_end): ");
    18. scanf("%d",&e);
    19. }
    20. break;
    21. case 2:
    22. GetTopElem(s,e);
    23. printf("栈顶元素 = %d\n",e);
    24. break;
    25. case 3:
    26. popFlag=Pop(s,e);
    27. if(popFlag){
    28. printf("弹出栈顶元素 = %d\n",e);
    29. }
    30. break;
    31. case 4:
    32. InitSqStack(s);
    33. break;
    34. default:
    35. printf("结束操作\n");
    36. }
    37. if(flag==5){
    38. break;
    39. }
    40. }
    41. return 0;
    42. }

    测试

  • 相关阅读:
    ns2无线局域网隐藏节点仿真实验
    git异常:error: failed to push some refs to
    解决requests 2.28.x版本SSL错误:证书验证失败
    【CSDN竞赛第11期】编程竞赛总结
    linux性能分析(二)如何从日志分析 PV、UV
    坦克 400 Hi4-T:用产品诠释越野新能源
    2023-09-09 青少年软件编程(C语言)等级考试试卷(四级)解析
    大结局!OpenAI创始人奥特曼和 Greg Brockman 将加入微软!!!
    数据链路层 随机接入-CSMA/CA协议
    如何优雅的写 Controller 层代码?
  • 原文地址:https://blog.csdn.net/Keep_Trying_Go/article/details/126268607
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号