#include <stdio.h>
#include <stdlib.h>
#define QUEUE_SIZE 10
typedef struct {
int data[QUEUE_SIZE];
int number;
int head;
} QUEUE;
QUEUE* create_queue() {
QUEUE
* queue
= (QUEUE
*)malloc(sizeof(QUEUE
));
queue->head = 0;
queue->number = 0;
return queue;
}
int enqueue(QUEUE* queue, int value) {
if (queue->number < QUEUE_SIZE){
queue->data[(queue->head + queue->number) % QUEUE_SIZE] = value;
queue->number++;
return 0;
} else {
return -1;
}
}
int dequeue(QUEUE* queue) {
int r;
if (queue->number > 0) {
r = queue->data[queue->head % QUEUE_SIZE];
queue->head++;
queue->number--;
} else {
r = -1;
}
return r;
}
int main() {
QUEUE *q = create_queue();
printf("<%d\n", enqueue
(q
, 3)); printf("<%d\n", enqueue
(q
, 2)); printf("<%d\n", enqueue
(q
, 1));
printf("<%d\n", enqueue
(q
, 9)); printf("<%d\n", enqueue
(q
, 8)); printf("<%d\n", enqueue
(q
, 7)); printf("<%d\n", enqueue
(q
, 6)); printf("<%d\n", enqueue
(q
, 5)); printf("<%d\n", enqueue
(q
, 4)); printf("<%d\n", enqueue
(q
, 3)); printf("<%d\n", enqueue
(q
, 2)); printf("<%d\n", enqueue
(q
, 1)); printf("<%d\n", enqueue
(q
, 10));
return 0;
}
/* end */
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KCiNkZWZpbmUgUVVFVUVfU0laRSAxMAoKdHlwZWRlZiBzdHJ1Y3QgewogIGludCBkYXRhW1FVRVVFX1NJWkVdOwogIGludCBudW1iZXI7CiAgaW50IGhlYWQ7Cn0gUVVFVUU7CgpRVUVVRSogY3JlYXRlX3F1ZXVlKCkgewogIFFVRVVFKiBxdWV1ZSA9IChRVUVVRSopbWFsbG9jKHNpemVvZihRVUVVRSkpOwogIAogIHF1ZXVlLT5oZWFkID0gMDsKICBxdWV1ZS0+bnVtYmVyID0gMDsKICByZXR1cm4gcXVldWU7Cn0KCmludCBlbnF1ZXVlKFFVRVVFKiBxdWV1ZSwgaW50IHZhbHVlKSB7CiAgaWYgKHF1ZXVlLT5udW1iZXIgPCBRVUVVRV9TSVpFKXsKICAgIHF1ZXVlLT5kYXRhWyhxdWV1ZS0+aGVhZCArIHF1ZXVlLT5udW1iZXIpICUgUVVFVUVfU0laRV0gPSB2YWx1ZTsKICAgIHF1ZXVlLT5udW1iZXIrKzsKICAgIHJldHVybiAwOwogIH0gZWxzZSB7IAogICAgcmV0dXJuIC0xOwogIH0KfQoKaW50IGRlcXVldWUoUVVFVUUqIHF1ZXVlKSB7CiAgaW50IHI7CiAgaWYgKHF1ZXVlLT5udW1iZXIgPiAwKSB7CiAgICByID0gcXVldWUtPmRhdGFbcXVldWUtPmhlYWQgJSBRVUVVRV9TSVpFXTsKICAgIHF1ZXVlLT5oZWFkKys7CiAgICBxdWV1ZS0+bnVtYmVyLS07CiAgfSBlbHNlIHsKICAgIHIgPSAtMTsKICB9CiAgcmV0dXJuIHI7Cn0KCmludCBtYWluKCkgewogIFFVRVVFICpxID0gY3JlYXRlX3F1ZXVlKCk7CiAgcHJpbnRmKCI8JWRcbiIsIGVucXVldWUocSwgMykpOwogIHByaW50ZigiPCVkXG4iLCBlbnF1ZXVlKHEsIDIpKTsKICBwcmludGYoIjwlZFxuIiwgZW5xdWV1ZShxLCAxKSk7CiAgcHJpbnRmKCI6JWRcbiIsIGRlcXVldWUocSkpOwogIHByaW50ZigiOiVkXG4iLCBkZXF1ZXVlKHEpKTsKCiAgcHJpbnRmKCI8JWRcbiIsIGVucXVldWUocSwgOSkpOwogIHByaW50ZigiPCVkXG4iLCBlbnF1ZXVlKHEsIDgpKTsKICBwcmludGYoIjwlZFxuIiwgZW5xdWV1ZShxLCA3KSk7CiAgcHJpbnRmKCI8JWRcbiIsIGVucXVldWUocSwgNikpOwogIHByaW50ZigiPCVkXG4iLCBlbnF1ZXVlKHEsIDUpKTsKICBwcmludGYoIjwlZFxuIiwgZW5xdWV1ZShxLCA0KSk7CiAgcHJpbnRmKCI8JWRcbiIsIGVucXVldWUocSwgMykpOwogIHByaW50ZigiPCVkXG4iLCBlbnF1ZXVlKHEsIDIpKTsKICBwcmludGYoIjwlZFxuIiwgZW5xdWV1ZShxLCAxKSk7CiAgcHJpbnRmKCI8JWRcbiIsIGVucXVldWUocSwgMTApKTsKCiAgcHJpbnRmKCI6JWRcbiIsIGRlcXVldWUocSkpOwogIHByaW50ZigiOiVkXG4iLCBkZXF1ZXVlKHEpKTsKICBwcmludGYoIjolZFxuIiwgZGVxdWV1ZShxKSk7CiAgcHJpbnRmKCI6JWRcbiIsIGRlcXVldWUocSkpOwogIHByaW50ZigiOiVkXG4iLCBkZXF1ZXVlKHEpKTsKICBwcmludGYoIjolZFxuIiwgZGVxdWV1ZShxKSk7CiAgcHJpbnRmKCI6JWRcbiIsIGRlcXVldWUocSkpOwogIHByaW50ZigiOiVkXG4iLCBkZXF1ZXVlKHEpKTsKICBwcmludGYoIjolZFxuIiwgZGVxdWV1ZShxKSk7CiAgcHJpbnRmKCI6JWRcbiIsIGRlcXVldWUocSkpOwogIHByaW50ZigiOiVkXG4iLCBkZXF1ZXVlKHEpKTsKICBwcmludGYoIjolZFxuIiwgZGVxdWV1ZShxKSk7CgogIGZyZWUocSk7CiAgcmV0dXJuIDA7Cn0KLyogZW5kICovCgo=