#include<iostream>
using namespace std;
struct node
{
int value;
struct node *next;
};
struct node *head = NULL;
struct node *tail = NULL;
void insertHead(int val)
{
//create a new node
struct node *newItem;
newItem=(struct node *)malloc(sizeof(struct node));
newItem->value = val;
newItem->next = NULL;
if (head == NULL) tail = newItem;
//insert the new node at the head
newItem->next = head;
head = newItem;
}
void insertTail(int val)
{
//create a new node to be inserted
struct node *newItem;
newItem=(struct node *)malloc(sizeof(struct node));
newItem->value = val;
newItem->next = NULL;
if (head == NULL)
{
head = newItem;
tail = newItem;
return;
}
newItem->next = NULL;
tail->next = newItem;
tail = newItem;
}
void printList()
{
if (head == NULL) return;
struct node *cur = head;
while (cur != NULL)
{
printf("%d \t", cur->value);
cur = cur->next;
}
}
int deleteHead()
{
struct node *cur;
if (head == NULL) return -1;
cur = head;
head = head->next;
if (head == NULL) tail = NULL;
int val = cur->value;
free(cur);
return val;
}
class QUEUE{
node* front;
node* rear;
public:
QUEUE(){
front = NULL;
rear = NULL;
}
void push_back(int val){
//create a new node to be inserted
struct node *newItem;
newItem=(struct node *)malloc(sizeof(struct node));
newItem->value = val;
newItem->next = NULL;
if (front == NULL)
{
front = newItem;
rear = newItem;
return;
}
newItem->next = NULL;
rear->next = newItem;
rear = newItem;
}
int pop(){
struct node *cur;
if (front == NULL) return -1;
cur = front;
front = front->next;
if (front == NULL) rear = NULL;
int val = cur->value;
free(cur);
return val;
}
};
int main(){
QUEUE q;
q.push_back(10);
q.push_back(20);
q.push_back(30);
cout<<q.pop()<<endl;
cout<<q.pop()<<endl;
cout<<q.pop()<<endl;
cout<<q.pop()<<endl;
}
I2luY2x1ZGU8aW9zdHJlYW0+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IG5vZGUKewogICAgaW50IHZhbHVlOwogICAgc3RydWN0IG5vZGUgKm5leHQ7Cn07CnN0cnVjdCBub2RlICpoZWFkID0gTlVMTDsKc3RydWN0IG5vZGUgKnRhaWwgPSBOVUxMOwoKdm9pZCBpbnNlcnRIZWFkKGludCB2YWwpCnsKICAgIC8vY3JlYXRlIGEgbmV3IG5vZGUKICAgIHN0cnVjdCBub2RlICpuZXdJdGVtOwogICAgbmV3SXRlbT0oc3RydWN0IG5vZGUgKiltYWxsb2Moc2l6ZW9mKHN0cnVjdCBub2RlKSk7CiAgICBuZXdJdGVtLT52YWx1ZSA9IHZhbDsKICAgIG5ld0l0ZW0tPm5leHQgPSBOVUxMOwoKICAgIGlmIChoZWFkID09IE5VTEwpIHRhaWwgPSBuZXdJdGVtOwogICAgLy9pbnNlcnQgdGhlIG5ldyBub2RlIGF0IHRoZSBoZWFkCiAgICBuZXdJdGVtLT5uZXh0ID0gaGVhZDsKICAgIGhlYWQgPSBuZXdJdGVtOwp9CnZvaWQgaW5zZXJ0VGFpbChpbnQgdmFsKQp7CiAgICAvL2NyZWF0ZSBhIG5ldyBub2RlIHRvIGJlIGluc2VydGVkCiAgICBzdHJ1Y3Qgbm9kZSAqbmV3SXRlbTsKICAgIG5ld0l0ZW09KHN0cnVjdCBub2RlICopbWFsbG9jKHNpemVvZihzdHJ1Y3Qgbm9kZSkpOwogICAgbmV3SXRlbS0+dmFsdWUgPSB2YWw7CiAgICBuZXdJdGVtLT5uZXh0ID0gTlVMTDsKICAgIGlmIChoZWFkID09IE5VTEwpCiAgICB7CiAgICAgICAgaGVhZCA9IG5ld0l0ZW07CiAgICAgICAgdGFpbCA9IG5ld0l0ZW07CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIG5ld0l0ZW0tPm5leHQgPSBOVUxMOwogICAgdGFpbC0+bmV4dCA9IG5ld0l0ZW07CiAgICB0YWlsID0gbmV3SXRlbTsKfQp2b2lkIHByaW50TGlzdCgpCnsKICAgIGlmIChoZWFkID09IE5VTEwpIHJldHVybjsKICAgIHN0cnVjdCBub2RlICpjdXIgPSAgaGVhZDsKICAgIHdoaWxlIChjdXIgIT0gTlVMTCkKICAgIHsKICAgICAgICBwcmludGYoIiVkIFx0IiwgY3VyLT52YWx1ZSk7CiAgICAgICAgY3VyID0gY3VyLT5uZXh0OwogICAgfQp9CmludCBkZWxldGVIZWFkKCkKewogICAgc3RydWN0IG5vZGUgKmN1cjsKICAgIGlmIChoZWFkID09IE5VTEwpIHJldHVybiAtMTsKICAgIGN1ciA9IGhlYWQ7CiAgICBoZWFkID0gaGVhZC0+bmV4dDsKCiAgICBpZiAoaGVhZCA9PSBOVUxMKSB0YWlsID0gTlVMTDsKCiAgICBpbnQgdmFsID0gY3VyLT52YWx1ZTsKICAgIGZyZWUoY3VyKTsKICAgIHJldHVybiB2YWw7Cn0KCmNsYXNzIFFVRVVFewogICAgbm9kZSogZnJvbnQ7CiAgICBub2RlKiByZWFyOwoKcHVibGljOgogICAgUVVFVUUoKXsKICAgICAgICBmcm9udCA9IE5VTEw7CiAgICAgICAgcmVhciA9IE5VTEw7CiAgICB9CgogICAgdm9pZCBwdXNoX2JhY2soaW50IHZhbCl7CiAgICAgICAgLy9jcmVhdGUgYSBuZXcgbm9kZSB0byBiZSBpbnNlcnRlZAogICAgICAgIHN0cnVjdCBub2RlICpuZXdJdGVtOwogICAgICAgIG5ld0l0ZW09KHN0cnVjdCBub2RlICopbWFsbG9jKHNpemVvZihzdHJ1Y3Qgbm9kZSkpOwogICAgICAgIG5ld0l0ZW0tPnZhbHVlID0gdmFsOwogICAgICAgIG5ld0l0ZW0tPm5leHQgPSBOVUxMOwogICAgICAgIGlmIChmcm9udCA9PSBOVUxMKQogICAgICAgIHsKICAgICAgICAgICAgZnJvbnQgPSBuZXdJdGVtOwogICAgICAgICAgICByZWFyID0gbmV3SXRlbTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgbmV3SXRlbS0+bmV4dCA9IE5VTEw7CiAgICAgICAgcmVhci0+bmV4dCA9IG5ld0l0ZW07CiAgICAgICAgcmVhciA9IG5ld0l0ZW07CiAgICB9CgogICAgaW50IHBvcCgpewogICAgICAgIHN0cnVjdCBub2RlICpjdXI7CiAgICAgICAgaWYgKGZyb250ID09IE5VTEwpIHJldHVybiAtMTsKICAgICAgICBjdXIgPSBmcm9udDsKICAgICAgICBmcm9udCA9IGZyb250LT5uZXh0OwoKICAgICAgICBpZiAoZnJvbnQgPT0gTlVMTCkgcmVhciA9IE5VTEw7CgogICAgICAgIGludCB2YWwgPSBjdXItPnZhbHVlOwogICAgICAgIGZyZWUoY3VyKTsKICAgICAgICByZXR1cm4gdmFsOwogICAgfQp9OwoKCmludCBtYWluKCl7CiAgICBRVUVVRSBxOwogICAgcS5wdXNoX2JhY2soMTApOwogICAgcS5wdXNoX2JhY2soMjApOwogICAgcS5wdXNoX2JhY2soMzApOwoKICAgIGNvdXQ8PHEucG9wKCk8PGVuZGw7CiAgICBjb3V0PDxxLnBvcCgpPDxlbmRsOwogICAgY291dDw8cS5wb3AoKTw8ZW5kbDsKICAgIGNvdXQ8PHEucG9wKCk8PGVuZGw7Cn0K