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

1: enqueue  2: dequeue  3: initialize  0: end → enqueue → 20 を追加しました。
head=0, tail=2, count=2
キューの中身:
 queue[0] = 10
 queue[1] = 20

1: enqueue  2: dequeue  3: initialize  0: end → enqueue → 30 を追加しました。
head=0, tail=3, count=3
キューの中身:
 queue[0] = 10
 queue[1] = 20
 queue[2] = 30

1: enqueue  2: dequeue  3: initialize  0: end → 無効な入力です。
head=0, tail=3, count=3
キューの中身:
 queue[0] = 10
 queue[1] = 20
 queue[2] = 30

1: enqueue  2: dequeue  3: initialize  0: end → 10 を取り出しました。
head=1, tail=3, count=2
キューの中身:
 queue[1] = 20
 queue[2] = 30

1: enqueue  2: dequeue  3: initialize  0: end → 無効な入力です。
head=1, tail=3, count=2
キューの中身:
 queue[1] = 20
 queue[2] = 30

1: enqueue  2: dequeue  3: initialize  0: end → キューを初期化しました。
head=0, tail=0, count=0
(現在キューは空です)

1: enqueue  2: dequeue  3: initialize  0: end → 無効な入力です。
head=0, tail=0, count=0
(現在キューは空です)

1: enqueue  2: dequeue  3: initialize  0: end →