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