#include <stdio.h>
#define SIZE 5
int queue[SIZE];
int head, tail;
void enqueue(int value);
int dequeue(void);
int isFull(void);
int isEmpty(void);
void display(void);
void initialize(void);
int main(void){
head = tail = 0;
int resp, data;
while(1){
printf("\n1: enqueue 2: dequeue 3: initialize 0: end → ");
if(resp == 0) break;
switch(resp){
case 1:
enqueue(data);
break;
case 2:
dequeue();
break;
case 3:
initialize();
break;
default:
break;
}
printf("head=%d, tail=%d\n", head
, tail
); display();
}
return 0;
}
int isFull(void){
return ((tail + 1) % SIZE == head);
}
int isEmpty(void){
return (head == tail);
}
void enqueue(int value){
if(isFull()){
return;
}
queue[tail] = value;
tail = (tail + 1) % SIZE;
printf("%d を追加しました。\n", value
); }
int dequeue(void){
if(isEmpty()){
return -1;
}
int value = queue[head];
queue[head] = 0;
head = (head + 1) % SIZE;
printf("%d を取り出しました。\n", value
); return value;
}
void display(void){
if(isEmpty()){
return;
}
int i = head;
while(i != tail){
printf(" queue[%d] = %d\n", i
, queue
[i
]); i = (i + 1) % SIZE;
}
}
void initialize(void){
head = tail = 0;
for(int i = 0; i < SIZE; i++){
queue[i] = 0;
}
}
I2luY2x1ZGUgPHN0ZGlvLmg+CgojZGVmaW5lIFNJWkUgNQppbnQgcXVldWVbU0laRV07CmludCBoZWFkLCB0YWlsOwoKCnZvaWQgZW5xdWV1ZShpbnQgdmFsdWUpOwppbnQgZGVxdWV1ZSh2b2lkKTsKaW50IGlzRnVsbCh2b2lkKTsKaW50IGlzRW1wdHkodm9pZCk7CnZvaWQgZGlzcGxheSh2b2lkKTsKdm9pZCBpbml0aWFsaXplKHZvaWQpOwoKaW50IG1haW4odm9pZCl7CiAgICBoZWFkID0gdGFpbCA9IDA7CiAgICBpbnQgcmVzcCwgZGF0YTsKCiAgICB3aGlsZSgxKXsKICAgICAgICBwcmludGYoIlxuMTogZW5xdWV1ZSAgMjogZGVxdWV1ZSAgMzogaW5pdGlhbGl6ZSAgMDogZW5kIOKGkiAiKTsKICAgICAgICBzY2FuZigiJWQiLCAmcmVzcCk7CgogICAgICAgIGlmKHJlc3AgPT0gMCkgYnJlYWs7CgogICAgICAgIHN3aXRjaChyZXNwKXsKICAgICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAgICAgcHJpbnRmKCJlbnF1ZXVlIOKGkiAiKTsKICAgICAgICAgICAgICAgIHNjYW5mKCIlZCIsICZkYXRhKTsKICAgICAgICAgICAgICAgIGVucXVldWUoZGF0YSk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAyOgogICAgICAgICAgICAgICAgZGVxdWV1ZSgpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgMzoKICAgICAgICAgICAgICAgIGluaXRpYWxpemUoKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgcHJpbnRmKCLnhKHlirnjgarlhaXlipvjgafjgZnjgIJcbiIpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQoKICAgICAgICBwcmludGYoImhlYWQ9JWQsIHRhaWw9JWRcbiIsIGhlYWQsIHRhaWwpOwogICAgICAgIGRpc3BsYXkoKTsgIAogICAgfQoKICAgIHJldHVybiAwOwp9CgppbnQgaXNGdWxsKHZvaWQpewogICAgcmV0dXJuICgodGFpbCArIDEpICUgU0laRSA9PSBoZWFkKTsKfQoKCmludCBpc0VtcHR5KHZvaWQpewogICAgcmV0dXJuIChoZWFkID09IHRhaWwpOwp9CgoKdm9pZCBlbnF1ZXVlKGludCB2YWx1ZSl7CiAgICBpZihpc0Z1bGwoKSl7CiAgICAgICAgcHJpbnRmKCIg44Kt44Ol44O844GM5rqA5p2v44Gn44GZ77yBXG4iKTsKICAgICAgICByZXR1cm47CiAgICB9CiAgICBxdWV1ZVt0YWlsXSA9IHZhbHVlOwogICAgdGFpbCA9ICh0YWlsICsgMSkgJSBTSVpFOwogICAgcHJpbnRmKCIlZCDjgpLov73liqDjgZfjgb7jgZfjgZ/jgIJcbiIsIHZhbHVlKTsKfQoKCmludCBkZXF1ZXVlKHZvaWQpewogICAgaWYoaXNFbXB0eSgpKXsKICAgICAgICBwcmludGYoIuOCreODpeODvOOBjOepuuOBp+OBme+8gVxuIik7CiAgICAgICAgcmV0dXJuIC0xOwogICAgfQoKICAgIGludCB2YWx1ZSA9IHF1ZXVlW2hlYWRdOwogICAgcXVldWVbaGVhZF0gPSAwOyAgCiAgICBoZWFkID0gKGhlYWQgKyAxKSAlIFNJWkU7CiAgICBwcmludGYoIiVkIOOCkuWPluOCiuWHuuOBl+OBvuOBl+OBn+OAglxuIiwgdmFsdWUpOwogICAgcmV0dXJuIHZhbHVlOwp9CgoKdm9pZCBkaXNwbGF5KHZvaWQpewogICAgaWYoaXNFbXB0eSgpKXsKICAgICAgICBwcmludGYoIu+8iOePvuWcqOOCreODpeODvOOBr+epuuOBp+OBme+8iVxuIik7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIHByaW50Zigi44Kt44Ol44O844Gu5Lit6Lqr77yaXG4iKTsKICAgIGludCBpID0gaGVhZDsKICAgIHdoaWxlKGkgIT0gdGFpbCl7CiAgICAgICAgcHJpbnRmKCIgcXVldWVbJWRdID0gJWRcbiIsIGksIHF1ZXVlW2ldKTsKICAgICAgICBpID0gKGkgKyAxKSAlIFNJWkU7CiAgICB9Cn0KCgp2b2lkIGluaXRpYWxpemUodm9pZCl7CiAgICBoZWFkID0gdGFpbCA9IDA7CiAgICBmb3IoaW50IGkgPSAwOyBpIDwgU0laRTsgaSsrKXsKICAgICAgICBxdWV1ZVtpXSA9IDA7CiAgICB9CiAgICBwcmludGYoIuOCreODpeODvOOCkuWIneacn+WMluOBl+OBvuOBl+OBn+OAglxuIik7Cn0K