#include <iostream>
using namespace std;
typedef struct Qnode{
int data;
struct Qnode *next;
}Qnode,*Queueptr;
typedef struct{
Queueptr front;
Queueptr rear;
}linkQueue;
linkQueue initQ(linkQueue Q){
Q.front=Q.rear=(Queueptr)malloc(sizeof(Qnode));
if(!Q.front) cout<<"error!"<<endl;
Q.front->next=NULL;
return Q;
}
linkQueue insertQ(linkQueue Q,int e){
Queueptr p;
p=(Queueptr)malloc(sizeof(Qnode));
if(!p) cout<<"error!"<<endl;
p->data=e;p->next=NULL;
Q.rear->next=p;
Q.rear=p;
cout<<"insert ok!"<<endl;
return Q;
}
void destroyQ(linkQueue Q){
while(Q.front){
Q.rear=Q.front->next;
free(Q.front);
Q.front=Q.rear;
}
cout<<"destroy ok!"<<endl;
}
void gethead(linkQueue Q){
if(Q.front==Q.rear) cout<<"error!"<<endl;
int e;
e=Q.front->next->data;
cout<<"head elemt"<<' '<<e<<endl;
}
linkQueue deleteQ(linkQueue Q){
int e;Queueptr p;
if(Q.front==Q.rear) cout<<"error!"<<endl;
p=Q.front->next;
e=p->data;cout<<"delete"<<' '<<e<<endl;
Q.front->next=p->next;
if(Q.rear==p) Q.rear=Q.front;
free(p);
return Q;
};
void QueueEmpty(linkQueue Q){
if(Q.front==Q.rear) cout<<"empty!"<<endl;
else cout<<"not empty!"<<endl;
}
int main(){
linkQueue Q;
Q=initQ(Q);
Q=insertQ(Q,5);
Q=insertQ(Q,6);
gethead(Q);
QueueEmpty(Q);
Q=deleteQ(Q);
Q=deleteQ(Q);
QueueEmpty(Q);
destroyQ(Q);
return 0;
}