#include <stdio.h>
#include <stdlib.h>
typedef struct node {
int val;
struct node *next;
} Node;
Node *head = NULL;
// ノード作成
Node* createN(int x){
Node *newnode;
newnode
= (Node
*)malloc(sizeof(Node
)); newnode->val = x;
newnode->next = NULL;
return newnode;
}
// メモリ解放
void freeL(){
Node *p;
while(head != NULL){
p = head->next;
head = p;
}
}
// リスト出力
void printL(){
Node *p = head;
while(p != NULL){
p = p->next;
}
}
// 先頭に挿入(スタック用)
void insHead(int x){
Node *p = createN(x);
p->next = head;
head = p;
}
// 末尾に挿入(キュー用)
void insTail(int x){
Node *p = head;
if(p == NULL){
head = createN(x);
return;
}
while(p->next != NULL){
p = p->next;
}
p->next = createN(x);
}
// 先頭を削除
void delHead(){
Node *p = head;
if(head == NULL) return;
head = head->next;
}
// ---------- スタックの関数 ----------
// push:先頭に追加
void push(int x){
insHead(x);
}
// pop:先頭を取り出す
int pop(){
if (head == NULL) return -1;
int val = head->val;
delHead();
return val;
}
// ---------- キューの関数 ----------
// enqueue:末尾に追加
void enqueue(int x){
insTail(x);
}
// dequeue:先頭を取り出す
int dequeue(){
if (head == NULL) return -1;
int val = head->val;
delHead();
return val;
}
// ---------- メイン関数 ----------
int main(void){
int s1, s2, s3, q1, q2, q3;
// スタックテスト
push(1);
push(2);
push(3);
s1 = pop();
s2 = pop();
s3 = pop();
printf("%d %d %d\n", s1
, s2
, s3
); // → 3 2 1
// キューテスト
enqueue(1);
enqueue(2);
enqueue(3);
q1 = dequeue();
q2 = dequeue();
q3 = dequeue();
printf("%d %d %d\n", q1
, q2
, q3
); // → 1 2 3
freeL(); // メモリ解放
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KCnR5cGVkZWYgc3RydWN0IG5vZGUgewogICAgaW50IHZhbDsKICAgIHN0cnVjdCBub2RlICpuZXh0Owp9IE5vZGU7CgpOb2RlICpoZWFkID0gTlVMTDsKCi8vIOODjuODvOODieS9nOaIkApOb2RlKiBjcmVhdGVOKGludCB4KXsKICAgIE5vZGUgKm5ld25vZGU7CiAgICBuZXdub2RlID0gKE5vZGUgKiltYWxsb2Moc2l6ZW9mKE5vZGUpKTsKICAgIG5ld25vZGUtPnZhbCA9IHg7CiAgICBuZXdub2RlLT5uZXh0ID0gTlVMTDsKICAgIHJldHVybiBuZXdub2RlOwp9CgovLyDjg6Hjg6Ljg6rop6PmlL4Kdm9pZCBmcmVlTCgpewogICAgTm9kZSAqcDsKICAgIHdoaWxlKGhlYWQgIT0gTlVMTCl7CiAgICAgICAgcCA9IGhlYWQtPm5leHQ7CiAgICAgICAgZnJlZShoZWFkKTsKICAgICAgICBoZWFkID0gcDsKICAgIH0KfQoKLy8g44Oq44K544OI5Ye65YqbCnZvaWQgcHJpbnRMKCl7CiAgICBOb2RlICpwID0gaGVhZDsKICAgIHdoaWxlKHAgIT0gTlVMTCl7CiAgICAgICAgcHJpbnRmKCIlZCAiLCBwLT52YWwpOwogICAgICAgIHAgPSBwLT5uZXh0OwogICAgfQogICAgcHJpbnRmKCJcbiIpOwp9CgovLyDlhYjpoK3jgavmjL/lhaXvvIjjgrnjgr/jg4Pjgq/nlKjvvIkKdm9pZCBpbnNIZWFkKGludCB4KXsKICAgIE5vZGUgKnAgPSBjcmVhdGVOKHgpOwogICAgcC0+bmV4dCA9IGhlYWQ7CiAgICBoZWFkID0gcDsKfQoKLy8g5pyr5bC+44Gr5oy/5YWl77yI44Kt44Ol44O855So77yJCnZvaWQgaW5zVGFpbChpbnQgeCl7CiAgICBOb2RlICpwID0gaGVhZDsKICAgIGlmKHAgPT0gTlVMTCl7CiAgICAgICAgaGVhZCA9IGNyZWF0ZU4oeCk7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgd2hpbGUocC0+bmV4dCAhPSBOVUxMKXsKICAgICAgICBwID0gcC0+bmV4dDsKICAgIH0KICAgIHAtPm5leHQgPSBjcmVhdGVOKHgpOwp9CgovLyDlhYjpoK3jgpLliYrpmaQKdm9pZCBkZWxIZWFkKCl7CiAgICBOb2RlICpwID0gaGVhZDsKICAgIGlmKGhlYWQgPT0gTlVMTCkgcmV0dXJuOwogICAgaGVhZCA9IGhlYWQtPm5leHQ7CiAgICBmcmVlKHApOwp9CgovLyAtLS0tLS0tLS0tIOOCueOCv+ODg+OCr+OBrumWouaVsCAtLS0tLS0tLS0tCgovLyBwdXNo77ya5YWI6aCt44Gr6L+95YqgCnZvaWQgcHVzaChpbnQgeCl7CiAgICBpbnNIZWFkKHgpOwp9CgovLyBwb3DvvJrlhYjpoK3jgpLlj5bjgorlh7rjgZkKaW50IHBvcCgpewogICAgaWYgKGhlYWQgPT0gTlVMTCkgcmV0dXJuIC0xOwogICAgaW50IHZhbCA9IGhlYWQtPnZhbDsKICAgIGRlbEhlYWQoKTsKICAgIHJldHVybiB2YWw7Cn0KCi8vIC0tLS0tLS0tLS0g44Kt44Ol44O844Gu6Zai5pWwIC0tLS0tLS0tLS0KCi8vIGVucXVldWXvvJrmnKvlsL7jgavov73liqAKdm9pZCBlbnF1ZXVlKGludCB4KXsKICAgIGluc1RhaWwoeCk7Cn0KCi8vIGRlcXVldWXvvJrlhYjpoK3jgpLlj5bjgorlh7rjgZkKaW50IGRlcXVldWUoKXsKICAgIGlmIChoZWFkID09IE5VTEwpIHJldHVybiAtMTsKICAgIGludCB2YWwgPSBoZWFkLT52YWw7CiAgICBkZWxIZWFkKCk7CiAgICByZXR1cm4gdmFsOwp9CgovLyAtLS0tLS0tLS0tIOODoeOCpOODs+mWouaVsCAtLS0tLS0tLS0tCmludCBtYWluKHZvaWQpewogICAgaW50IHMxLCBzMiwgczMsIHExLCBxMiwgcTM7CgogICAgLy8g44K544K/44OD44Kv44OG44K544OICiAgICBwdXNoKDEpOwogICAgcHVzaCgyKTsKICAgIHB1c2goMyk7CiAgICBzMSA9IHBvcCgpOwogICAgczIgPSBwb3AoKTsKICAgIHMzID0gcG9wKCk7CiAgICBwcmludGYoIiVkICVkICVkXG4iLCBzMSwgczIsIHMzKTsgLy8g4oaSIDMgMiAxCgogICAgLy8g44Kt44Ol44O844OG44K544OICiAgICBlbnF1ZXVlKDEpOwogICAgZW5xdWV1ZSgyKTsKICAgIGVucXVldWUoMyk7CiAgICBxMSA9IGRlcXVldWUoKTsKICAgIHEyID0gZGVxdWV1ZSgpOwogICAgcTMgPSBkZXF1ZXVlKCk7CiAgICBwcmludGYoIiVkICVkICVkXG4iLCBxMSwgcTIsIHEzKTsgLy8g4oaSIDEgMiAzCgogICAgZnJlZUwoKTsgLy8g44Oh44Oi44Oq6Kej5pS+CiAgICByZXR1cm4gMDsKfQo=