fork download
  1. #include <stdio.h>
  2.  
  3. #define SIZE 5
  4. int queue[SIZE];
  5. int head,tail;
  6.  
  7. void enqueue(int value);
  8. int dequeue(void);
  9.  
  10. int main(void)
  11. {
  12. head = tail = 0;
  13. int resp, data, i;
  14.  
  15. while(1){
  16. printf("1:enqueue 2:dequeue 0:end : "); scanf("%d", &resp);
  17. if(!resp) break;
  18.  
  19. switch(resp){
  20. case 1: printf("enqueue : "); scanf("%d", &data);
  21. enqueue( data );
  22. break;
  23.  
  24. case 2: dequeue();
  25. break;
  26. }
  27. printf("head=%d, tail=%d\n", head, tail);
  28. }
  29.  
  30. printf("\n");
  31. i = head;
  32. while( i != tail ){
  33. printf("queue[%d]=%d\n", i, queue[i] );
  34. i++;
  35. i = i % SIZE;
  36. }
  37.  
  38. return 0;
  39. }
  40.  
  41. void enqueue(int value)
  42. {
  43. if( head == (tail+1)%SIZE ){
  44. printf("キューは満杯で入りませんでした\n");
  45. }else{
  46. queue[tail++] = value;
  47. }
  48. tail = tail % SIZE;
  49. }
  50.  
  51. int dequeue(void)
  52. {
  53. int value;
  54. if( head == tail ){
  55. printf("キューは空で取り出せませんでした\n");
  56. return 0;
  57. }else{
  58. value = queue[head++];
  59. }
  60. head = head % SIZE;
  61. return value;
  62. }
  63.  
Success #stdin #stdout 0.01s 5284KB
stdin
1
10
1
20
1
30
1
40
1
50
2
2
1
60
1
70
2
0
stdout
1:enqueue 2:dequeue 0:end : enqueue : head=0, tail=1
1:enqueue 2:dequeue 0:end : enqueue : head=0, tail=2
1:enqueue 2:dequeue 0:end : enqueue : head=0, tail=3
1:enqueue 2:dequeue 0:end : enqueue : head=0, tail=4
1:enqueue 2:dequeue 0:end : enqueue : キューは満杯で入りませんでした
head=0, tail=4
1:enqueue 2:dequeue 0:end : head=1, tail=4
1:enqueue 2:dequeue 0:end : head=2, tail=4
1:enqueue 2:dequeue 0:end : enqueue : head=2, tail=0
1:enqueue 2:dequeue 0:end : enqueue : head=2, tail=1
1:enqueue 2:dequeue 0:end : head=3, tail=1
1:enqueue 2:dequeue 0:end : 
queue[3]=40
queue[4]=60
queue[0]=70