• [C数据结构]顺序栈


    Stack.h(函数声明)

    1. #pragma once
    2. #include
    3. #include
    4. #include
    5. #include//C语言没有bool类型,需要包含头文件才能使用。
    6. typedef int STDatatype;
    7. typedef struct Stack
    8. {
    9. STDatatype* a;
    10. int top;//标识栈顶的位置
    11. int capacity;//顺序栈的容量
    12. }ST;
    13. //初始化
    14. void StackInit(ST* ps);
    15. //销毁
    16. void StackDestroy(ST* ps);
    17. //入栈
    18. void StackPush(ST* ps,STDatatype x);
    19. //出栈
    20. void StackPop(ST* ps);
    21. //获取栈顶的数据
    22. STDatatype StackTop(ST* ps);
    23. //判断栈是否为空
    24. bool StackEempty(ST* ps);
    25. //获取栈中多少个数据
    26. int StackSize(ST* ps);

     Stack.c(函数实现)

    1. #include"Stack.h"
    2. //初始化
    3. void StackInit(ST* ps)
    4. {
    5. assert(ps);
    6. ps->a = NULL;
    7. ps->top = 0;
    8. ps->capacity = 0;
    9. }
    10. //销毁
    11. void StackDestroy(ST* ps)
    12. {
    13. assert(ps);
    14. free(ps->a);
    15. ps->a = NULL;
    16. ps->top = 0;
    17. ps->capacity = 0;
    18. }
    19. //入栈
    20. void StackPush(ST* ps, STDatatype x)
    21. {
    22. assert(ps);
    23. //判断栈是否满
    24. if (ps->top == ps->capacity)//top初始值为0,作为下标时是表示入栈下一个元素的位置。
    25. {
    26. int newcapacity = (ps->capacity == 0) ? 4 : 2 * (ps->capacity);
    27. STDatatype* tmp = (STDatatype*)realloc(ps->a, newcapacity*sizeof(STDatatype));
    28. if (tmp)
    29. {
    30. ps->a = tmp;
    31. ps->capacity = newcapacity;
    32. }
    33. else
    34. {
    35. printf("realloc fail\n");
    36. exit(-1);
    37. }
    38. }
    39. ps->a[ps->top] = x;
    40. ps->top++;
    41. }
    42. //出栈
    43. void StackPop(ST* ps)
    44. {
    45. assert(ps);
    46. if (ps->top == 0)
    47. {
    48. printf("栈为空,无法出栈\n");
    49. exit(-1);
    50. }
    51. else
    52. {
    53. ps->top--;
    54. }
    55. }
    56. //获取栈顶的数据
    57. STDatatype StackTop(ST* ps)
    58. {
    59. assert(ps);
    60. if (ps->top == 0)
    61. {
    62. printf("栈为空,无法出栈\n");
    63. exit(-1);
    64. }
    65. else
    66. {
    67. return ps->a[ps->top-1];
    68. }
    69. }
    70. //判断栈是否为空
    71. bool StackEempty(ST* ps)
    72. {
    73. assert(ps);
    74. return ps->top == 0;
    75. }
    76. //获取栈中数据的个数
    77. int StackSize(ST* ps)
    78. {
    79. assert(ps);
    80. return ps->top;
    81. }

    Test.c(函数测试) 

    1. #include"Stack.h"
    2. void TestStack1()
    3. {
    4. ST st;
    5. //栈初始化
    6. StackInit(&st);
    7. //入栈
    8. StackPush(&st, 1);
    9. StackPush(&st, 2);
    10. StackPush(&st, 3);
    11. StackPush(&st, 4);
    12. StackPush(&st, 5);
    13. //栈不为空,打印栈顶元素,再出栈。
    14. while (!StackEempty(&st))
    15. {
    16. printf("%d ", StackTop(&st));
    17. StackPop(&st);
    18. }
    19. //销毁栈
    20. StackDestroy(&st);
    21. }
    22. void TestStack2()//出栈的不同顺序
    23. {
    24. ST st;
    25. StackInit(&st);
    26. StackPush(&st, 1);
    27. StackPush(&st, 2);
    28. StackPush(&st, 3);
    29. printf("%d ", StackTop(&st));
    30. StackPop(&st);
    31. printf("%d ", StackTop(&st));
    32. StackPop(&st);
    33. StackPush(&st, 4);
    34. StackPush(&st, 5);
    35. while (!StackEempty(&st))
    36. {
    37. printf("%d ", StackTop(&st));
    38. StackPop(&st);
    39. }
    40. StackDestroy(&st);
    41. }
    42. int main()
    43. {
    44. TestStack1();
    45. return 0;
    46. }

  • 相关阅读:
    一篇带你搞定Javaの继承
    Spring 05: DI(依赖注入)优化Spring三层项目架构 + xml引用类型自动注入
    ALBERT-更小更少但并不快
    非科班毕业生,五面阿里:四轮技术面 +HR 一面已拿 offer
    react环境搭建及文件配置
    Python多线程实战:多线程并行很快,但写文件要加锁
    idea+SpringBoot使用过程中的问题集合
    比特币已胜
    JavaScript实现动态时钟显示
    30天Python入门(第二十七天:深入了解Python MongoDB)
  • 原文地址:https://blog.csdn.net/weixin_46603347/article/details/126137303