数据结构入门-栈

前端之家收集整理的这篇文章主要介绍了数据结构入门-栈前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

定义:一种可以实现“先进后出”的存储结构

分类

  1. 静态栈
  2. 动态栈

算法:

  1. 出栈
  2. 压栈

代码实现:

多敲,多敲,后期改进

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <stdbool.h>
  4. typedef struct Node
  5. {
  6. int data;
  7. struct Node * pNext;
  8. }NODE,* PNODE;
  9. typedef struct Stack
  10. {
  11. PNODE pTop;
  12. PNODE pBottom;
  13. }STACK,* PSTACK;
  14. void init(PSTACK);
  15. void push(PSTACK,int);
  16. void traverse(PSTACK);
  17. bool pop(PSTACK,int *);
  18. void clear(PSTACK pS);
  19. int main(void)
  20. {
  21. STACK S; // STACK等价于 struct Stack
  22. int val;
  23. init(&S); // 目的是造出一个空栈
  24. push(&S,1); // 压栈
  25. push(&S,8);
  26. push(&S,23);
  27. push(&S,26);
  28. push(&S,34);
  29. push(&S,45);
  30. push(&S,76);
  31. push(&S,88);
  32. traverse(&S); // 遍历输出
  33. if(pop(&S,&val))
  34. {
  35. printf("你删除的是%d\n",val );
  36. traverse(&S);
  37. printf("清空数据\n");
  38. clear(&S);
  39. traverse(&S);
  40. }
  41. else
  42. {
  43. printf("删除失败\n");
  44. }
  45. }
  46. void init(PSTACK pS)
  47. {
  48. pS->pTop = (PNODE)malloc(sizeof(NODE));
  49. if (NULL == pS->pTop)
  50. {
  51. printf("动态内存分配失败\n");
  52. exit(-1);
  53. }
  54. else
  55. {
  56. pS->pBottom = pS->pTop;
  57. pS->pTop->pNext = NULL; // pS->pBottom->pNext = NULL
  58. }
  59. }
  60. void push(PSTACK pS,int val)
  61. {
  62. PNODE pNew = (PNODE)malloc(sizeof(NODE));
  63. pNew->data = val;
  64. pNew->pNext = pS->pTop; // 这里需要注意
  65. pS->pTop = pNew;
  66. return;
  67. }
  68. void traverse(PSTACK pS)
  69. {
  70. PNODE p = pS->pTop;
  71. while(p != pS->pBottom)
  72. {
  73. printf("%d ",p->data);
  74. p = p->pNext;
  75. }
  76. printf("\n");
  77. return;
  78. }
  79. bool empty(PSTACK pS )
  80. {
  81. if (pS->pTop == pS->pBottom)
  82. return true;
  83. else
  84. return false;
  85. }
  86. // 把pS所指向的栈出栈一次,并把出栈元素存下
  87. bool pop(PSTACK pS,int *val)
  88. {
  89. if (empty(pS))
  90. {
  91. return false;
  92. }
  93. else
  94. {
  95. PNODE p = pS->pTop;
  96. *val = p->data;
  97. pS->pTop = p->pNext;
  98. free(p);
  99. p = NULL;
  100. return true;
  101. }
  102. }
  103. // 清空
  104. void clear(PSTACK pS)
  105. {
  106. if (empty(pS))
  107. {
  108. return;
  109. }
  110. else
  111. {
  112. PNODE p = pS->pTop;
  113. PNODE q = NULL;
  114. while(p != pS->pBottom)
  115. {
  116. q = p->pNext;
  117. free(p);
  118. p = q;
  119. }
  120. pS->pTop = pS->pBottom;
  121. }
  122. }

应用:

  1. 函数调用
  2. 中断
  3. 表达式求值
  4. 内存分配
  5. 缓冲处理
  6. 迷宫

猜你在找的数据结构相关文章