#include <limits.h>
#include <iostream>
using namespace std;
struct list { int data; list* next; };
list* cons(int n, list* l) { return new list({n,l}); }
struct List {
list* begin;
list* end;
int empty() { return begin==end; }
int pop_front() {
if ( empty() ) {
cout <<"List empty" <<endl;
return INT_MIN;
}
int n = begin->data;
begin = begin->next;
return n;
}
void push_front(int n) {
begin = cons(n,begin);
}
void push_back(int n) {
list* newend = cons(0,NULL); // 새로운 end 를 만든다
end->data = n;
end->next = newend;
end = newend;
}
};
struct Queue {
List lis;
int empty() { return lis.empty(); }
void addq(int n) {
return lis.push_back(n);
}
int deleteq() {
return lis.pop_front();
}
};
void printList(List l) {
for(list* p=l.begin; p!=l.end; p=p->next) {
cout <<p->data <<" ";
}
cout <<endl;
}
int main(void) {
list* l = cons(0,NULL);
List lis = {l, l}; // 빈 List
Queue q = { lis };
q.addq(1);
q.addq(2);
q.addq(3);
q.addq(4);
int n1 = q.deleteq();
int n2 = q.deleteq();
cout <<n1 <<", " <<n2 <<endl;
return 0;
}
I2luY2x1ZGUgPGxpbWl0cy5oPgojaW5jbHVkZSA8aW9zdHJlYW0+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpzdHJ1Y3QgbGlzdCB7IGludCBkYXRhOyBsaXN0KiBuZXh0OyB9OwoKbGlzdCogY29ucyhpbnQgbiwgbGlzdCogbCkgeyByZXR1cm4gbmV3IGxpc3Qoe24sbH0pOyB9CgpzdHJ1Y3QgTGlzdCB7CglsaXN0KiBiZWdpbjsKCWxpc3QqIGVuZDsKCWludCBlbXB0eSgpIHsgcmV0dXJuIGJlZ2luPT1lbmQ7IH0KCWludCBwb3BfZnJvbnQoKSB7CgkJaWYgKCBlbXB0eSgpICkgewoJCQljb3V0IDw8Ikxpc3QgZW1wdHkiIDw8ZW5kbDsKCQkJcmV0dXJuIElOVF9NSU47CgkJfQoJCWludCBuID0gYmVnaW4tPmRhdGE7CgkJYmVnaW4gPSBiZWdpbi0+bmV4dDsKCQlyZXR1cm4gbjsKCX0KCXZvaWQgcHVzaF9mcm9udChpbnQgbikgewoJCWJlZ2luID0gY29ucyhuLGJlZ2luKTsKCX0KCXZvaWQgcHVzaF9iYWNrKGludCBuKSB7CgkJbGlzdCogbmV3ZW5kID0gY29ucygwLE5VTEwpOyAvLyDsg4jroZzsmrQgZW5kIOulvCDrp4zrk6Dri6QKCQllbmQtPmRhdGEgPSBuOwoJCWVuZC0+bmV4dCA9IG5ld2VuZDsKCQllbmQgPSBuZXdlbmQ7Cgl9Cn07CgpzdHJ1Y3QgUXVldWUgewoJTGlzdCBsaXM7CglpbnQgZW1wdHkoKSB7IHJldHVybiBsaXMuZW1wdHkoKTsgfQoJdm9pZCBhZGRxKGludCBuKSB7CgkJcmV0dXJuIGxpcy5wdXNoX2JhY2sobik7Cgl9CglpbnQgZGVsZXRlcSgpIHsKCQlyZXR1cm4gbGlzLnBvcF9mcm9udCgpOwoJfQp9OwoKdm9pZCBwcmludExpc3QoTGlzdCBsKSB7Cglmb3IobGlzdCogcD1sLmJlZ2luOyBwIT1sLmVuZDsgcD1wLT5uZXh0KSB7CgkJY291dCA8PHAtPmRhdGEgPDwiICI7Cgl9Cgljb3V0IDw8ZW5kbDsKfQoKCmludCBtYWluKHZvaWQpIHsKCWxpc3QqIGwgPSBjb25zKDAsTlVMTCk7CgkKCUxpc3QgbGlzID0ge2wsIGx9OyAvLyDruYggTGlzdAoJCglRdWV1ZSBxID0geyBsaXMgfTsKCXEuYWRkcSgxKTsKCXEuYWRkcSgyKTsKCXEuYWRkcSgzKTsKCXEuYWRkcSg0KTsKCQoJaW50IG4xID0gcS5kZWxldGVxKCk7CglpbnQgbjIgPSBxLmRlbGV0ZXEoKTsKCWNvdXQgPDxuMSA8PCIsICIgPDxuMiA8PGVuZGw7CgogICAgcmV0dXJuIDA7Cn0K