
#include<stdio.h>
#include<stdlib.h>
typedef struct linknode{
int data;
struct linknode *next;
}LinkNode;
typedef struct{
LinkNode *rear,*front;
}LinkQuere;
bool InitLinkNode(LinkNode* &l){
l = (LinkNode*)malloc(sizeof(LinkNode));
if(l != NULL){
return false;
}
l->next = NULL;
return true;
}
bool Empty(LinkQuere q){
if(q.front == q.rear){
return true;
}
else
return false;
}
void InitLinkQuere(LinkQuere &LQ){
LQ.front = LQ.rear = (LinkNode*)malloc(sizeof(LinkNode));
LQ.front->next = NULL;
}
void NoHeadInitLinkQuere(LinkQuere &q){
q.rear = NULL;
q.front = NULL;
}
void InsertLinkQuere(LinkQuere &lq,int data){
LinkNode *l;
InitLinkNode(l);
l->data = data;
lq.rear->next = l;
lq.rear = l;
}
void Noheadinsert(LinkQuere &lq,int data){
LinkNode *l;
InitLinkNode(l);
l->data = data;
if(lq.front == NULL){
lq.front = l;
lq.rear = l;
}else{
lq.rear->next = l;
lq.rear = l;
}
}
bool DeLinkQuere(LinkQuere &lq,int &x){
if(Empty(lq)){
return false;
}
LinkNode *p;
InitLinkNode(p);
p = lq.front->next;
x = p->data;
lq.front->next = p->next;
if(lq.rear == p){
lq.front = lq.rear;
}
free(p);
return true;
}
bool NoHeadDe(LinkQuere &lq,int &x){
LinkNode *l;
if(lq.front == NULL){
return false;
}
l = lq.front;
x = l->data;
lq.front = l->next;
if(lq.rear == l){
lq.front = NULL;
lq.rear = NULL;
}
free(l);
return true;
}
int main(){
LinkQuere q;
int x;
NoHeadInitLinkQuere(q);
Noheadinsert(q,1);
Noheadinsert(q,2);
NoHeadDe(q,x);
printf("%d\n",x);
NoHeadDe(q,x);
printf("%d\n",x);
}