目录
队列的链式存储结构
typedef struct LinkNode{ //链式队列节点
ElemType data;
struct LinkNode *next;
}LinkNode;
typedef struct{
LinkNode *front,*rear; //队列的队头和队尾指针
//这里也可以定义一个int类型的length变量,用来记录队列的长度
}LinkQueue;
初始化
带头结点初始化
void InitQueue (LinkQueue &Q){
Q.front=Q.rear=(LinkNode*)malloc(sizeof(LinkNode));//初始化时frontherear都指向头结点
Q.front->next=NULL;//代表初始化了一个空队列
}
不带头结点初始化
void InitQueue(LinkQueue &Q){
Q.front=NULL;
Q.rear=NULL;
}
判断队列是否为空
带头结点判空
bool IsEmpty(LinkQueue){
if (Q.front==Q.rear)//也可写为if(Q.front->next=NULL)
return ture;
else
reture false;
}
不带头结点判空
bool IsEmpty(LinkQueue Q){
if(Q.front==NULL)//也可写为 if(Q.rear==NULL)
return ture;
else
return false;
}
入队操作
带头结点入队
void EnQueue(LinkQueue &Q, ElemType x){
Link *s = (LinkNode *)malloc(sizeof(LinkNode));
s->data=x;//把x的值赋给s
s->next=NULL;//队尾的next指向空
Q.rear->next=s;将s结点插入到队尾之前时队尾指针rear指向的结点(即老的队尾结点)的next指向s
Q.rear=s;队尾指针指向s;
}
不带头结点入队
void EnQueue(LinkQueue &Q, ElemType x){
Link *s = (LinkNode *)malloc(sizeof(LinkNode));
s->data=x;//把x的值赋给s
s->next=NULL;//队尾的next指向空
if(Q.front==NULL){
Q.front=s;
Q.rear=s;//不带头结点时,对于空队列的插入操作需要特殊处理,由此,设置头结点的好处得到体现
}else{
Q.rear->next=s;
Q,rear=s;
}