码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 顺序栈算法库构建


    学习贺利坚老师,顺序栈,构建顺序栈算法库

    数据结构之自建算法库——顺序栈_设计一个主函数实现对顺序栈进行操作测试,测试方法,依次把元素-CSDN博客文章浏览阅读4.9k次,点赞10次,收藏10次。本文针对数据结构基础系列网络课程(2):线性表中第3课时栈的顺序存储结构及其基本运算实现。按照“0207将算法变程序”[视频]部分建议的方法,建设自己的专业基础设施算法库。顺序栈算法库采用程序的多文件组织形式,包括两个文件:      1.头文件:sqstack.h,包含定义顺序栈数据结构的代码、宏定义、要实现算法的函数的声明;#ifndef SQSTACK_H_INCLUDED#defi_设计一个主函数实现对顺序栈进行操作测试,测试方法,依次把元素https://blog.csdn.net/sxhelijian/article/details/48463527本人详细解析博客:

    顺序栈文章浏览阅读4.1k次,点赞4次,收藏20次。栈和队列主要用于计算过程中保存的临时数据,如果数据在编程时就可以确定,那么使用几个变量就可以临时存储,但是如果存储的数据项数不能确定,就需要复杂的存储机制。这样的存储机制称为缓存。栈和队列就是使用最多的缓存结构。我们在调用方法的时候 , 时常调用别的成员方法, 递归循环调用 , 那调用到最后,又从最后一个函数,依次返回值 , 我们熟悉这个机制.但是我们却不知道 , 编译器是如何把这些调用信息存储起来的,用什么方法存储起来的, 这里就需要我们用到栈了,先进后出还有生活中 , 我们往木桶里放球 ,_栈的应用https://blog.csdn.net/qq_57484399/article/details/127185102版本更新日志:

    v1.0: 完成基本功能

    V1.0

    功能函数:

    1. //(1)初始化顺序栈
    2. void Init_Sequential_stack(Sequential_stack *&s);
    3. //(2)销毁顺序栈
    4. void Destroy_Sequential_stack(Sequential_stack *&destroy_Stack);
    5. //(3)输出展示顺序栈
    6. void Display_Sequential_stack(Sequential_stack *show_Stack);
    7. //(4) 将一个元素入栈
    8. bool Push_Sequential_stack(Sequential_stack *&push_Stack, ElemType push_value);
    9. //(5) 将一个元素出栈
    10. bool Pop_Sequential_stack(Sequential_stack *&pop_Stack, ElemType &pop_value);
    11. //(6)判断栈是否为空
    12. bool Empty_Sequential_stack(Sequential_stack *judge_Stack);
    13. //(7)求顺序栈中元素个数--栈长度
    14. int Length_Sequential_stack(Sequential_stack *Quantity_length_Stack);
    15. //(8) 访问获得栈顶元素
    16. bool GetTop_Sequential_stack(Sequential_stack *visited_Stack, ElemType &get_value);

    Sequential_stack.h

    1. #ifndef SEQUENTIAL_STACK_H_INCLUDE
    2. #define SEQUENTIAL_STACK_H_INCLUDE
    3. #include "stdio.h"
    4. #include
    5. #define MaxSize 100
    6. typedef char ElemType;
    7. typedef struct
    8. {
    9. ElemType data[MaxSize]; //顺序栈用来存储数据的数组
    10. int top; //定义栈顶指针
    11. }Sequential_stack; //顺序栈定义
    12. //(1)初始化顺序栈
    13. void Init_Sequential_stack(Sequential_stack *&s);
    14. //(2)销毁顺序栈
    15. void Destroy_Sequential_stack(Sequential_stack *&destroy_Stack);
    16. //(3)输出展示顺序栈
    17. void Display_Sequential_stack(Sequential_stack *show_Stack);
    18. //(4) 将一个元素入栈
    19. bool Push_Sequential_stack(Sequential_stack *&push_Stack, ElemType push_value);
    20. //(5) 将一个元素出栈
    21. bool Pop_Sequential_stack(Sequential_stack *&pop_Stack, ElemType &pop_value);
    22. //(6)判断栈是否为空
    23. bool Empty_Sequential_stack(Sequential_stack *judge_Stack);
    24. //(7)求顺序栈中元素个数--栈长度
    25. int Length_Sequential_stack(Sequential_stack *Quantity_length_Stack);
    26. //(8) 访问获得栈顶元素
    27. bool GetTop_Sequential_stack(Sequential_stack *visited_Stack, ElemType &get_value);
    28. #endif // SEQUENTIAL_STACK_H_INCLUDE

    Sequential_stack.cpp

    1. #include "Sequential_stack.h"
    2. /**************************************************
    3. (1)函数名: Init_Sequential_stack
    4. 功 能: 初始化顺序栈
    5. 参 数: Sequential_stack *&init_Stack:要进行初始化的栈
    6. 返回值: 无
    7. **************************************************/
    8. void Init_Sequential_stack(Sequential_stack *&init_Stack)
    9. {
    10. init_Stack = (Sequential_stack *)malloc(sizeof(Sequential_stack));
    11. init_Stack->top = -1; //毕竟是数组, 栈顶指针序号具有权威,序号之上默认空(可替换)
    12. }
    13. /**************************************************
    14. (2)函数名: Destroy_Sequential_stack
    15. 功 能: 销毁释放顺序栈空间
    16. 参 数: Sequential_stack *&destroy_Stack:要销毁的栈
    17. 返回值: 无
    18. **************************************************/
    19. void Destroy_Sequential_stack(Sequential_stack *&destroy_Stack)
    20. {
    21. free(destroy_Stack);
    22. }
    23. /**************************************************
    24. (3)函数名: Display_Sequential_stack
    25. 功 能: 输出展示栈内元素
    26. 参 数: Sequential_stack *show_Stack:要输出展示的栈
    27. 返回值: 无
    28. **************************************************/
    29. void Display_Sequential_stack(Sequential_stack *show_Stack)
    30. {
    31. //从栈顶开始 , 从上往下,输出栈内元素
    32. int counter;
    33. printf("\n");
    34. for(counter = show_Stack->top; counter >= 0; counter--)
    35. {
    36. printf("%c ",show_Stack->data[counter]);
    37. }
    38. printf("\n");
    39. }
    40. /**************************************************
    41. (4)函数名: Push_Sequential_stack
    42. 功 能: 把一个元素,压入栈顶
    43. 参 数: (1)Sequential_stack *&push_Stack:要进行压入元素的顺序栈
    44. (2)ElemType push_value:要压入的元素值
    45. 返回值:bool: 是否压入成功? true(栈不满,压入成功):false(栈满压入失败)
    46. **************************************************/
    47. bool Push_Sequential_stack(Sequential_stack *&push_Stack, ElemType push_value)
    48. {
    49. bool finished;
    50. if(push_Stack->top == MaxSize-1)
    51. {
    52. finished = false;
    53. }
    54. else
    55. {
    56. //栈不满代表可以入栈
    57. push_Stack->top++;
    58. push_Stack->data[push_Stack->top] = push_value;
    59. finished = true;
    60. }
    61. return finished;//单一出口
    62. }
    63. /**************************************************
    64. (5)函数名: Pop_Sequential_stack
    65. 功 能: 出栈顶内元素
    66. 参 数: (1)Sequential_stack *&pop_Stack:要弹出栈顶元素的栈
    67. (2)ElemType &pop_value: 存储要弹出的栈顶元素的变量
    68. 返回值: bool:是否出栈成功? true(栈非空,出栈成功):false(栈空,失败)
    69. **************************************************/
    70. bool Pop_Sequential_stack(Sequential_stack *&pop_Stack, ElemType &pop_value)
    71. {
    72. bool finished;//完成标志
    73. if(pop_Stack->top == -1)
    74. {
    75. finished = false;
    76. }
    77. else
    78. {
    79. //返回出栈元素
    80. pop_value = pop_Stack->data[pop_Stack->top];
    81. pop_Stack->top--;
    82. finished = true;
    83. }
    84. return finished;//单一出口
    85. }
    86. /**************************************************
    87. (6)函数名: Empty_Sequential_stack
    88. 功 能: 判断顺序栈是否为空
    89. 参 数: Sequential_stack *judge_Stack:要进行判断的顺序栈
    90. 返回值: bool: 栈是否为空? true(栈为空):false(栈不空)
    91. **************************************************/
    92. bool Empty_Sequential_stack(Sequential_stack *judge_Stack)
    93. {
    94. return (judge_Stack->top == -1);//true则空,false则非空
    95. }
    96. /**************************************************
    97. (7)函数名: Length_Sequential_stack
    98. 功 能: 判断顺序栈栈内元素个数
    99. 参 数: Sequential_stack *Quantity_Stack:要进行判断元素个数的顺序栈
    100. 返回值: int: 栈内元素个数
    101. **************************************************/
    102. int Length_Sequential_stack(Sequential_stack *Quantity_Stack)
    103. {
    104. return(Quantity_Stack->top+1);//数组--栈顶序号加一即为长度
    105. }
    106. /**************************************************
    107. (8)函数名: GetTop_Sequential_stack
    108. 功 能: 得到栈顶元素值
    109. 参 数: (1)Sequential_stack *visited_Stack:要访问的顺序栈
    110. (2)ElemType &get_value:传回栈顶元素值
    111. 注 意: ElemType &get_value:加地址符,需要传回数值
    112. 返回值: bool: 是否得到栈顶元素值? true(栈不空,得到栈顶元素):false(栈空)
    113. **************************************************/
    114. bool GetTop_Sequential_stack(Sequential_stack *visited_Stack, ElemType &get_value)
    115. {
    116. bool finished;
    117. if(visited_Stack->top == -1)
    118. {
    119. finished = false;
    120. }
    121. else
    122. {
    123. get_value = visited_Stack->data[visited_Stack->top];//只访问
    124. finished = true;
    125. }
    126. return finished; //单一出口
    127. }

    main.cpp

    1. #include
    2. #include "Sequential_stack.h"
    3. int main()
    4. {
    5. ElemType elem;
    6. Sequential_stack *test_stack;
    7. printf("\n(1)初始化栈test_stack\n");
    8. Init_Sequential_stack(test_stack);
    9. printf("\n(2)栈为%s\n",(Empty_Sequential_stack(test_stack)?"空":"非空"));
    10. printf("\n(3)依次进栈元素 a, b, c, d, e\n");
    11. Push_Sequential_stack(test_stack,'a');
    12. Push_Sequential_stack(test_stack,'b');
    13. Push_Sequential_stack(test_stack,'c');
    14. Push_Sequential_stack(test_stack,'d');
    15. Push_Sequential_stack(test_stack,'e');
    16. printf("\n(4)栈为%s\n",(Empty_Sequential_stack(test_stack)?"空":"非空"));
    17. printf("\n(5)栈的长度为:%d\n",Length_Sequential_stack(test_stack));
    18. printf("\n(6)从栈顶到栈底元素:\n");Display_Sequential_stack(test_stack);
    19. printf("\n(7)出栈序列:\n");
    20. while(!Empty_Sequential_stack(test_stack))
    21. {
    22. Pop_Sequential_stack(test_stack,elem);
    23. printf("\n%c\n",elem);
    24. }
    25. printf("\n(8)栈为%s\n",(Empty_Sequential_stack(test_stack)?"空":"非空"));
    26. printf("\n(9)释放栈\n");
    27. Destroy_Sequential_stack(test_stack);
    28. return 0;
    29. }

    运行结果演示:

  • 相关阅读:
    JavaScript脚本操作CSS
    MapStruct,降低无用代码的神器
    Eclipse的Preferences中没有Maven怎么办?
    SSM - Springboot - MyBatis-Plus 全栈体系(十三)
    【并发编程】史上最详细的ReentrantReadWriteLock源码刨析
    回归(Regression)
    第二十七章 解读Transformer_车道线检测中的Transformer(车道线感知)
    【Unity3D】3D 物体概念 ① ( 轴心点概念 | 物体的父子关系 | 子节点相对坐标 )
    Flink 流处理API
    @DateTimeFormat和@JsonFormat注解
  • 原文地址:https://blog.csdn.net/qq_57484399/article/details/138164036
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | 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号