当前位置:   article > 正文

顺序栈的详解_入栈和出栈的顺序规律

入栈和出栈的顺序规律

一、栈的定义

1.1 栈的定义

栈是一种特殊的数据结构,它的特点是后进先出(Last In First Out,LIFO)。栈是一种线性结构,它可以用来存储一组具有相同类型的数据元素。栈的基本操作包括压入(push)和弹出(pop),其中压入操作将数据元素添加到栈的顶部,弹出操作将栈顶的数据元素移除并返回。

1.2 栈的特点

栈的特点包括:

  1. 后进先出:栈中最后一个添加的元素最先被弹出。

  2. 只能在栈顶进行操作:栈的操作只能在栈顶进行,不能在中间或底部操作,因为栈是一种先进后出的结构。

  3. 可以用数组或链表实现:栈可以用数组或链表来实现,数组实现的栈需要指定栈的大小,而链表实现的栈可以动态扩展。

  4. 存储空间受限:栈的存储空间是有限的,一旦达到栈的存储上限,就会出现栈溢出的问题。

  5. 可以用递归实现:栈也可以通过递归的方式来实现,每次递归函数调用都会将参数和返回地址压入栈中,直到递归结束,最后按照相反的顺序弹出栈中的元素。

二、栈的实现使用与应用

2.1 栈的接口定义

  1. typedef int DataType;
  2. typedef struct
  3. {
  4. DataType *data; /* 堆空间 */
  5. int maxsize;
  6. int top; /* 栈顶指针 */
  7. }SeqStack;
  8. /* 1. 初始化 */
  9. int init(SeqStack *S, int MaxSize);
  10. /* 2. 进(入)栈 */
  11. int push(SeqStack *S, DataType x);
  12. /* 3. 出栈 */
  13. int pop(SeqStack *S, DataType *x);
  14. /* 4. 取栈顶元素 */
  15. int get_top(SeqStack *S, DataType *x);
  16. /* 5. 栈为空?*/
  17. int empty(SeqStack *S);
  18. /* 6. 栈满?*/
  19. int full(SeqStack *S);
  20. /* 7. 销毁*/
  21. int destroy(SeqStack *S);

2.2 栈的实现

2.2.1  栈的初始化
  1. int init(SeqStack *S, int MaxSize)
  2. {
  3. /*申请内存空间*/
  4. S->data = (DataType*)malloc(sizeof(DataType)*MaxSize);
  5. if(!S->data)
  6. {
  7. printf("内存申请错误,初始化失败![10001]\n");
  8. return 10001;
  9. }
  10. S->maxsize = MaxSize;
  11. S->top = -1;
  12. return 0;
  13. }
2.2.2  入栈
  1. int push(SeqStack *S, DataType x)
  2. {
  3. /*是否满?*/
  4. if(full(S))
  5. {
  6. printf("栈已满!10002\n");
  7. return 10002;
  8. }
  9. S->top++; /*移动指针*/
  10. S->data[S->top] = x;/*放入数据*/
  11. return 0; /*OK*/
  12. }
2.2.3  出栈
  1. int pop(SeqStack *S, DataType *x)
  2. {
  3. /*是否空?*/
  4. if(empty(S))
  5. {
  6. printf("栈为空!10003\n");
  7. return 10003;
  8. }
  9. *x = S->data[S->top]; /*栈顶元素赋值给x*/
  10. S->top--; /*移动栈顶指针*/
  11. return 0;
  12. }
2.2.4  查找栈顶元素
  1. int get_top(SeqStack *S, DataType *x)
  2. {
  3. /*是否空?*/
  4. if(empty(S))
  5. {
  6. printf("栈为空!10003\n");
  7. return 10003;
  8. }
  9. *x = S->data[S->top]; /*栈顶元素赋值给x*/
  10. return 0;
  11. }
2.2.5  判断栈是否为空
  1. int empty(SeqStack *S)
  2. {
  3. return (S->top == -1)?1:0;
  4. }
2.2.6  判断栈是否已满
  1. int full(SeqStack *S)
  2. {
  3. return (S->top == S->maxsize - 1)?1:0;
  4. }
2.2.7  销毁栈
  1. int destroy(SeqStack *S)
  2. {
  3. free(S->data);
  4. return 0;
  5. }

2.3栈的应用

2.3.1十进制转二进制
  1. int d_to_b(int d)
  2. {
  3. SeqStack S;
  4. int b;
  5. /*初始化栈*/
  6. init(&S,32);
  7. /*d不为0,余数进栈*/
  8. while(d)
  9. {
  10. push(&S, d % 2);
  11. d /= 2;
  12. }
  13. /*依次出栈*/
  14. while(!empty(&S))
  15. {
  16. pop(&S,&b);
  17. printf("%d", b);
  18. }
  19. /*销毁栈*/
  20. destroy(&S);
  21. }
2.3.2后缀表达式计算
  1. int expression()
  2. {
  3. SeqStack S;
  4. int i;
  5. int op1, op2;
  6. int x;
  7. char exp[20]; /*后缀表达式*/
  8. init(&S, 10);
  9. printf("请输入一个后缀表达式(eg. 56+):");
  10. scanf("%s", exp);
  11. for(i=0;i<strlen(exp);i++)
  12. {
  13. switch(exp[i])
  14. {
  15. case '0':
  16. case '1':
  17. case '2':
  18. case '3':
  19. case '4':
  20. case '5':
  21. case '6':
  22. case '7':
  23. case '8':
  24. case '9':
  25. /*入栈*/
  26. push(&S, exp[i]-48);
  27. printf("%c\n",exp[i]);
  28. break;
  29. case '+':
  30. /*出2个*/
  31. pop(&S, &op1);
  32. pop(&S, &op2);
  33. x = op1 + op2;
  34. push(&S, x);
  35. break;
  36. case '*':
  37. pop(&S, &op1);
  38. pop(&S, &op2);
  39. x = op1 * op2;
  40. push(&S, x);
  41. break;
  42. case '-':
  43. pop(&S, &op1);
  44. pop(&S, &op2);
  45. x = op2- op1;
  46. push(&S, x);
  47. break;
  48. case '/':
  49. pop(&S, &op1);
  50. pop(&S, &op2);
  51. x = op2/op1;
  52. push(&S, x);
  53. break;
  54. }
  55. }
  56. pop(&S, &x);
  57. printf("计算结果为:%s = %d\n", exp, x);
  58. destroy(&S);
  59. }

2.4栈的使用

  1. #include <stdio.h>
  2. #include "seqstack.h"
  3. #include "welcome.h"
  4. int main(int argc, char* argv[])
  5. {
  6. SeqStack S;
  7. DataType x;
  8. int maxsize;
  9. char yn;
  10. int i,m,n,cmd,d;
  11. ;
  12. for(i=0;i<strlen(welcome);i++)
  13. {
  14. printf("%c",welcome[i]);
  15. for(m=0;m<1000;m++)
  16. for(n=0;n<1000;n++)
  17. {
  18. ;
  19. }
  20. }
  21. printf("---------顺序栈演示程序-----------\n");
  22. do
  23. {
  24. printf(" 1. 初始化\n");
  25. printf(" 2. 入栈\n");
  26. printf(" 3. 出栈\n");
  27. printf(" 4. 查找栈顶元素\n");
  28. printf(" 5. 判断栈为是否空\n");
  29. printf(" 6. 判断栈为是否满\n");
  30. printf(" 7. 销毁栈\n");
  31. printf(" 8. 栈的应用\n");
  32. printf(" 9. 帮助\n");
  33. printf("请选择(0~9,0退出):");
  34. scanf("%d", &cmd);
  35. switch(cmd)
  36. {
  37. case 1:
  38. printf("请输入栈的最大存储空间(MaxSize):");
  39. scanf("%d", &maxsize);
  40. if(!init(&S, maxsize))
  41. {
  42. printf("栈已初始化!\n");
  43. }
  44. break;
  45. case 2:
  46. printf("请输入入栈元素:x=");
  47. scanf("%d", &x);
  48. if(!push(&S, x))
  49. {
  50. printf("元素【%d】已入栈!\n", x);
  51. }
  52. break;
  53. case 3:
  54. printf("确定要出栈(出栈后数据不可恢复,y|n,n)?");
  55. fflush(stdin);
  56. scanf("%c", &yn);
  57. if(yn == 'y' || yn == 'Y')
  58. {
  59. if(!pop(&S, &x))
  60. {
  61. printf("栈顶元素【%d】已出栈!\n", x);
  62. }
  63. }
  64. break;
  65. case 4:
  66. if(!get_top(&S,&x)){
  67. printf("查找到栈顶元素[%d]\n",x);
  68. }
  69. break;
  70. case 5:
  71. if(empty(&S)){
  72. printf("栈为空!\n");
  73. }else{
  74. printf("栈内存在元素\n");
  75. }
  76. break;
  77. case 6:
  78. if(full(&S)){
  79. printf("栈满!\n");
  80. }else{
  81. printf("栈未满\n");
  82. }
  83. break;
  84. case 7:
  85. destroy(&S);
  86. printf("栈已销毁\n");
  87. break;
  88. case 8:
  89. do
  90. {
  91. printf("----------8.栈的应用------------\n");
  92. printf(" 1. 十进制转换为二进制\n");
  93. printf(" 2. 后缀表达式计算\n");
  94. printf(" 0. 返回\n");
  95. printf("请选择:");
  96. scanf("%d", &cmd);
  97. if(cmd == 1)
  98. {
  99. printf("请输入一个十进制数:");
  100. scanf("%d", &d);
  101. printf("二进制为:");
  102. d_to_b(d);
  103. printf("\n");
  104. }
  105. if(cmd == 2)
  106. {
  107. expression();
  108. }
  109. }while(cmd!=0);
  110. cmd = -1;
  111. break;
  112. case 9:
  113. printf(" 本程序为栈的演示程序,由黄彬森设计开发,程序完成了栈的基本功能!\n");
  114. default:
  115. printf("输入选项不存在\n");
  116. }
  117. }while(cmd!=0);
  118. return 0;
  119. }
  120. /*十进制转换为二进制*/
  121. int d_to_b(int d)
  122. {
  123. SeqStack S;
  124. int b;
  125. /*初始化栈*/
  126. init(&S,32);
  127. /*d不为0,余数进栈*/
  128. while(d)
  129. {
  130. push(&S, d % 2);
  131. d /= 2;
  132. }
  133. /*依次出栈*/
  134. while(!empty(&S))
  135. {
  136. pop(&S,&b);
  137. printf("%d", b);
  138. }
  139. /*销毁栈*/
  140. destroy(&S);
  141. }
  142. /*后缀表达式计算*/
  143. int expression()
  144. {
  145. SeqStack S;
  146. int i;
  147. int op1, op2;
  148. int x;
  149. char exp[20]; /*后缀表达式*/
  150. init(&S, 10);
  151. printf("请输入一个后缀表达式(eg. 56+):");
  152. scanf("%s", exp);
  153. for(i=0;i<strlen(exp);i++)
  154. {
  155. switch(exp[i])
  156. {
  157. case '0':
  158. case '1':
  159. case '2':
  160. case '3':
  161. case '4':
  162. case '5':
  163. case '6':
  164. case '7':
  165. case '8':
  166. case '9':
  167. /*入栈*/
  168. push(&S, exp[i]-48);
  169. printf("%c\n",exp[i]);
  170. break;
  171. case '+':
  172. /*出2个*/
  173. pop(&S, &op1);
  174. pop(&S, &op2);
  175. x = op1 + op2;
  176. push(&S, x);
  177. break;
  178. case '*':
  179. pop(&S, &op1);
  180. pop(&S, &op2);
  181. x = op1 * op2;
  182. push(&S, x);
  183. break;
  184. case '-':
  185. pop(&S, &op1);
  186. pop(&S, &op2);
  187. x = op2- op1;
  188. push(&S, x);
  189. break;
  190. case '/':
  191. pop(&S, &op1);
  192. pop(&S, &op2);
  193. x = op2/op1;
  194. push(&S, x);
  195. break;
  196. }
  197. }
  198. pop(&S, &x);
  199. printf("计算结果为:%s = %d\n", exp, x);
  200. destroy(&S);
  201. }

三、完整代码

3.1  main.c文件代码

  1. #include <stdio.h>
  2. #include "seqstack.h"
  3. #include "welcome.h"
  4. int main(int argc, char* argv[])
  5. {
  6. SeqStack S;
  7. DataType x;
  8. int maxsize;
  9. char yn;
  10. int i,m,n,cmd,d;
  11. ;
  12. for(i=0;i<strlen(welcome);i++)
  13. {
  14. printf("%c",welcome[i]);
  15. for(m=0;m<1000;m++)
  16. for(n=0;n<1000;n++)
  17. {
  18. ;
  19. }
  20. }
  21. printf("---------顺序栈演示程序-----------\n");
  22. do
  23. {
  24. printf(" 1. 初始化\n");
  25. printf(" 2. 入栈\n");
  26. printf(" 3. 出栈\n");
  27. printf(" 4. 查找栈顶元素\n");
  28. printf(" 5. 判断栈为是否空\n");
  29. printf(" 6. 判断栈为是否满\n");
  30. printf(" 7. 销毁栈\n");
  31. printf(" 8. 栈的应用\n");
  32. printf(" 9. 帮助\n");
  33. printf("请选择(0~9,0退出):");
  34. scanf("%d", &cmd);
  35. switch(cmd)
  36. {
  37. case 1:
  38. printf("请输入栈的最大存储空间(MaxSize):");
  39. scanf("%d", &maxsize);
  40. if(!init(&S, maxsize))
  41. {
  42. printf("栈已初始化!\n");
  43. }
  44. break;
  45. case 2:
  46. printf("请输入入栈元素:x=");
  47. scanf("%d", &x);
  48. if(!push(&S, x))
  49. {
  50. printf("元素【%d】已入栈!\n", x);
  51. }
  52. break;
  53. case 3:
  54. printf("确定要出栈(出栈后数据不可恢复,y|n,n)?");
  55. fflush(stdin);
  56. scanf("%c", &yn);
  57. if(yn == 'y' || yn == 'Y')
  58. {
  59. if(!pop(&S, &x))
  60. {
  61. printf("栈顶元素【%d】已出栈!\n", x);
  62. }
  63. }
  64. break;
  65. case 4:
  66. if(!get_top(&S,&x)){
  67. printf("查找到栈顶元素[%d]\n",x);
  68. }
  69. break;
  70. case 5:
  71. if(empty(&S)){
  72. printf("栈为空!\n");
  73. }else{
  74. printf("栈内存在元素\n");
  75. }
  76. break;
  77. case 6:
  78. if(full(&S)){
  79. printf("栈满!\n");
  80. }else{
  81. printf("栈未满\n");
  82. }
  83. break;
  84. case 7:
  85. destroy(&S);
  86. printf("栈已销毁\n");
  87. break;
  88. case 8:
  89. do
  90. {
  91. printf("----------8.栈的应用------------\n");
  92. printf(" 1. 十进制转换为二进制\n");
  93. printf(" 2. 后缀表达式计算\n");
  94. printf(" 0. 返回\n");
  95. printf("请选择:");
  96. scanf("%d", &cmd);
  97. if(cmd == 1)
  98. {
  99. printf("请输入一个十进制数:");
  100. scanf("%d", &d);
  101. printf("二进制为:");
  102. d_to_b(d);
  103. printf("\n");
  104. }
  105. if(cmd == 2)
  106. {
  107. expression();
  108. }
  109. }while(cmd!=0);
  110. cmd = -1;
  111. break;
  112. case 9:
  113. printf(" 本程序为栈的演示程序,由黄彬森设计开发,程序完成了栈的基本功能!\n");
  114. default:
  115. printf("输入选项不存在\n");
  116. }
  117. }while(cmd!=0);
  118. return 0;
  119. }
  120. /*十进制转换为二进制*/
  121. int d_to_b(int d)
  122. {
  123. SeqStack S;
  124. int b;
  125. /*初始化栈*/
  126. init(&S,32);
  127. /*d不为0,余数进栈*/
  128. while(d)
  129. {
  130. push(&S, d % 2);
  131. d /= 2;
  132. }
  133. /*依次出栈*/
  134. while(!empty(&S))
  135. {
  136. pop(&S,&b);
  137. printf("%d", b);
  138. }
  139. /*销毁栈*/
  140. destroy(&S);
  141. }
  142. /*后缀表达式计算*/
  143. int expression()
  144. {
  145. SeqStack S;
  146. int i;
  147. int op1, op2;
  148. int x;
  149. char exp[20]; /*后缀表达式*/
  150. init(&S, 10);
  151. printf("请输入一个后缀表达式(eg. 56+):");
  152. scanf("%s", exp);
  153. for(i=0;i<strlen(exp);i++)
  154. {
  155. switch(exp[i])
  156. {
  157. case '0':
  158. case '1':
  159. case '2':
  160. case '3':
  161. case '4':
  162. case '5':
  163. case '6':
  164. case '7':
  165. case '8':
  166. case '9':
  167. /*入栈*/
  168. push(&S, exp[i]-48);
  169. printf("%c\n",exp[i]);
  170. break;
  171. case '+':
  172. /*出2个*/
  173. pop(&S, &op1);
  174. pop(&S, &op2);
  175. x = op1 + op2;
  176. push(&S, x);
  177. break;
  178. case '*':
  179. pop(&S, &op1);
  180. pop(&S, &op2);
  181. x = op1 * op2;
  182. push(&S, x);
  183. break;
  184. case '-':
  185. pop(&S, &op1);
  186. pop(&S, &op2);
  187. x = op2- op1;
  188. push(&S, x);
  189. break;
  190. case '/':
  191. pop(&S, &op1);
  192. pop(&S, &op2);
  193. x = op2/op1;
  194. push(&S, x);
  195. break;
  196. }
  197. }
  198. pop(&S, &x);
  199. printf("计算结果为:%s = %d\n", exp, x);
  200. destroy(&S);
  201. }

3.2  seqstack.h文件代码

  1. typedef int DataType;
  2. typedef struct
  3. {
  4. DataType *data; /* 堆空间 */
  5. int maxsize;
  6. int top; /* 栈顶指针 */
  7. }SeqStack;
  8. /* 1. 初始化 */
  9. int init(SeqStack *S, int MaxSize);
  10. /* 2. 进(入)栈 */
  11. int push(SeqStack *S, DataType x);
  12. /* 3. 出栈 */
  13. int pop(SeqStack *S, DataType *x);
  14. /* 4. 取栈顶元素 */
  15. int get_top(SeqStack *S, DataType *x);
  16. /* 5. 栈为空?*/
  17. int empty(SeqStack *S);
  18. /* 6. 栈满?*/
  19. int full(SeqStack *S);
  20. /* 7. 销毁*/
  21. int destroy(SeqStack *S);

3.3  seqstack.c文件代码

  1. #include "seqstack.h"
  2. /* 1. 初始化 */
  3. int init(SeqStack *S, int MaxSize)
  4. {
  5. /*申请内存空间*/
  6. S->data = (DataType*)malloc(sizeof(DataType)*MaxSize);
  7. if(!S->data)
  8. {
  9. printf("内存申请错误,初始化失败![10001]\n");
  10. return 10001;
  11. }
  12. S->maxsize = MaxSize;
  13. S->top = -1;
  14. return 0;
  15. }
  16. /* 2. 进(入)栈 */
  17. int push(SeqStack *S, DataType x)
  18. {
  19. /*是否满?*/
  20. if(full(S))
  21. {
  22. printf("栈已满!10002\n");
  23. return 10002;
  24. }
  25. S->top++; /*移动指针*/
  26. S->data[S->top] = x;/*放入数据*/
  27. return 0; /*OK*/
  28. }
  29. /* 3. 出栈 */
  30. int pop(SeqStack *S, DataType *x)
  31. {
  32. /*是否空?*/
  33. if(empty(S))
  34. {
  35. printf("栈为空!10003\n");
  36. return 10003;
  37. }
  38. *x = S->data[S->top]; /*栈顶元素赋值给x*/
  39. S->top--; /*移动栈顶指针*/
  40. return 0;
  41. }
  42. /* 4. 取栈顶元素 */
  43. int get_top(SeqStack *S, DataType *x)
  44. {
  45. /*是否空?*/
  46. if(empty(S))
  47. {
  48. printf("栈为空!10003\n");
  49. return 10003;
  50. }
  51. *x = S->data[S->top]; /*栈顶元素赋值给x*/
  52. return 0;
  53. }
  54. /* 5. 栈为空?*/
  55. int empty(SeqStack *S)
  56. {
  57. return (S->top == -1)?1:0;
  58. }
  59. /* 6. 栈满?*/
  60. int full(SeqStack *S)
  61. {
  62. return (S->top == S->maxsize - 1)?1:0;
  63. }
  64. /* 7. 销毁*/
  65. int destroy(SeqStack *S)
  66. {
  67. free(S->data);
  68. return 0;
  69. }

3.4  welcome.h文件代码

  1. char welcome[] = "\n\
  2. | .-.\n\
  3. | / 、 .-.\n\
  4. | / 、 / 、 .-. .-.\n\
  5. +--/-------、-----/-----、-----/---、---/---、---/-、-/-、/、/---\n\
  6. | / 、 / 、 / '-' '-' \n\
  7. |/ '-' '-' \n\
  8. ";

四、代码运行结果

  1. |     .-.
  2. |    /   、         .-.
  3. |   /     、       /   、       .-.     .-.
  4. +--/-------、-----/-----、-----/---、---/---、---/-、-/-、/、/---
  5. | /         、   /       、   /     '-'     '-'
  6. |/           '-'         '-'
  7. ---------顺序栈演示程序-----------
  8.  1. 初始化
  9.  2. 入栈
  10.  3. 出栈
  11.  4. 查找栈顶元素
  12.  5. 判断栈为是否空
  13.  6. 判断栈为是否满
  14.  7. 销毁栈
  15.  8. 栈的应用
  16.  9. 帮助
  17. 请选择(0~9,0退出):1
  18. 请输入栈的最大存储空间(MaxSize):10
  19. 栈已初始化!
  20.  1. 初始化
  21.  2. 入栈
  22.  3. 出栈
  23.  4. 查找栈顶元素
  24.  5. 判断栈为是否空
  25.  6. 判断栈为是否满
  26.  7. 销毁栈
  27.  8. 栈的应用
  28.  9. 帮助
  29. 请选择(0~9,0退出):2
  30. 请输入入栈元素:x=10
  31. 元素【10】已入栈!
  32.  1. 初始化
  33.  2. 入栈
  34.  3. 出栈
  35.  4. 查找栈顶元素
  36.  5. 判断栈为是否空
  37.  6. 判断栈为是否满
  38.  7. 销毁栈
  39.  8. 栈的应用
  40.  9. 帮助
  41. 请选择(0~9,0退出):2
  42. 请输入入栈元素:x=30
  43. 元素【30】已入栈!
  44.  1. 初始化
  45.  2. 入栈
  46.  3. 出栈
  47.  4. 查找栈顶元素
  48.  5. 判断栈为是否空
  49.  6. 判断栈为是否满
  50.  7. 销毁栈
  51.  8. 栈的应用
  52.  9. 帮助
  53. 请选择(0~9,0退出):4
  54. 查找到栈顶元素[30]
  55.  1. 初始化
  56.  2. 入栈
  57.  3. 出栈
  58.  4. 查找栈顶元素
  59.  5. 判断栈为是否空
  60.  6. 判断栈为是否满
  61.  7. 销毁栈
  62.  8. 栈的应用
  63.  9. 帮助
  64. 请选择(0~9,0退出):5
  65. 栈内存在元素
  66.  1. 初始化
  67.  2. 入栈
  68.  3. 出栈
  69.  4. 查找栈顶元素
  70.  5. 判断栈为是否空
  71.  6. 判断栈为是否满
  72.  7. 销毁栈
  73.  8. 栈的应用
  74.  9. 帮助
  75. 请选择(0~9,0退出):6
  76. 栈未满
  77.  1. 初始化
  78.  2. 入栈
  79.  3. 出栈
  80.  4. 查找栈顶元素
  81.  5. 判断栈为是否空
  82.  6. 判断栈为是否满
  83.  7. 销毁栈
  84.  8. 栈的应用
  85.  9. 帮助
  86. 请选择(0~9,0退出):3
  87. 确定要出栈(出栈后数据不可恢复,y|n,n)?y
  88. 栈顶元素【30】已出栈!
  89.  1. 初始化
  90.  2. 入栈
  91.  3. 出栈
  92.  4. 查找栈顶元素
  93.  5. 判断栈为是否空
  94.  6. 判断栈为是否满
  95.  7. 销毁栈
  96.  8. 栈的应用
  97.  9. 帮助
  98. 请选择(0~9,0退出):7
  99. 栈已销毁
  100.  1. 初始化
  101.  2. 入栈
  102.  3. 出栈
  103.  4. 查找栈顶元素
  104.  5. 判断栈为是否空
  105.  6. 判断栈为是否满
  106.  7. 销毁栈
  107.  8. 栈的应用
  108.  9. 帮助
  109. 请选择(0~9,0退出):8
  110. ----------8.栈的应用------------
  111.  1. 十进制转换为二进制
  112.  2. 后缀表达式计算
  113.  0. 返回
  114. 请选择:1
  115. 请输入一个十进制数:102
  116. 二进制为:1100110
  117. ----------8.栈的应用------------
  118.  1. 十进制转换为二进制
  119.  2. 后缀表达式计算
  120.  0. 返回
  121. 请选择:2
  122. 请输入一个后缀表达式(eg. 56+):34+4-2*2/
  123. 3
  124. 4
  125. 4
  126. 2
  127. 2
  128. 计算结果为:34+4-2*2/ = 3
  129. ----------8.栈的应用------------
  130.  1. 十进制转换为二进制
  131.  2. 后缀表达式计算
  132.  0. 返回
  133. 请选择:0
  134.  1. 初始化
  135.  2. 入栈
  136.  3. 出栈
  137.  4. 查找栈顶元素
  138.  5. 判断栈为是否空
  139.  6. 判断栈为是否满
  140.  7. 销毁栈
  141.  8. 栈的应用
  142.  9. 帮助
  143. 请选择(0~9,0退出):9
  144.  本程序为栈的演示程序,由黄彬森设计开发,程序完成了栈的基本功能!
  145. 输入选项不存在
  146.  1. 初始化
  147.  2. 入栈
  148.  3. 出栈
  149.  4. 查找栈顶元素
  150.  5. 判断栈为是否空
  151.  6. 判断栈为是否满
  152.  7. 销毁栈
  153.  8. 栈的应用
  154.  9. 帮助
  155. 请选择(0~9,0退出):0
  156. --------------------------------
  157. Process exited after 128.2 seconds with return value 0
  158. 请按任意键继续. . .

五、小结

栈是一种特殊的顺序结构,栈存储方式以先入后出,后入先出的原则存储数据。入栈时添加元素会置于栈的栈顶,出栈时也需元素从栈顶处出栈,栈可以通过数组和链表实现,链表实现相对简单些,并且链表可以动态扩展,。

六、参考文献

【1】CSDN

【2】数据结构(C语言)

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

闽ICP备14008679号