当前位置:   article > 正文

数据结构实验之栈与队列八:栈的基本操作_数据结构中栈和 队列

数据结构中栈和 队列

数据结构实验之栈与队列八:栈的基本操作

Time Limit: 1000MS  Memory Limit: 65536KB
Problem Description

堆栈是一种基本的数据结构。堆栈具有两种基本操作方式,push 和 pop。push一个值会将其压入栈顶,而 pop 则会将栈顶的值弹出。现在我们就来验证一下堆栈的使用。

Input

首先输入整数t(1 <= t <= 10),代表测试的组数,以后是 t 组输入。
 对于每组测试数据,第一行输入两个正整数 m(1 <= m <= 100)、n(1 <= n <= 1000),其中m代表当前栈的最大长度,n代表本组测试下面要输入的操作数。 而后的 n 行,每行的第一个字符可能是'P’或者'O’或者'A’;如果是'P’,后面还会跟着一个整数,表示把这个数据压入堆栈;如果是'O’,表示栈顶元素出栈;如果是'A',表示询问当前栈顶的值'。

Output

 对于每组测试数据,根据其中的命令字符来处理堆栈;
(1)对所有的'P'操作,如果栈满输出'F',否则完成压栈操作;
(2)对所有的'A'操作,如果栈空,则输出'E',否则输出当时栈顶的值;
(3)对所有的'O'操作,如果栈空,则输出'E',否则输出栈顶元素的值,并让其出栈;
每个输出占据一行,每组测试数据(最后一组除外)完成后,输出一个空行。

Example Input
2
5 10
A
P 9
A
P 6
P 3
P 10
P 8
A
P 2
O
2 5
P 1
P 3
O
P 5
A
Example Output
E
9
8
F
8

3
5
此题是一个比较简单的栈的基本操作的题,只不过加入了栈的判满,一开始有bug因为忘了读入换行。
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. typedef int elemtype;
  4. typedef int status;
  5. //#define MAXSIZE 100
  6. int MAXSIZE;
  7. #define OVERFLOW -2
  8. #define another 50
  9. #define true 1
  10. #define false 0
  11. typedef struct {
  12. elemtype *base;
  13. elemtype *top;
  14. int stacksize;
  15. }Sqstack;
  16. void initStack(Sqstack &S){
  17. S.base = new elemtype[MAXSIZE];
  18. S.top = S.base;
  19. S.stacksize = MAXSIZE;
  20. }
  21. status isEmpty(Sqstack &S){
  22. if(S.top == S.base)
  23. return true;
  24. else
  25. return false;
  26. }
  27. elemtype getTop(Sqstack &S){
  28. if(S.base == S.top)
  29. return false;
  30. else
  31. return *(S.top-1);
  32. }
  33. status fullStack(Sqstack &S){
  34. if(S.top-S.base >= S.stacksize)
  35. return true;
  36. else
  37. return false;
  38. }
  39. void Push(Sqstack &S, elemtype e){ //压栈
  40. /*if(S.top-S.base >= S.stacksize){
  41. S.base = (elemtype *)realloc(S.base,(another+S.stacksize)*sizeof(elemtype));
  42. S.top = S.base + S.stacksize;
  43. S.stacksize += another
  44. ;
  45. }*/
  46. *S.top++ = e;
  47. }
  48. int Pop(Sqstack &S, elemtype &e){
  49. if(S.top == S.base) return false;
  50. return e = * --S.top;
  51. }
  52. int main(){
  53. int n, t, num;
  54. char order;
  55. //Sqstack S;
  56. //initStack(S);
  57. scanf("%d", &t);
  58. while(t--){
  59. scanf("%d %d", &MAXSIZE, &n);
  60. Sqstack S;
  61. initStack(S);
  62. while(n--){
  63. getchar(); //此处一开始忘了将换行读入
  64. scanf("%c", &order);
  65. if(order == 'P'){
  66. scanf("%d", &num);
  67. if(fullStack(S))
  68. printf("F\n");
  69. else
  70. Push(S, num);
  71. }
  72. else if(order == 'A'){
  73. if(isEmpty(S))
  74. printf("E\n");
  75. else
  76. printf("%d\n", getTop(S));
  77. }
  78. else if(order == 'O'){
  79. if(isEmpty(S))
  80. printf("E\n");
  81. else{
  82. int cnt;
  83. Pop(S, cnt);
  84. printf("%d\n", cnt);
  85. }
  86. }
  87. }
  88. if(t >= 1)
  89. printf("\n");
  90. }
  91. return 0;
  92. }


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

闽ICP备14008679号