fork download
  1. #include <stdio.h>
  2.  
  3. #define SIZE 5
  4.  
  5. int stack[SIZE];
  6. int sp;
  7.  
  8. void push(int value);
  9. int pop(void);
  10. int isFull(void);
  11. int isEmpty(void);
  12. void display(void);
  13. void initialize(void);
  14.  
  15. int main(void) {
  16. sp = 0;
  17. int resp, data;
  18.  
  19. while (1) {
  20. printf("1:push 2:pop 3:initialize 0:end:");
  21.  
  22. if (scanf("%d", &resp) != 1) {
  23. break;
  24. }
  25.  
  26. if (!resp) break;
  27.  
  28. switch (resp) {
  29. case 1:
  30. printf("push:");
  31. scanf("%d", &data);
  32. push(data);
  33. break;
  34.  
  35. case 2:
  36. printf("pop: %d\n", pop());
  37. break;
  38.  
  39. case 3:
  40. initialize();
  41. printf("スタックを初期化しました\n");
  42. break;
  43. }
  44.  
  45. printf("sp=%d\n", sp);
  46. }
  47.  
  48. display();
  49.  
  50. return 0;
  51. }
  52.  
  53. int isFull(void)
  54. {
  55. if (sp >= SIZE) {
  56. return 1;
  57. } else {
  58. return 0;
  59. }
  60. }
  61.  
  62. int isEmpty(void)
  63. {
  64. if (sp <= 0) {
  65. return 1;
  66. } else {
  67. return 0;
  68. }
  69. }
  70.  
  71. void push(int value)
  72. {
  73. if (isFull()) {
  74. printf("スタックが満杯で入りませんでした\n");
  75. } else {
  76. stack[sp++] = value;
  77. }
  78. }
  79.  
  80. int pop(void)
  81. {
  82. if (isEmpty()) {
  83. printf("スタックが空で取り出せませんでした\n");
  84. return 0;
  85. } else {
  86. return stack[--sp];
  87. }
  88. }
  89.  
  90. void display(void)
  91. {
  92. printf("\n");
  93.  
  94. for (int i = 0; i < sp; i++) {
  95. printf("stack[%d]=%d\n", i, stack[i]);
  96. }
  97. }
  98.  
  99. void initialize(void)
  100. {
  101. sp = 0;
  102. }
Success #stdin #stdout 0s 5316KB
stdin
1
10
1
20
2
0
stdout
1:push 2:pop 3:initialize 0:end:push:sp=1
1:push 2:pop 3:initialize 0:end:push:sp=2
1:push 2:pop 3:initialize 0:end:pop: 20
sp=1
1:push 2:pop 3:initialize 0:end:
stack[0]=10