#include<stdio.h>
#include<stdlib.h>
#define MaxSize 10
typedef struct LinkNode{
int data;
struct LinkNode *next;
}LinkNode;
typedef struct{
LinkNode *front,*rear;
int size;
}LinkQueue;
void InitQueue(LinkQueue &Q){
Q.front = Q.rear = NULL;
Q.size = 0;
}
bool QueueEmpty(LinkQueue Q){
if(Q.front == NULL){//0 == Q.size || Q.front == NULL || Q.rear == NULL **Q.front == Q.rear is error**
return true;
}else{
return false;
}
}
bool EnQueue(LinkQueue &Q,int e){
LinkNode * s = (LinkNode *)malloc(sizeof(LinkNode));
s->data = e;
s->next = NULL;
if(QueueEmpty(Q)){
Q.front = s;
Q.rear = s;
}else{
Q.rear->next = s;
Q.rear = s;
}
++Q.size;
return true;
}
bool DeQueue(LinkQueue &Q,int &e){
if(QueueEmpty(Q)){
return false;
}
LinkNode *p = Q.front;
e = p->data;
Q.front = p->next;
if(Q.rear == p){
Q.rear = Q.front = NULL;
}
free(p);
--Q.size;
return true;
}
bool GetHead(LinkQueue Q,int &e){
if(QueueEmpty(Q)){
return false;
}
e = Q.front->data;
return true;
}
void PrintStack(LinkQueue Q){
LinkNode *p = Q.front;
for(int i = 0; i < Q.size; ++i){
printf("\t%d",p->data);//0
p = p->next;
}
printf("\n");
}
int main(){
LinkQueue Q;
InitQueue(Q);
for(int i = 0; i < 10; i++){
EnQueue(Q,i);
}
PrintStack(Q);//0123456789
int x;
if(DeQueue(Q,x)){
printf("\t%d",x);//0
}
printf("\n");
EnQueue(Q,1);
while(Q.size){
int x;
if(DeQueue(Q,x)){
printf("\t%d",x);//1234567891
}
}
printf("\n");
}