当前位置:   article > 正文

【数据结构】栈的实现和基本操作_栈的实现及基本操作

栈的实现及基本操作

目录

一.遵循先进后出,后进先出的原则

1.栈的定义

二.接口函数

1.初始化

2.销毁

3.插入

4.删除

5.栈顶的存放的元素

6.栈的数据个数量

7.判断栈是否为空

三.全部代码


一.遵循先进后出,后进先出的原则

1.栈的定义

  1. typedef int STDataType;
  2. //定义栈
  3. //先进后出,后进先出
  4. typedef struct Stack
  5. {
  6. STDataType* a;
  7. int top;
  8. int capacity;
  9. }ST;

二.接口函数

1.初始化

  1. void StackInit(ST* ps)
  2. {
  3. ps->a = NULL;
  4. ps->capacity = ps->top = 0;
  5. }

2.销毁

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

3.插入

  1. void StackPush(ST* ps, STDataType x)
  2. {
  3. //判断栈是否为空
  4. if (ps->capacity == ps->top)
  5. {
  6. int newcapacity = ps->capacity = ps->top == 0 ? 4 : ps->capacity * 2;
  7. STDataType* tmp = (STDataType*)realloc(ps->a, sizeof(STDataType)* newcapacity);
  8. if (tmp == NULL)
  9. {
  10. printf("realloc fail\n");
  11. exit(-1);
  12. }
  13. ps->a = tmp;
  14. ps->capacity = newcapacity;
  15. }
  16. //插入
  17. ps->a[ps->top] = x;
  18. ps->top++;
  19. }

4.删除

  1. //相当于尾删
  2. void StackPop(ST* ps)
  3. {
  4. assert(ps);
  5. assert(ps->top > 0);
  6. ps->top--;
  7. }

5.栈顶的存放的元素

  1. STDataType StackTop(ST* ps)
  2. {
  3. assert(ps);
  4. assert(ps->top > 0);
  5. return ps->a[ps->top - 1];
  6. }

6.栈的数据个数量

  1. int StackSize(ST* ps)
  2. {
  3. return ps->top;
  4. }

7.判断栈是否为空

  1. bool StackEmpty(ST* ps)
  2. {
  3. if (ps->top == 0)
  4. {
  5. return true;
  6. }
  7. else
  8. {
  9. return false;
  10. }
  11. }

三.全部代码

函数部分

  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include"Stack.h"
  3. void StackInit(ST* ps)
  4. {
  5. ps->a = NULL;
  6. ps->capacity = ps->top = 0;
  7. }
  8. void StackDestroy(ST* ps)
  9. {
  10. assert(ps);
  11. free(ps->a);
  12. ps->a = NULL;
  13. ps->capacity = ps->top = 0;
  14. }
  15. void StackPush(ST* ps, STDataType x)
  16. {
  17. //判断栈是否为空
  18. if (ps->capacity == ps->top)
  19. {
  20. int newcapacity = ps->capacity = ps->top == 0 ? 4 : ps->capacity * 2;
  21. STDataType* tmp = (STDataType*)realloc(ps->a, sizeof(STDataType)* newcapacity);
  22. if (tmp == NULL)
  23. {
  24. printf("realloc fail\n");
  25. exit(-1);
  26. }
  27. ps->a = tmp;
  28. ps->capacity = newcapacity;
  29. }
  30. //插入
  31. ps->a[ps->top] = x;
  32. ps->top++;
  33. }
  34. //相当于尾删
  35. void StackPop(ST* ps)
  36. {
  37. assert(ps);
  38. assert(ps->top > 0);
  39. ps->top--;
  40. }
  41. STDataType StackTop(ST* ps)
  42. {
  43. assert(ps);
  44. assert(ps->top > 0);
  45. return ps->a[ps->top - 1];
  46. }
  47. int StackSize(ST* ps)
  48. {
  49. return ps->top;
  50. }
  51. bool StackEmpty(ST* ps)
  52. {
  53. if (ps->top == 0)
  54. {
  55. return true;
  56. }
  57. else
  58. {
  59. return false;
  60. }
  61. }

头文件部分

  1. #pragma once
  2. #include<stdio.h>
  3. #include<assert.h>
  4. #include<stdlib.h>
  5. #include<stdbool.h>
  6. typedef int STDataType;
  7. //定义栈
  8. //先进后出,后进先出
  9. typedef struct Stack
  10. {
  11. STDataType* a;
  12. int top;
  13. int capacity;
  14. }ST;
  15. //初始化
  16. void StackInit(ST* ps);
  17. //销毁
  18. void StackDestroy(ST* ps);
  19. //插入
  20. void StackPush(ST* ps, STDataType x);
  21. //删除
  22. void StackPop(ST* ps);
  23. //栈顶的存放的元素
  24. STDataType StackTop(ST* ps);
  25. //栈的数据个数量
  26. int StackSize(ST* ps);
  27. //判断栈是否为空
  28. bool StackEmpty(ST* ps);

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/427188
推荐阅读
相关标签
  

闽ICP备14008679号