#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 initL(int n) {
int x, i;
Node *p;
head = createN(x);
p = head;
for (i = 1; i < n; i++) {
p->next = createN(x);
p = p->next;
}
}
void freeL() {
Node *p;
while (head != NULL) {
p = head->next;
head = p;
}
}
void printN(Node *a) {
if (a
== NULL
) printf("NULL\n"); }
void printL() {
Node *p = head;
while (p != NULL) {
p = p->next;
}
}
Node* getN(int n) {
int i;
Node *p;
p = head;
for (i = 1; i < n; i++) p = p->next;
return p;
}
int countL() {
int ret = 0;
Node *p = head;
while (p != NULL) {
p = p->next;
ret++;
}
return ret;
}
Node* searchX(int x) {
Node *p;
for (p = head; p != NULL; p = p->next) {
if (p->val == x) break;
}
return p;
}
void insHead(int x) {
Node *p;
p = createN(x);
p->next = head;
head = p;
}
void insMiddle(int n, int x) {
int i;
Node *p, *q;
p = head;
for (i = 1; i < n; i++) {
p = p->next;
}
q = createN(x);
q->next = p->next;
p->next = q;
}
void insTail(int x) {
Node *p;
if (head == NULL) {
head = createN(x);
return;
}
p = head;
while (p->next != NULL) {
p = p->next;
}
p->next = createN(x);
}
void delHead() {
if (head == NULL) return;
Node *p;
p = head;
head = head->next;
}
void delMiddle(int n) {
int i;
Node *p, *q;
p = head;
for (i = 1; i < n - 1; i++) {
p = p->next;
}
q = p->next;
p->next = q->next;
}
void delTail() {
if (head == NULL) return;
if (head->next == NULL) {
head = NULL;
return;
}
Node *p;
p = head;
while (p->next->next != NULL) {
p = p->next;
}
p->next = NULL;
}
// --- 以下、追加・修正した関数 ---
void push(int x) {
// スタックのプッシュは先頭への挿入
insHead(x);
}
int pop() {
// スタックのポップは先頭から値を取り出し、ノードを削除
if (head == NULL) return -1; // エラー処理(空の場合)
int val = head->val; // 1. 値を保持
delHead(); // 2. 先頭を削除
return val; // 3. 値を返す
}
void enqueue(int x) {
// キューのエンキューは末尾への挿入
insTail(x);
}
int dequeue() {
// キューのデキューは先頭から値を取り出し、ノードを削除
if (head == NULL) return -1; // エラー処理(空の場合)
int val = head->val; // 1. 値を保持
delHead(); // 2. 先頭を削除
return val; // 3. 値を返す
}
int main(void) {
int s1, s2, s3, q1, q2, q3;
// スタックの動作確認 (LIFO: 3, 2, 1 の順に出るはず)
push(1);
push(2);
push(3);
s1 = pop();
s2 = pop();
s3 = pop();
printf("%d %d %d\n", s1
, s2
, s3
);
// キューの動作確認 (FIFO: 1, 2, 3 の順に出るはず)
enqueue(1);
enqueue(2);
enqueue(3);
q1 = dequeue();
q2 = dequeue();
q3 = dequeue();
printf("%d %d %d\n", q1
, q2
, q3
);
freeL();
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KCnR5cGVkZWYgc3RydWN0IG5vZGUgewogICAgaW50IHZhbDsKICAgIHN0cnVjdCBub2RlICpuZXh0Owp9IE5vZGU7CgpOb2RlICpoZWFkID0gTlVMTDsKCk5vZGUqIGNyZWF0ZU4oaW50IHgpIHsKICAgIE5vZGUgKm5ld25vZGU7CiAgICBuZXdub2RlID0gKE5vZGUgKiltYWxsb2Moc2l6ZW9mKE5vZGUpKTsKICAgIG5ld25vZGUtPnZhbCA9IHg7CiAgICBuZXdub2RlLT5uZXh0ID0gTlVMTDsKICAgIHJldHVybiBuZXdub2RlOwp9Cgp2b2lkIGluaXRMKGludCBuKSB7CiAgICBpbnQgeCwgaTsKICAgIE5vZGUgKnA7CiAgICBzY2FuZigiJWQiLCAmeCk7CiAgICBoZWFkID0gY3JlYXRlTih4KTsKICAgIHAgPSBoZWFkOwogICAgZm9yIChpID0gMTsgaSA8IG47IGkrKykgewogICAgICAgIHNjYW5mKCIlZCIsICZ4KTsKICAgICAgICBwLT5uZXh0ID0gY3JlYXRlTih4KTsKICAgICAgICBwID0gcC0+bmV4dDsKICAgIH0KfQoKdm9pZCBmcmVlTCgpIHsKICAgIE5vZGUgKnA7CiAgICB3aGlsZSAoaGVhZCAhPSBOVUxMKSB7CiAgICAgICAgcCA9IGhlYWQtPm5leHQ7CiAgICAgICAgZnJlZShoZWFkKTsKICAgICAgICBoZWFkID0gcDsKICAgIH0KfQoKdm9pZCBwcmludE4oTm9kZSAqYSkgewogICAgaWYgKGEgPT0gTlVMTCkgcHJpbnRmKCJOVUxMXG4iKTsKICAgIGVsc2UgcHJpbnRmKCIlZFxuIiwgYS0+dmFsKTsKfQoKdm9pZCBwcmludEwoKSB7CiAgICBOb2RlICpwID0gaGVhZDsKICAgIHdoaWxlIChwICE9IE5VTEwpIHsKICAgICAgICBwcmludGYoIiVkICIsIHAtPnZhbCk7CiAgICAgICAgcCA9IHAtPm5leHQ7CiAgICB9CiAgICBwcmludGYoIlxuIik7Cn0KCk5vZGUqIGdldE4oaW50IG4pIHsKICAgIGludCBpOwogICAgTm9kZSAqcDsKICAgIHAgPSBoZWFkOwogICAgZm9yIChpID0gMTsgaSA8IG47IGkrKykgcCA9IHAtPm5leHQ7CiAgICByZXR1cm4gcDsKfQoKaW50IGNvdW50TCgpIHsKICAgIGludCByZXQgPSAwOwogICAgTm9kZSAqcCA9IGhlYWQ7CiAgICB3aGlsZSAocCAhPSBOVUxMKSB7CiAgICAgICAgcCA9IHAtPm5leHQ7CiAgICAgICAgcmV0Kys7CiAgICB9CiAgICByZXR1cm4gcmV0Owp9CgpOb2RlKiBzZWFyY2hYKGludCB4KSB7CiAgICBOb2RlICpwOwogICAgZm9yIChwID0gaGVhZDsgcCAhPSBOVUxMOyBwID0gcC0+bmV4dCkgewogICAgICAgIGlmIChwLT52YWwgPT0geCkgYnJlYWs7CiAgICB9CiAgICByZXR1cm4gcDsKfQoKdm9pZCBpbnNIZWFkKGludCB4KSB7CiAgICBOb2RlICpwOwogICAgcCA9IGNyZWF0ZU4oeCk7CiAgICBwLT5uZXh0ID0gaGVhZDsKICAgIGhlYWQgPSBwOwp9Cgp2b2lkIGluc01pZGRsZShpbnQgbiwgaW50IHgpIHsKICAgIGludCBpOwogICAgTm9kZSAqcCwgKnE7CiAgICBwID0gaGVhZDsKICAgIGZvciAoaSA9IDE7IGkgPCBuOyBpKyspIHsKICAgICAgICBwID0gcC0+bmV4dDsKICAgIH0KICAgIHEgPSBjcmVhdGVOKHgpOwogICAgcS0+bmV4dCA9IHAtPm5leHQ7CiAgICBwLT5uZXh0ID0gcTsKfQoKdm9pZCBpbnNUYWlsKGludCB4KSB7CiAgICBOb2RlICpwOwogICAgaWYgKGhlYWQgPT0gTlVMTCkgewogICAgICAgIGhlYWQgPSBjcmVhdGVOKHgpOwogICAgICAgIHJldHVybjsKICAgIH0KICAgIHAgPSBoZWFkOwogICAgd2hpbGUgKHAtPm5leHQgIT0gTlVMTCkgewogICAgICAgIHAgPSBwLT5uZXh0OwogICAgfQogICAgcC0+bmV4dCA9IGNyZWF0ZU4oeCk7Cn0KCnZvaWQgZGVsSGVhZCgpIHsKICAgIGlmIChoZWFkID09IE5VTEwpIHJldHVybjsKICAgIE5vZGUgKnA7CiAgICBwID0gaGVhZDsKICAgIGhlYWQgPSBoZWFkLT5uZXh0OwogICAgZnJlZShwKTsKfQoKdm9pZCBkZWxNaWRkbGUoaW50IG4pIHsKICAgIGludCBpOwogICAgTm9kZSAqcCwgKnE7CiAgICBwID0gaGVhZDsKICAgIGZvciAoaSA9IDE7IGkgPCBuIC0gMTsgaSsrKSB7CiAgICAgICAgcCA9IHAtPm5leHQ7CiAgICB9CiAgICBxID0gcC0+bmV4dDsKICAgIHAtPm5leHQgPSBxLT5uZXh0OwogICAgZnJlZShxKTsKfQoKdm9pZCBkZWxUYWlsKCkgewogICAgaWYgKGhlYWQgPT0gTlVMTCkgcmV0dXJuOwogICAgaWYgKGhlYWQtPm5leHQgPT0gTlVMTCkgewogICAgICAgIGZyZWUoaGVhZCk7CiAgICAgICAgaGVhZCA9IE5VTEw7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgTm9kZSAqcDsKICAgIHAgPSBoZWFkOwogICAgd2hpbGUgKHAtPm5leHQtPm5leHQgIT0gTlVMTCkgewogICAgICAgIHAgPSBwLT5uZXh0OwogICAgfQogICAgZnJlZShwLT5uZXh0KTsKICAgIHAtPm5leHQgPSBOVUxMOwp9CgovLyAtLS0g5Lul5LiL44CB6L+95Yqg44O75L+u5q2j44GX44Gf6Zai5pWwIC0tLQoKdm9pZCBwdXNoKGludCB4KSB7CiAgICAvLyDjgrnjgr/jg4Pjgq/jga7jg5fjg4Pjgrfjg6Xjga/lhYjpoK3jgbjjga7mjL/lhaUKICAgIGluc0hlYWQoeCk7Cn0KCmludCBwb3AoKSB7CiAgICAvLyDjgrnjgr/jg4Pjgq/jga7jg53jg4Pjg5fjga/lhYjpoK3jgYvjgonlgKTjgpLlj5bjgorlh7rjgZfjgIHjg47jg7zjg4njgpLliYrpmaQKICAgIGlmIChoZWFkID09IE5VTEwpIHJldHVybiAtMTsgLy8g44Ko44Op44O85Yem55CG77yI56m644Gu5aC05ZCI77yJCiAgICAKICAgIGludCB2YWwgPSBoZWFkLT52YWw7IC8vIDEuIOWApOOCkuS/neaMgQogICAgZGVsSGVhZCgpOyAgICAgICAgICAgLy8gMi4g5YWI6aCt44KS5YmK6ZmkCiAgICByZXR1cm4gdmFsOyAgICAgICAgICAvLyAzLiDlgKTjgpLov5TjgZkKfQoKdm9pZCBlbnF1ZXVlKGludCB4KSB7CiAgICAvLyDjgq3jg6Xjg7zjga7jgqjjg7Pjgq3jg6Xjg7zjga/mnKvlsL7jgbjjga7mjL/lhaUKICAgIGluc1RhaWwoeCk7Cn0KCmludCBkZXF1ZXVlKCkgewogICAgLy8g44Kt44Ol44O844Gu44OH44Kt44Ol44O844Gv5YWI6aCt44GL44KJ5YCk44KS5Y+W44KK5Ye644GX44CB44OO44O844OJ44KS5YmK6ZmkCiAgICBpZiAoaGVhZCA9PSBOVUxMKSByZXR1cm4gLTE7IC8vIOOCqOODqeODvOWHpueQhu+8iOepuuOBruWgtOWQiO+8iQogICAgCiAgICBpbnQgdmFsID0gaGVhZC0+dmFsOyAvLyAxLiDlgKTjgpLkv53mjIEKICAgIGRlbEhlYWQoKTsgICAgICAgICAgIC8vIDIuIOWFiOmgreOCkuWJiumZpAogICAgcmV0dXJuIHZhbDsgICAgICAgICAgLy8gMy4g5YCk44KS6L+U44GZCn0KCmludCBtYWluKHZvaWQpIHsKICAgIGludCBzMSwgczIsIHMzLCBxMSwgcTIsIHEzOwoKICAgIC8vIOOCueOCv+ODg+OCr+OBruWLleS9nOeiuuiqjSAoTElGTzogMywgMiwgMSDjga7poIbjgavlh7rjgovjga/jgZopCiAgICBwdXNoKDEpOwogICAgcHVzaCgyKTsKICAgIHB1c2goMyk7CiAgICBzMSA9IHBvcCgpOwogICAgczIgPSBwb3AoKTsKICAgIHMzID0gcG9wKCk7CiAgICBwcmludGYoIiVkICVkICVkXG4iLCBzMSwgczIsIHMzKTsKCiAgICAvLyDjgq3jg6Xjg7zjga7li5XkvZznorroqo0gKEZJRk86IDEsIDIsIDMg44Gu6aCG44Gr5Ye644KL44Gv44GaKQogICAgZW5xdWV1ZSgxKTsKICAgIGVucXVldWUoMik7CiAgICBlbnF1ZXVlKDMpOwogICAgcTEgPSBkZXF1ZXVlKCk7CiAgICBxMiA9IGRlcXVldWUoKTsKICAgIHEzID0gZGVxdWV1ZSgpOwogICAgcHJpbnRmKCIlZCAlZCAlZFxuIiwgcTEsIHEyLCBxMyk7CgogICAgZnJlZUwoKTsKICAgIHJldHVybiAwOwp9