#include <iostream>
using namespace std;
struct node{//节点双向方便找尾指针的前驱
node* pre;
int data;
node* next;
};
struct queueL{
node* head;//头指针
node* tail;//尾指针
};
queueL* init(){
queueL* q=new queueL();
q->head=q->tail=NULL;
return q;
}
node* createNode(int elem){
node *n=new node();
n->data=elem;
n->next=NULL;
return n;
}
void Enqueue(queueL* q,int elem){
node* n=createNode(elem);
if(!q->head&&!q->tail){//队列为空
q->head=q->tail=n;
}
else{
q->tail->next=n;
n->pre=q->tail;
q->tail=q->tail->next;
}
}
int Dequeue(queueL* q){
int elem;
if(!q->head&&!q->tail){//队列为空
return -1;//返回错误
}
else{
if(q->head==q->tail){//只有一个节点
elem=q->tail->data;
node* c=q->tail;
delete(c);
q->head=q->tail=NULL;
return elem;
}
else{//正常情况
node* c=q->tail;
q->tail=q->tail->pre;
elem=c->data;
delete(c);
return elem;
}
}
}
int main(){
queueL* q=init();
Enqueue(q,3);
Dequeue(q);
Dequeue(q);
cout<< Dequeue(q);
}