#include <stdio.h>
#define SIZE 5
int queue[SIZE];
int head, tail;
void enqueue(int value);
int dequeue(void);
int main(void)
{
head = tail = 0;
int resp, data, i;
while (1) {
printf("1: enqueue 2: dequeue 0: end : ");
if (!resp)
break;
switch (resp) {
case 1:
enqueue(data);
break;
case 2:
dequeue();
break;
default:
break;
}
printf("head=%d, tail=%d\n", head
, tail
); }
i = head;
while (i != tail) {
printf("queue[%d]=%d\n", i
, queue
[i
]); i = (i + 1) % SIZE;
}
return 0;
}
void enqueue(int value)
{
if ((tail + 1) % SIZE == head) {
} else {
queue[tail] = value;
tail = (tail + 1) % SIZE; // ← これが安全!
}
}
int dequeue(void)
{
int value;
if (head == tail) {
return 0;
} else {
value = queue[head];
queue[head] = 0; // ← 初期化もしておくと安心
head = (head + 1) % SIZE; // ← これも安全!
return value;
}
}
I2luY2x1ZGUgPHN0ZGlvLmg+CgojZGVmaW5lIFNJWkUgNQppbnQgcXVldWVbU0laRV07CmludCBoZWFkLCB0YWlsOwoKdm9pZCBlbnF1ZXVlKGludCB2YWx1ZSk7CmludCBkZXF1ZXVlKHZvaWQpOwoKaW50IG1haW4odm9pZCkKewogICAgaGVhZCA9IHRhaWwgPSAwOwogICAgaW50IHJlc3AsIGRhdGEsIGk7CgogICAgd2hpbGUgKDEpIHsKICAgICAgICBwcmludGYoIjE6IGVucXVldWUgIDI6IGRlcXVldWUgIDA6IGVuZCA6ICIpOwogICAgICAgIHNjYW5mKCIlZCIsICZyZXNwKTsKCiAgICAgICAgaWYgKCFyZXNwKQogICAgICAgICAgICBicmVhazsKCiAgICAgICAgc3dpdGNoIChyZXNwKSB7CiAgICAgICAgY2FzZSAxOgogICAgICAgICAgICBwcmludGYoImVucXVldWUgOiAiKTsKICAgICAgICAgICAgc2NhbmYoIiVkIiwgJmRhdGEpOwogICAgICAgICAgICBlbnF1ZXVlKGRhdGEpOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDI6CiAgICAgICAgICAgIGRlcXVldWUoKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgcHJpbnRmKCLkuI3mraPjgarlhaXlipvjgafjgZnjgIJcbiIpOwogICAgICAgICAgICBicmVhazsKICAgICAgICB9CgogICAgICAgIHByaW50ZigiaGVhZD0lZCwgdGFpbD0lZFxuIiwgaGVhZCwgdGFpbCk7CiAgICB9CgogICAgcHJpbnRmKCJcbiIpOwogICAgaSA9IGhlYWQ7CiAgICB3aGlsZSAoaSAhPSB0YWlsKSB7CiAgICAgICAgcHJpbnRmKCJxdWV1ZVslZF09JWRcbiIsIGksIHF1ZXVlW2ldKTsKICAgICAgICBpID0gKGkgKyAxKSAlIFNJWkU7CiAgICB9CgogICAgcmV0dXJuIDA7Cn0KCnZvaWQgZW5xdWV1ZShpbnQgdmFsdWUpCnsKICAgIGlmICgodGFpbCArIDEpICUgU0laRSA9PSBoZWFkKSB7CiAgICAgICAgcHJpbnRmKCLjgq3jg6Xjg7zjgYzmuoDmna/jgaflhaXjgorjgb7jgZvjgpPjgafjgZfjgZ9cbiIpOwogICAgfSBlbHNlIHsKICAgICAgICBxdWV1ZVt0YWlsXSA9IHZhbHVlOwogICAgICAgIHRhaWwgPSAodGFpbCArIDEpICUgU0laRTsgICAvLyDihpAg44GT44KM44GM5a6J5YWo77yBCiAgICB9Cn0KCmludCBkZXF1ZXVlKHZvaWQpCnsKICAgIGludCB2YWx1ZTsKICAgIGlmIChoZWFkID09IHRhaWwpIHsKICAgICAgICBwcmludGYoIuOCreODpeODvOOBr+epuuOBp+WPluOCiuWHuuOBm+OBvuOBm+OCk+OBp+OBl+OBn1xuIik7CiAgICAgICAgcmV0dXJuIDA7CiAgICB9IGVsc2UgewogICAgICAgIHZhbHVlID0gcXVldWVbaGVhZF07CiAgICAgICAgcXVldWVbaGVhZF0gPSAwOyAgICAgICAgICAgLy8g4oaQIOWIneacn+WMluOCguOBl+OBpuOBiuOBj+OBqOWuieW/gwogICAgICAgIGhlYWQgPSAoaGVhZCArIDEpICUgU0laRTsgIC8vIOKGkCDjgZPjgozjgoLlronlhajvvIEKICAgICAgICByZXR1cm4gdmFsdWU7CiAgICB9Cn0K