• 栈和队列的初始化,插入,删除,销毁。


    目录

    题外话

    顺序表和链表优缺点以及特点

    一.栈的特点

    二. 栈的操作

    2.1初始化 

    2.2 栈的销毁

    2.3 栈的插入

    2.3 输出top

    2.4 栈的删除

    2.5 输出栈


    题外话

    顺序表和链表优缺点以及特点

    特点:顺序表,逻辑地址=物理地址。可以任意访问,访问时间复杂度O(1).。实现分配空                         间,当空间不足时,要动态扩容。顺序表在销毁时可以直接free,但链表要一                         个个删 除。

               链表:不连续的空间靠指针指向下一个地址。不用实现分配空间。

    优缺点:

                顺序表:适和访问,不适合插入删除,时间负责度为O(N)。链表适和插入删除操                           作。

    一.栈的特点

            (1)先进后出

            (2)栈不能任意打印,栈只能访问栈顶

            (3)栈只能尾插头删

    二. 栈的操作

    2.1初始化 

             

    1. void STInit(ST* pst)
    2. {
    3. assert(pst);
    4. pst->a = NULL;
    5. pst->top = -1;
    6. pst->capacity = 0;
    7. }

    2.2 栈的销毁

    2.3 栈的插入

    注意:🤖

    如果你初始化为0,那么就是先插入在++;

    如果你初始化为-1,那就是先++,在插入。

    1. }
    2. //插入
    3. void STPush(ST* pst, STDataType x)
    4. {
    5. assert(pst);
    6. if (pst->top == pst->capacity-1)
    7. {
    8. int newcapacity = pst->capacity == 0 ? 4 : pst->capacity * 2;
    9. STDataType* tmp = (STDataType*)realloc(pst->a, sizeof(STDataType) * newcapacity);
    10. if (tmp == NULL)
    11. {
    12. perror("realloc fail");
    13. return;
    14. }
    15. pst->a = tmp;
    16. pst->capacity = newcapacity;
    17. }
    18. pst->top++;
    19. pst->a[pst->top] = x;
    20. }

    2.3 输出top

    注意:

    由于栈的特性,只能先进先出,尾插头删,不能任意输出,所以我们只能输出头。

    1. void STTop(ST* pst)
    2. {
    3. assert(pst);
    4. assert(pst->top >= -1);
    5. return pst->a[pst->top];
    6. }

    2.4 栈的删除

    1. //删除
    2. void STPop(ST* pst)
    3. {
    4. assert(pst);
    5. assert(pst->top>=-1);
    6. pst->top--;

    2.5 输出栈

    1. while (STEmpty(&st) != true) {
    2. printf("%d ", STTop(&st));
    3. STPop(&st);
    4. }

     

     栈的完整代码

    1. #pragma once
    2. #include
    3. #include
    4. #include
    5. #include
    6. typedef int STDataType;
    7. typedef struct STack
    8. {
    9. STDataType* a; //数值的指针是下标
    10. int top;
    11. int capacity;
    12. }ST;
    13. void STInit(ST* pst);
    14. void STDestory(ST* pst);
    15. void STPush(ST* pst, STDataType x);
    16. void STPop(ST* pst);
    17. bool STEmpty(ST* pst);
    18. int STSize(ST* pst);
    19. STDataType STTop(ST* pst);
    20. #include"Stack.h"
    21. #include
    22. #include
    23. #include
    24. void STInit(ST* pst)
    25. {
    26. assert(pst);
    27. pst->a = NULL;
    28. pst->top = -1;
    29. pst->capacity = 0;
    30. }
    31. void STDestory(ST* pst)
    32. {
    33. assert(pst);
    34. free(pst->a);
    35. pst->a = NULL;
    36. pst->top = -1;
    37. pst->capacity = 0;
    38. }
    39. //插入
    40. void STPush(ST* pst, STDataType x)
    41. {
    42. assert(pst);
    43. if (pst->top == pst->capacity-1)
    44. {
    45. int newcapacity = pst->capacity == 0 ? 4 : pst->capacity * 2;
    46. STDataType* tmp = (STDataType*)realloc(pst->a, sizeof(STDataType) * newcapacity);
    47. if (tmp == NULL)
    48. {
    49. perror("realloc fail");
    50. return;
    51. }
    52. pst->a = tmp;
    53. pst->capacity = newcapacity;
    54. }
    55. pst->top++;
    56. pst->a[pst->top] = x;
    57. }
    58. //输出头结点
    59. STDataType STTop(ST* pst)
    60. {
    61. assert(pst);
    62. assert(pst->top >= -1);
    63. return pst->a[pst->top];
    64. }
    65. //删除
    66. void STPop(ST* pst)
    67. {
    68. assert(pst);
    69. assert(pst->top>=-1);
    70. pst->top--;
    71. }
    72. bool STEmpty(ST* pst)
    73. {
    74. assert(pst);
    75. if (pst->top == -1) {
    76. return true;
    77. }
    78. else {
    79. return false;
    80. }
    81. }
    82. int STSize(ST* pst)
    83. {
    84. assert(pst);
    85. return pst->top;
    86. }
    87. #define _CRT_SECURE_NO_WARNINGS
    88. #include
    89. #include
    90. #include"Stack.h"
    91. void Test1() {
    92. ST st;
    93. STInit(&st);
    94. STPush(&st, 1);
    95. STPush(&st, 2);
    96. STPush(&st, 3);
    97. STPush(&st, 4);
    98. printf("%d\n", STTop(&st));
    99. STPop(&st);
    100. printf("%d\n", STTop(&st));
    101. while (STEmpty(&st) != true) {
    102. printf("%d ", STTop(&st));
    103. STPop(&st);
    104. }
    105. }
    106. int main()
    107. {
    108. Test1();
    109. return 0;
    110. }

     

  • 相关阅读:
    0825(039天 集合框架04 队列、集合)
    插座为啥左零右火,可不可以反接,会有什么后果?80%电工答不出
    Nginx之正则表达式、location匹配简介及rewrite重写
    【C++杂货铺】国庆中秋特辑——多态由浅入深详细总结
    【操作系统笔记十三】Shell脚本编程
    基于stm32F4的智能宠物喂食器的设计:LVGL界面、定时喂食喂水通风
    在uni-app中使用ECharts - 配置四种不同的图表
    从安装python到使用opencv进行人脸检测
    EdgeCloudSim官方Sample运行——Windows+IntelliJ IDEA+Matlab
    【QML】使用 QtQuick2的ListView创建一个列表(一)
  • 原文地址:https://blog.csdn.net/qq_62830324/article/details/134425304