当前位置:   article > 正文

C语言实现栈(基于链表)_typedef struct stackrepr *stack

typedef struct stackrepr *stack

栈的底层数据结构可以是数组,也可以是链表,用链表实现栈,理论上是无限大的

下面是链栈的实现代码

  1. #include<stdbool.h>
  2. #include<stdlib.h>
  3. typedef int datatype;
  4. //Link Stack 实现顺序栈,使用链表来实现
  5. // struct LinkList
  6. // {
  7. // datatype data;
  8. // struct LinkList *next;
  9. // };
  10. struct stack
  11. {
  12. datatype data;
  13. struct stack *next;
  14. };
  15. typedef struct stack Stack;
  16. //创建栈
  17. Stack *s;
  18. //初始化栈
  19. void init()
  20. {
  21. s=NULL;
  22. }
  23. //判断栈是否为空
  24. bool Empty()
  25. {
  26. if(s==NULL)
  27. {
  28. return true;
  29. }
  30. else
  31. {
  32. return false;
  33. }
  34. }
  35. //判断栈是否已满了
  36. // void full(Stack *s)
  37. // {
  38. // if(s->top==realsize-1)
  39. // {
  40. // realsize++;
  41. // s->data=(datatype *)realloc(s->data,realsize);
  42. // }
  43. // }
  44. //入栈
  45. void Push(datatype element)
  46. {
  47. Stack *p = (Stack *)malloc(sizeof(Stack));
  48. p->data=element;
  49. p->next=s;
  50. s=p;
  51. }
  52. //出栈
  53. void Pop()
  54. {
  55. if(!Empty(s))
  56. {
  57. s=s->next;
  58. }
  59. else
  60. {
  61. printf("栈空\n");
  62. }
  63. }
  64. //取栈顶元素
  65. datatype Top()
  66. {
  67. if(!Empty(s))
  68. {
  69. return s->data;
  70. }
  71. else
  72. {
  73. printf("栈空\n");
  74. }
  75. }
  76. //销毁栈
  77. void Destroy()
  78. {
  79. free(s);//因该销毁每一个元素
  80. s=NULL;
  81. // free(s.data); //容易导致失败
  82. }

测试代码

  1. #include<stdio.h>
  2. #include "LinkStack.h"
  3. int main()
  4. {
  5. int i=0;
  6. // struct stack s;
  7. //初始化栈
  8. printf("\n###########初始化栈###########\n");
  9. init();
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/400686
推荐阅读
  

闽ICP备14008679号