#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("\n1: 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){
int next = (tail + 1) % SIZE;
if(next == head){
return;
}
queue[tail] = value;
tail = next;
printf("%d を追加しました。\n", value
); }
int dequeue(void){
if(head == tail){
return -1;
}
int value = queue[head];
head = (head + 1) % SIZE;
printf("%d を取り出しました。\n", value
); return value;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CgojZGVmaW5lIFNJWkUgNQppbnQgcXVldWVbU0laRV07CmludCBoZWFkLCB0YWlsOwoKdm9pZCBlbnF1ZXVlKGludCB2YWx1ZSk7CmludCBkZXF1ZXVlKHZvaWQpOwoKaW50IG1haW4odm9pZCl7CiAgICBoZWFkID0gdGFpbCA9IDA7CiAgICBpbnQgcmVzcCwgZGF0YSwgaTsKCiAgICB3aGlsZSgxKXsKICAgICAgICBwcmludGYoIlxuMTogZW5xdWV1ZSAgMjogZGVxdWV1ZSAgMDogZW5kIOKGkiAiKTsKICAgICAgICBzY2FuZigiJWQiLCAmcmVzcCk7CgogICAgICAgIGlmKCFyZXNwKSBicmVhazsKCiAgICAgICAgc3dpdGNoKHJlc3ApewogICAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAgICBwcmludGYoImVucXVldWUg4oaSICIpOwogICAgICAgICAgICAgICAgc2NhbmYoIiVkIiwgJmRhdGEpOwogICAgICAgICAgICAgICAgZW5xdWV1ZShkYXRhKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIDI6CiAgICAgICAgICAgICAgICBkZXF1ZXVlKCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgIHByaW50Zigi5YWl5Yqb44Ko44Op44O844Gn44GZ44CCXG4iKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KCiAgICAgICAgcHJpbnRmKCJoZWFkPSVkLCB0YWlsPSVkXG4iLCBoZWFkLCB0YWlsKTsKCiAgICAgICAgaSA9IGhlYWQ7CiAgICAgICAgd2hpbGUoaSAhPSB0YWlsKXsKICAgICAgICAgICAgcHJpbnRmKCJxdWV1ZVslZF0gPSAlZFxuIiwgaSwgcXVldWVbaV0pOwogICAgICAgICAgICBpID0gKGkgKyAxKSAlIFNJWkU7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAwOwp9Cgp2b2lkIGVucXVldWUoaW50IHZhbHVlKXsKICAgIGludCBuZXh0ID0gKHRhaWwgKyAxKSAlIFNJWkU7CgogICAgaWYobmV4dCA9PSBoZWFkKXsKICAgICAgICBwcmludGYoIuOCreODpeODvOOBjOa6gOadr+OBp+OBme+8gVxuIik7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIHF1ZXVlW3RhaWxdID0gdmFsdWU7CiAgICB0YWlsID0gbmV4dDsKICAgIHByaW50ZigiJWQg44KS6L+95Yqg44GX44G+44GX44Gf44CCXG4iLCB2YWx1ZSk7Cn0KCmludCBkZXF1ZXVlKHZvaWQpewogICAgaWYoaGVhZCA9PSB0YWlsKXsKICAgICAgICBwcmludGYoIuOCreODpeODvOOBjOepuuOBp+OBme+8gVxuIik7CiAgICAgICAgcmV0dXJuIC0xOwogICAgfQoKICAgIGludCB2YWx1ZSA9IHF1ZXVlW2hlYWRdOwogICAgaGVhZCA9IChoZWFkICsgMSkgJSBTSVpFOwogICAgcHJpbnRmKCIlZCDjgpLlj5bjgorlh7rjgZfjgb7jgZfjgZ/jgIJcbiIsIHZhbHVlKTsKICAgIHJldHVybiB2YWx1ZTsKfQo=