fork download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. #define QUEUE_SIZE 10
  5.  
  6. typedef struct {
  7. int data[QUEUE_SIZE];
  8. int number;
  9. int head;
  10. } QUEUE;
  11.  
  12. QUEUE* create_queue() {
  13. QUEUE* queue = (QUEUE*)malloc(sizeof(QUEUE));
  14.  
  15. queue->head = 0;
  16. queue->number = 0;
  17. return queue;
  18. }
  19.  
  20. int enqueue(QUEUE* queue, int value) {
  21. if (queue->number < QUEUE_SIZE){
  22. queue->data[(queue->head + queue->number) % QUEUE_SIZE] = value;
  23. queue->number++;
  24. return 0;
  25. } else {
  26. return -1;
  27. }
  28. }
  29.  
  30. int dequeue(QUEUE* queue) {
  31. int r;
  32. if (queue->number > 0) {
  33. r = queue->data[queue->head % QUEUE_SIZE];
  34. queue->head++;
  35. queue->number--;
  36. } else {
  37. r = -1;
  38. }
  39. return r;
  40. }
  41.  
  42. int main() {
  43. QUEUE *q = create_queue();
  44. printf("<%d\n", enqueue(q, 3));
  45. printf("<%d\n", enqueue(q, 2));
  46. printf("<%d\n", enqueue(q, 1));
  47. printf(":%d\n", dequeue(q));
  48. printf(":%d\n", dequeue(q));
  49.  
  50. printf("<%d\n", enqueue(q, 9));
  51. printf("<%d\n", enqueue(q, 8));
  52. printf("<%d\n", enqueue(q, 7));
  53. printf("<%d\n", enqueue(q, 6));
  54. printf("<%d\n", enqueue(q, 5));
  55. printf("<%d\n", enqueue(q, 4));
  56. printf("<%d\n", enqueue(q, 3));
  57. printf("<%d\n", enqueue(q, 2));
  58. printf("<%d\n", enqueue(q, 1));
  59. printf("<%d\n", enqueue(q, 10));
  60.  
  61. printf(":%d\n", dequeue(q));
  62. printf(":%d\n", dequeue(q));
  63. printf(":%d\n", dequeue(q));
  64. printf(":%d\n", dequeue(q));
  65. printf(":%d\n", dequeue(q));
  66. printf(":%d\n", dequeue(q));
  67. printf(":%d\n", dequeue(q));
  68. printf(":%d\n", dequeue(q));
  69. printf(":%d\n", dequeue(q));
  70. printf(":%d\n", dequeue(q));
  71. printf(":%d\n", dequeue(q));
  72. printf(":%d\n", dequeue(q));
  73.  
  74. free(q);
  75. return 0;
  76. }
  77. /* end */
  78.  
  79.  
Success #stdin #stdout 0s 4536KB
stdin
Standard input is empty
stdout
<0
<0
<0
:3
:2
<0
<0
<0
<0
<0
<0
<0
<0
<0
<-1
:1
:9
:8
:7
:6
:5
:4
:3
:2
:1
:-1
:-1