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