#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;
p = head;
if(p == NULL){
head = createN(x);
return;
}
while(p->next != NULL){
p = p->next;
}
p->next = createN(x);
}
void delHead(){
Node *p;
if (head == NULL) return; // 安全対策
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(){
Node *p;
p = head;
if (p == NULL || p->next == NULL) {
freeL();
return;
}
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;
delHead();
return val;
}
void enqueue(int x){
insTail(x);
}
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
);
enqueue(1);
enqueue(2);
enqueue(3);
q1 = dequeue();
q2 = dequeue();
q3 = dequeue();
printf("%d %d %d\n", q1
, q2
, q3
);
freeL();
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KCnR5cGVkZWYgc3RydWN0IG5vZGUgewogICAgaW50IHZhbDsKICAgIHN0cnVjdCBub2RlICpuZXh0Owp9IE5vZGU7CgpOb2RlICpoZWFkID0gTlVMTDsKCk5vZGUqIGNyZWF0ZU4oaW50IHgpewogICAgTm9kZSAqbmV3bm9kZTsKICAgIG5ld25vZGUgPSAoTm9kZSAqKW1hbGxvYyhzaXplb2YoTm9kZSkpOwogICAgbmV3bm9kZS0+dmFsID0geDsKICAgIG5ld25vZGUtPm5leHQgPSBOVUxMOwogICAgcmV0dXJuIG5ld25vZGU7Cn0KCnZvaWQgaW5pdEwoaW50IG4pewogICAgaW50IHgsIGk7CiAgICBOb2RlICpwOwogICAgc2NhbmYoIiVkIiwgJngpOwogICAgaGVhZCA9IGNyZWF0ZU4oeCk7CiAgICBwID0gaGVhZDsKICAgIGZvcihpID0gMTsgaSA8IG47IGkrKyl7CiAgICAgICAgc2NhbmYoIiVkIiwgJngpOwogICAgICAgIHAtPm5leHQgPSBjcmVhdGVOKHgpOwogICAgICAgIHAgPSBwLT5uZXh0OwogICAgfQp9Cgp2b2lkIGZyZWVMKCl7CiAgICBOb2RlICpwOwogICAgd2hpbGUoaGVhZCAhPSBOVUxMKXsKICAgICAgICBwID0gaGVhZC0+bmV4dDsKICAgICAgICBmcmVlKGhlYWQpOwogICAgICAgIGhlYWQgPSBwOwogICAgfQp9Cgp2b2lkIHByaW50TihOb2RlICphKXsKICAgIGlmKGEgPT0gTlVMTCkgcHJpbnRmKCJOVUxMXG4iKTsKICAgIGVsc2UgcHJpbnRmKCIlZFxuIiwgYS0+dmFsKTsKfQoKdm9pZCBwcmludEwoKXsKICAgIE5vZGUgKnAgPSBoZWFkOwogICAgd2hpbGUocCAhPSBOVUxMKXsKICAgICAgICBwcmludGYoIiVkICIsIHAtPnZhbCk7CiAgICAgICAgcCA9IHAtPm5leHQ7CiAgICB9CiAgICBwcmludGYoIlxuIik7Cn0KCk5vZGUqIGdldE4oaW50IG4pewogICAgaW50IGk7CiAgICBOb2RlICpwOwogICAgcCA9IGhlYWQ7CiAgICBmb3IoaSA9IDE7IGkgPCBuOyBpKyspIHAgPSBwLT5uZXh0OwogICAgcmV0dXJuIHA7Cn0KCmludCBjb3VudEwoKXsKICAgIGludCByZXQgPSAwOwogICAgTm9kZSAqcCA9IGhlYWQ7CiAgICB3aGlsZShwICE9IE5VTEwpewogICAgICAgIHAgPSBwLT5uZXh0OwogICAgICAgIHJldCsrOwogICAgfQogICAgcmV0dXJuIHJldDsKfQoKTm9kZSogc2VhcmNoWChpbnQgeCl7CiAgICBOb2RlICpwOwogICAgZm9yKHAgPSBoZWFkOyBwICE9IE5VTEw7IHAgPSBwLT5uZXh0KXsKICAgICAgICBpZihwLT52YWwgPT0geCkgYnJlYWs7CiAgICB9CiAgICByZXR1cm4gcDsKfQoKdm9pZCBpbnNIZWFkKGludCB4KXsKICAgIE5vZGUgKnA7CiAgICBwID0gY3JlYXRlTih4KTsKICAgIHAtPm5leHQgPSBoZWFkOwogICAgaGVhZCA9IHA7Cn0KCnZvaWQgaW5zTWlkZGxlKGludCBuLCBpbnQgeCl7CiAgICBpbnQgaTsKICAgIE5vZGUgKnAsICpxOwogICAgcCA9IGhlYWQ7CiAgICBmb3IoaSA9IDE7IGkgPCBuOyBpKyspewogICAgICAgIHAgPSBwLT5uZXh0OwogICAgfQogICAgcSA9IGNyZWF0ZU4oeCk7CiAgICBxLT5uZXh0ID0gcC0+bmV4dDsKICAgIHAtPm5leHQgPSBxOwp9Cgp2b2lkIGluc1RhaWwoaW50IHgpewogICAgTm9kZSAqcDsKICAgIHAgPSBoZWFkOwogICAgaWYocCA9PSBOVUxMKXsKICAgICAgICBoZWFkID0gY3JlYXRlTih4KTsKICAgICAgICByZXR1cm47CiAgICB9CiAgICB3aGlsZShwLT5uZXh0ICE9IE5VTEwpewogICAgICAgIHAgPSBwLT5uZXh0OwogICAgfQogICAgcC0+bmV4dCA9IGNyZWF0ZU4oeCk7Cn0KCnZvaWQgZGVsSGVhZCgpewogICAgTm9kZSAqcDsKICAgIGlmIChoZWFkID09IE5VTEwpIHJldHVybjsgLy8g5a6J5YWo5a++562WCiAgICBwID0gaGVhZDsKICAgIGhlYWQgPSBoZWFkLT5uZXh0OwogICAgZnJlZShwKTsKfQoKdm9pZCBkZWxNaWRkbGUoaW50IG4pewogICAgaW50IGk7CiAgICBOb2RlICpwLCAqcTsKICAgIHAgPSBoZWFkOwogICAgZm9yKGkgPSAxOyBpIDwgbiAtIDE7IGkrKyl7CiAgICAgICAgcCA9IHAtPm5leHQ7CiAgICB9CiAgICBxID0gcC0+bmV4dDsKICAgIHAtPm5leHQgPSBxLT5uZXh0OwogICAgZnJlZShxKTsKfQoKdm9pZCBkZWxUYWlsKCl7CiAgICBOb2RlICpwOwogICAgcCA9IGhlYWQ7CiAgICBpZiAocCA9PSBOVUxMIHx8IHAtPm5leHQgPT0gTlVMTCkgewogICAgICAgIGZyZWVMKCk7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgd2hpbGUocC0+bmV4dC0+bmV4dCAhPSBOVUxMKXsKICAgICAgICBwID0gcC0+bmV4dDsKICAgIH0KICAgIGZyZWUocC0+bmV4dCk7CiAgICBwLT5uZXh0ID0gTlVMTDsKfQoKdm9pZCBwdXNoKGludCB4KXsKICAgIGluc0hlYWQoeCk7IAp9CgppbnQgcG9wKCl7CiAgICBpZiAoaGVhZCA9PSBOVUxMKSByZXR1cm4gLTE7IAogICAgCiAgICBpbnQgdmFsID0gaGVhZC0+dmFsOyAKICAgIGRlbEhlYWQoKTsgICAgICAgICAgIAogICAgcmV0dXJuIHZhbDsgICAgICAgICAgCn0KCnZvaWQgZW5xdWV1ZShpbnQgeCl7CiAgICBpbnNUYWlsKHgpOwp9CgppbnQgZGVxdWV1ZSgpewogICAgaWYgKGhlYWQgPT0gTlVMTCkgcmV0dXJuIC0xOyAKICAgIAogICAgaW50IHZhbCA9IGhlYWQtPnZhbDsgCiAgICBkZWxIZWFkKCk7ICAgICAgICAgICAKICAgIHJldHVybiB2YWw7ICAgICAgICAgIAp9CgppbnQgbWFpbih2b2lkKXsKICAgIGludCBzMSwgczIsIHMzLCBxMSwgcTIsIHEzOwoKICAgIC8vIOOCueOCv+ODg+OCr+OBruODhuOCueODiAogICAgcHVzaCgxKTsKICAgIHB1c2goMik7CiAgICBwdXNoKDMpOwogICAgczEgPSBwb3AoKTsKICAgIHMyID0gcG9wKCk7CiAgICBzMyA9IHBvcCgpOwogICAgcHJpbnRmKCIlZCAlZCAlZFxuIiwgczEsIHMyLCBzMyk7IAoKICAKICAgIGVucXVldWUoMSk7CiAgICBlbnF1ZXVlKDIpOwogICAgZW5xdWV1ZSgzKTsKICAgIHExID0gZGVxdWV1ZSgpOwogICAgcTIgPSBkZXF1ZXVlKCk7CiAgICBxMyA9IGRlcXVldWUoKTsKICAgIHByaW50ZigiJWQgJWQgJWRcbiIsIHExLCBxMiwgcTMpOyAKCiAgICBmcmVlTCgpOwogICAgcmV0dXJuIDA7Cn0=