#include<iostream>
#include<stdlib.h>
using namespace std;
typedef int DataType;
typedef struct node{ //队列的链式结点
DataType data;
struct node *next;
}LinkNode;
typedef struct{ //队列的队头和队尾指针
LinkNode *front,*rear; //front永远指向头结点,rear永远指向队尾结点
}LinkQueue;
/*
链式队列不存在"溢出"现象
链式队列初始状态 :Q.front=Q.rear=(LinkNode*)malloc(sizeof(LinkNode));
链式队列为空:Q.front==Q.rear;
*/
// 带头结点的链式队列
//初始化链式队列
void InitQueue(LinkQueue &Q){
Q.front=Q.rear=(LinkNode*)malloc(sizeof(LinkNode)); //创建一个头结点
Q.front->next=NULL;
}
//队列判空
bool isEmpty(LinkQueue Q){
if(Q.front==Q.rear){
return true;
}else{
return false;
}
}
//入队
void EnQueue(LinkQueue &Q,DataType x){
LinkNode *s=(LinkNode*)malloc(sizeof(LinkNode)); //创建新节点
s->data=x;s->next=NULL; //队尾添加节点
Q.rear->next=s;
Q.rear=s;
}
//出队
bool DeQueue(LinkQueue &Q,DataType &x){
if(Q.front==Q.rear){ //队列为空
return false;
}
LinkNode *s=Q.front->next; //删除队头结点
x=s->data;
Q.front->next=s->next;
if(s==Q.rear){ //只有一个数据节点时
Q.rear=Q.front;
}
free(s);
return true;
}
int main(int argc,char** argv){
LinkQueue Q;
InitQueue(Q);
EnQueue(Q,100);
int x;
DeQueue(Q,x);
cout<<x<<endl;
if(isEmpty(Q)){
cout<<"Kong1"<<endl;
}
return 0;
}