队列链式存储主要有两个方面需要注意,一个是定义时应该定义两种结构体,一个是具体节点,一个是队列本身。具体节点用于存储具体数据data和指向下一个节点的指针 * next。而队列本身的结构体只会储存两个具体节点的指针,一个指向队头,一个指向队尾。 第二个需要注意的是,出队操作,对于只剩下一个元素的队列而言,需要队队尾指针操作,使其等于头指针,以达到队空的目的,而其他情况下只需要修改头结点指向后直接释放该节点即可。 完整代码
#include<bits\stdc++.h>
using namespace std;
#define ElementType int
typedef struct LinkNode{
ElementType data;
struct LinkNode *next;
}LinkNode;
typedef struct{
LinkNode *front,*rear;
}LinkQueue;
void IniQueue(LinkQueue &Q){
Q.front=Q.rear=(LinkNode *)malloc(sizeof(LinkNode));
Q.front=NULL;
}
bool IsEmpty(LinkQueue &Q){
if(Q.front==Q.rear){
printf("Queue is Empty!");
return true;
}
return false;
}
void EnQueue(LinkQueue &Q,ElementType x){
LinkNode *p=(LinkNode *)malloc(sizeof(LinkNode));
p->data = x;
p->next=NULL;
Q.rear->next=p;
Q.rear=p;
}
bool DeQueue(LinkQueue &Q,ElementType &x){
if(IsEmpty(Q)){
return false;
}else{
LinkNode *p = Q.front->next;
x = p->data;
if(p==Q.rear){
Q.rear = Q.front;
}
free(p);
return true;
}
}
本文由博客一文多发平台 OpenWrite 发布!