顺序栈的接口步伐

打印 上一主题 下一主题

主题 892|帖子 892|积分 2676

顺序栈的接口步伐


目录

头文件
  1. #include <stdio.h>
  2. #include <stdbool.h>
  3. #include <stdlib.h>
复制代码
创建顺序栈
  1. // 指的是顺序栈中的元素的数据类型,用户可以根据需要进行修改
  2. typedef int DataType_t;
  3. // 构造记录顺序栈SequenceStack各项参数(栈底地址+栈容量+栈顶元素的下标)的结构体
  4. typedef struct SequenceStack
  5. {
  6.         DataType_t *Bottom; // 记录栈底地址
  7.         unsigned int Size;        // 记录栈容量
  8.         int Top;                        // 记录栈顶元素的下标
  9. } SeqStack_t;
  10. /********************************************************************
  11. *
  12. *        name         :        SeqStack_Create
  13. *        function :  创建顺序栈并对顺序栈进行初始化
  14. *        argument :        @size:顺序栈中元素的数量
  15. *
  16. *        retval         :  返回1成功0失败
  17. *        author         :  17647576169@163.com
  18. *        date         :  2024-4-25
  19. *         note         :        None
  20. *
  21. * *****************************************************************/
  22. SeqStack_t *SeqStack_Create(unsigned int size)
  23. {
  24.         // 1.利用calloc为顺序栈的管理结构体申请一块堆内存
  25.         SeqStack_t *Manager = (SeqStack_t *)calloc(1, sizeof(SeqStack_t));
  26.         if (NULL == Manager)
  27.         {
  28.                 perror("calloc memory for manager is failed");
  29.                 exit(-1); // 程序异常终止
  30.         }
  31.         // 2.利用calloc为所有元素申请堆内存
  32.         Manager->Bottom = (DataType_t *)calloc(size, sizeof(DataType_t));
  33.         if (NULL == Manager->Bottom)
  34.         {
  35.                 perror("calloc memory for Stack is failed");
  36.                 free(Manager);
  37.                 exit(-1); // 程序异常终止
  38.         }
  39.         // 3.对管理顺序栈的结构体进行初始化(元素容量 + 最后元素下标)
  40.         Manager->Size = size; // 对顺序栈中的容量进行初始化
  41.         Manager->Top = -1;          // 由于顺序栈为空,则栈顶元素的下标初值为-1
  42.         return Manager;
  43. }
  44. /********************************************************************
  45. *
  46. *        name         :        SeqStack_IsFull
  47. *        function :  判断顺序栈是否已满
  48. *        argument :        @Manager:目标栈
  49. *
  50. *        retval         :  返回1为栈满0为栈未满
  51. *        author         :  17647576169@163.com
  52. *        date         :  2024-4-25
  53. *         note         :        None
  54. *
  55. * *****************************************************************/
  56. bool SeqStack_IsFull(SeqStack_t *Manager)
  57. {
  58.         return (Manager->Top + 1 == Manager->Size) ? true : false;
  59. }
  60. /********************************************************************
  61. *
  62. *        name         :        SeqStack_IsEmpty
  63. *        function :  判断顺序栈是否为空
  64. *        argument :        @Manager:目标栈
  65. *
  66. *        retval         :  返回1栈空,返回0栈非空
  67. *        author         :  17647576169@163.com
  68. *        date         :  2024-4-25
  69. *         note         :        None
  70. *
  71. * *****************************************************************/
  72. bool SeqStack_IsEmpty(SeqStack_t *Manager)
  73. {
  74.         return (-1 == Manager->Top) ? true : false;
  75. }
复制代码
入栈

把数据插入到栈空间的动作被称为入栈或者压栈
  1. /********************************************************************
  2. *
  3. *        name         :        SeqStack_Push
  4. *        function :  入栈
  5. *        argument :        @Manager:目标栈
  6. *
  7. *        retval         :  返回1成功0失败
  8. *        author         :  17647576169@163.com
  9. *        date         :  2024-4-25
  10. *         note         :        None
  11. *
  12. * *****************************************************************/
  13. bool SeqStack_Push(SeqStack_t *Manager, DataType_t Data)
  14. {
  15.         // 1.判断顺序栈是否已满
  16.         if (SeqStack_IsFull(Manager))
  17.         {
  18.                 printf("SeqStack Full is Full!\n");
  19.                 return false;
  20.         }
  21.         // 2.如果顺序栈有空闲空间,则把新元素添加到顺序栈的栈顶
  22.         Manager->Bottom[++Manager->Top] = Data;
  23.         return true;
  24. }
复制代码
出栈

从栈空间中删除数据的动作被称为出栈或者弹栈
  1. /********************************************************************
  2. *
  3. *        name         :        SeqStack_Pop
  4. *        function :  出栈
  5. *        argument :        @DataType_t:出栈节点数据值
  6. *
  7. *        retval         :  None
  8. *        author         :  17647576169@163.com
  9. *        date         :  2024-4-25
  10. *         note         :        None
  11. *
  12. * *****************************************************************/
  13. DataType_t SeqStack_Pop(SeqStack_t *Manager)
  14. {
  15.         DataType_t temp = 0; // 用于存储出栈元素的值
  16.         // 1.判断顺序栈是否为空
  17.         if (SeqStack_IsEmpty(Manager))
  18.         {
  19.                 printf("SeqStack is Empty!\n");
  20.                 return;
  21.         }
  22.         // 2.由于删除了一个元素,则需要让顺序栈的栈顶元素下标-1
  23.         temp = Manager->Bottom[Manager->Top--];
  24.         return temp;
  25. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

羊蹓狼

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表