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