#include <stdio.h>
#define SIZE 5
int queue[SIZE];
int head, tail, count;
void enqueue(int value);
int dequeue(void);
int isFull(void);
int isEmpty(void);
void display(void);
void initialize(void);
int main(void){
head = tail = count = 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, count=%d\n", head
, tail
, count
); display();
}
return 0;
}
int isFull(void){
return (count == SIZE);
}
int isEmpty(void){
return (count == 0);
}
void enqueue(int value){
if(isFull()){
return;
}
queue[tail] = value;
tail = (tail + 1) % SIZE;
count++;
printf("%d を追加しました。\n", value
); }
int dequeue(void){
if(isEmpty()){
return -1;
}
int value = queue[head];
queue[head] = 0;
head = (head + 1) % SIZE;
count--;
printf("%d を取り出しました。\n", value
); return value;
}
void display(void){
if(isEmpty()){
return;
}
int i = head;
for(int j = 0; j < count; j++){
printf(" queue[%d] = %d\n", i
, queue
[i
]); i = (i + 1) % SIZE;
}
}
void initialize(void){
head = tail = count = 0;
for(int i = 0; i < SIZE; i++){
queue[i] = 0;
}
}
I2luY2x1ZGUgPHN0ZGlvLmg+CgojZGVmaW5lIFNJWkUgNQppbnQgcXVldWVbU0laRV07CmludCBoZWFkLCB0YWlsLCBjb3VudDsgIAp2b2lkIGVucXVldWUoaW50IHZhbHVlKTsKaW50IGRlcXVldWUodm9pZCk7CmludCBpc0Z1bGwodm9pZCk7CmludCBpc0VtcHR5KHZvaWQpOwp2b2lkIGRpc3BsYXkodm9pZCk7CnZvaWQgaW5pdGlhbGl6ZSh2b2lkKTsKCmludCBtYWluKHZvaWQpewogICAgaGVhZCA9IHRhaWwgPSBjb3VudCA9IDA7CiAgICBpbnQgcmVzcCwgZGF0YTsKCiAgICB3aGlsZSgxKXsKICAgICAgICBwcmludGYoIlxuMTogZW5xdWV1ZSAgMjogZGVxdWV1ZSAgMzogaW5pdGlhbGl6ZSAgMDogZW5kIOKGkiAiKTsKICAgICAgICBzY2FuZigiJWQiLCAmcmVzcCk7CgogICAgICAgIGlmKHJlc3AgPT0gMCkgYnJlYWs7CgogICAgICAgIHN3aXRjaChyZXNwKXsKICAgICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAgICAgcHJpbnRmKCJlbnF1ZXVlIOKGkiAiKTsKICAgICAgICAgICAgICAgIHNjYW5mKCIlZCIsICZkYXRhKTsKICAgICAgICAgICAgICAgIGVucXVldWUoZGF0YSk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAyOgogICAgICAgICAgICAgICAgZGVxdWV1ZSgpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgMzoKICAgICAgICAgICAgICAgIGluaXRpYWxpemUoKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgcHJpbnRmKCLnhKHlirnjgarlhaXlipvjgafjgZnjgIJcbiIpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQoKICAgICAgICBwcmludGYoImhlYWQ9JWQsIHRhaWw9JWQsIGNvdW50PSVkXG4iLCBoZWFkLCB0YWlsLCBjb3VudCk7CiAgICAgICAgZGlzcGxheSgpOwogICAgfQoKICAgIHJldHVybiAwOwp9CgppbnQgaXNGdWxsKHZvaWQpewogICAgcmV0dXJuIChjb3VudCA9PSBTSVpFKTsgICAKfQoKaW50IGlzRW1wdHkodm9pZCl7CiAgICByZXR1cm4gKGNvdW50ID09IDApOwp9Cgp2b2lkIGVucXVldWUoaW50IHZhbHVlKXsKICAgIGlmKGlzRnVsbCgpKXsKICAgICAgICBwcmludGYoIuOCreODpeODvOOBjOa6gOadr+OBp+OBme+8gVxuIik7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgcXVldWVbdGFpbF0gPSB2YWx1ZTsKICAgIHRhaWwgPSAodGFpbCArIDEpICUgU0laRTsKICAgIGNvdW50Kys7ICAKICAgIHByaW50ZigiJWQg44KS6L+95Yqg44GX44G+44GX44Gf44CCXG4iLCB2YWx1ZSk7Cn0KCmludCBkZXF1ZXVlKHZvaWQpewogICAgaWYoaXNFbXB0eSgpKXsKICAgICAgICBwcmludGYoIuOCreODpeODvOOBjOepuuOBp+OBme+8gVxuIik7CiAgICAgICAgcmV0dXJuIC0xOwogICAgfQoKICAgIGludCB2YWx1ZSA9IHF1ZXVlW2hlYWRdOwogICAgcXVldWVbaGVhZF0gPSAwOwogICAgaGVhZCA9IChoZWFkICsgMSkgJSBTSVpFOwogICAgY291bnQtLTsgIAogICAgcHJpbnRmKCIlZCDjgpLlj5bjgorlh7rjgZfjgb7jgZfjgZ/jgIJcbiIsIHZhbHVlKTsKICAgIHJldHVybiB2YWx1ZTsKfQoKdm9pZCBkaXNwbGF5KHZvaWQpewogICAgaWYoaXNFbXB0eSgpKXsKICAgICAgICBwcmludGYoIu+8iOePvuWcqOOCreODpeODvOOBr+epuuOBp+OBme+8iVxuIik7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIHByaW50Zigi44Kt44Ol44O844Gu5Lit6Lqr77yaXG4iKTsKICAgIGludCBpID0gaGVhZDsKICAgIGZvcihpbnQgaiA9IDA7IGogPCBjb3VudDsgaisrKXsgIAogICAgICAgIHByaW50ZigiIHF1ZXVlWyVkXSA9ICVkXG4iLCBpLCBxdWV1ZVtpXSk7CiAgICAgICAgaSA9IChpICsgMSkgJSBTSVpFOwogICAgfQp9Cgp2b2lkIGluaXRpYWxpemUodm9pZCl7CiAgICBoZWFkID0gdGFpbCA9IGNvdW50ID0gMDsgIAogICAgZm9yKGludCBpID0gMDsgaSA8IFNJWkU7IGkrKyl7CiAgICAgICAgcXVldWVbaV0gPSAwOwogICAgfQogICAgcHJpbnRmKCLjgq3jg6Xjg7zjgpLliJ3mnJ/ljJbjgZfjgb7jgZfjgZ/jgIJcbiIpOwp9Cg==
1: enqueue 2: dequeue 3: initialize 0: end → enqueue → 10 を追加しました。
head=0, tail=1, count=1
キューの中身:
queue[0] = 10
1: enqueue 2: dequeue 3: initialize 0: end → enqueue → 20 を追加しました。
head=0, tail=2, count=2
キューの中身:
queue[0] = 10
queue[1] = 20
1: enqueue 2: dequeue 3: initialize 0: end → enqueue → 30 を追加しました。
head=0, tail=3, count=3
キューの中身:
queue[0] = 10
queue[1] = 20
queue[2] = 30
1: enqueue 2: dequeue 3: initialize 0: end → 無効な入力です。
head=0, tail=3, count=3
キューの中身:
queue[0] = 10
queue[1] = 20
queue[2] = 30
1: enqueue 2: dequeue 3: initialize 0: end → 10 を取り出しました。
head=1, tail=3, count=2
キューの中身:
queue[1] = 20
queue[2] = 30
1: enqueue 2: dequeue 3: initialize 0: end → 無効な入力です。
head=1, tail=3, count=2
キューの中身:
queue[1] = 20
queue[2] = 30
1: enqueue 2: dequeue 3: initialize 0: end → キューを初期化しました。
head=0, tail=0, count=0
(現在キューは空です)
1: enqueue 2: dequeue 3: initialize 0: end → 無効な入力です。
head=0, tail=0, count=0
(現在キューは空です)
1: enqueue 2: dequeue 3: initialize 0: end →