【数据结构】动态顺序栈的增删改查

前端之家收集整理的这篇文章主要介绍了【数据结构】动态顺序栈的增删改查前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. #define INITIAL_STACK_SIZE 100
  5. #define INCREASE_STACK_SIZE 10 // 大于一个元素的内存大小
  6.  
  7. typedef int ElemType;
  8.  
  9. typedef struct Stack
  10. {
  11. ElemType *top;
  12. ElemType *base;
  13. int stacksize; // 记录栈的大小
  14. }Stack,*Pstack;
  15.  
  16. void InitStack(Pstack L);
  17. void Push(Pstack L,ElemType i);
  18. ElemType Pop(Pstack L);
  19. void DestroyStack(Pstack L);
  20. bool StackEmpty(Pstack L);
  21. int StackLength(Pstack L);
  22. ElemType GetTop(Pstack L);
  23. void StackTraverse(Pstack L);
  24.  
  25. void main ()
  26. {
  27. int size;
  28.  
  29. Stack stack;
  30. Pstack L = &stack;
  31. InitStack(L);
  32.  
  33. printf("请输入栈大小: ");
  34. scanf("%d",&size);
  35.  
  36. for (int i = 1; i <= size; i++)
  37. {
  38. Push(L,i);
  39. }
  40.  
  41. StackTraverse(L);
  42.  
  43. if (StackEmpty)
  44. {
  45. printf("栈顶元素为:%d\n",GetTop(L));
  46. Pop(L);
  47. printf("弹栈 弹出栈顶元素:\n");
  48. StackTraverse(L);
  49.  
  50. printf("栈内的元素个数为:%d\n",StackLength(L));
  51. }
  52.  
  53. DestroyStack(L);
  54.  
  55. L = NULL;
  56. }
  57.  
  58.  
  59. void InitStack(Pstack L)
  60. {
  61. L->base = (ElemType *)malloc(INITIAL_STACK_SIZE * sizeof(ElemType));
  62.  
  63. if (! L->base)
  64. exit(-1);
  65. L->top = L->base;
  66. L->stacksize = INITIAL_STACK_SIZE;
  67. }
  68.  
  69. void Push(Pstack L,ElemType i)
  70. {
  71. if (L->top - L->base >= L->stacksize){
  72. L->base = (ElemType *)realloc(L->base,(INITIAL_STACK_SIZE+INCREASE_STACK_SIZE)* sizeof(ElemType));
  73. L->top = L->base + L->stacksize;
  74. L->stacksize += INCREASE_STACK_SIZE;
  75. }
  76.  
  77. *(L->top++) = i;
  78. }
  79.  
  80. ElemType Pop(Pstack L)
  81. {
  82. if (L->top != L->base) // 栈不为空
  83. {
  84. i = * -- L->top;
  85. }
  86.  
  87. return i;
  88. }
  89.  
  90. void DestroyStack(Pstack L)
  91. {
  92. for (ElemType * p = L->base; p < L->top; p++)
  93. {
  94. *p = 0;
  95. }
  96. L->top = L->base = NULL;
  97. }
  98.  
  99. bool StackEmpty(Pstack L)
  100. {
  101. if (L->base != L->top)
  102. return false;
  103. else
  104. return true;
  105. }
  106.  
  107. int StackLength(Pstack L)
  108. {
  109. int num = 0;
  110.  
  111. for (ElemType * p = L->base; p < L->top; p++)
  112. {
  113. num++;
  114. }
  115.  
  116. return num;
  117. }
  118.  
  119. ElemType GetTop(Pstack L)
  120. {
  121. ElemType e = * (L->top-1);
  122.  
  123. return e;
  124. }
  125.  
  126. void StackTraverse(Pstack L)
  127. {
  128. ElemType * p = L->base;
  129.  
  130. while (p != L->top)
  131. {
  132. printf("%d\t",*p++);
  133. }
  134.  
  135. printf("\n");
  136. }

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