#include<stdio.h>
#include<stdlib.h>
//定义
typedef struct LinkNode{
int data;
struct LinkNode *next;
}LinkNode;
typedef struct{
LinkNode *rear,*front;
}LinkQueue;
//初始化——带头结点
void InitQueue(LinkQueue &Q){
Q.front=Q.rear=(LinkNode *)malloc(sizeof(LinkNode));
Q.front->next=NULL;
}
//初始化——不带头结点
void InitQueue_(LinkQueue &Q){
Q.front=NULL;
Q.rear=NULL;
}
//入队——带头结点
bool EnQueue(LinkQueue &Q,int x){
LinkNode *s=(LinkNode *)malloc(sizeof(LinkNode)); //给新节点分配内存
s->data=x;
s->next=NULL;
Q.rear->next=s; //新节点插入到尾指针后面
Q.rear=s; //尾指针指向新插入的结点
return true;
}
//入队——不带头结点
bool EnQueue_(LinkQueue &Q,int x){
LinkNode *s=(LinkNode *)malloc(sizeof(LinkNode)); //给新节点分配内存
s->data=x;
s->next=NULL;
if(Q.front==NULL){
Q.front=s;
Q.rear=s;
}
else{
Q.rear->next=s;
Q.rear=s;
}
return true;
}
//出队——带头结点
bool DeQueue(LinkQueue &Q,int &x){
if(Q.front==Q.rear) //首先判断队空
return false;
LinkNode *p=Q.front->next;
x=p->data;
Q.front->next=p->next;
if(Q.rear==p){ //这是最后一个结点
Q.rear=Q.front;
}
free(p);
return true;
}
//出队——不带头结点
bool DeQueue_(LinkQueue &Q,int &x){
if(Q.front==NULL) //首先判断队空
return false;
LinkNode *p=Q.front; //不带头结点时头指针指向队头元素
x=p->data;
Q.front=p->next;
if(Q.rear==p){ //这是最后一个结点
Q.rear=NULL;
Q.front=NULL;
}
free(p);
return true;
}
//队列的链式存储一般不会出现队满的情况,除非内存不足
int main(){
}