队列的结构特点及操作
队列是限定只能在表的一端进行插入,在表的另一端进行删除的线性表。表中允许插入的一端称为队尾,允许删除的一端称为队头。总结下来就是只能在队尾插入,在队头删除。也就是在队尾进去之后从队头出去。在队尾进行插入的操作称之为入队列,在队头进行删除的操作叫做出队列。队列也有两种存储方式,分别为链队列和循环队列。
链队列
用链表表示的队列简称为链队列。一个链队列需要两个分别指向队头和队尾的指针(分别叫头指针和尾指针)。为了操作方便,为链队列添加一个头结点,并约定头指针始终指向这个头结点,尾指针指向真正的队尾元素结点。一个空的链队列只含有一个头结点并且队列的头指针和尾指针都指向这个头结点。在出队列(即删除队头数据元素时),如果此时只有一个数据结点,则直接删除会丢失尾指针。所以要提前将尾指针指向头指针。
#include<iostream>
#include<string>
using namespace std;
//定义链队列的结点
typedef struct LNode {
char data;
struct LNode *next;
}LNode;
//定义链队列
typedef struct
{
LNode *front; //定义头指针
LNode *rear; //定义尾指针
}LinkQueue;
//构建链队列 链队列的初始化
void Init_LinkQueue(LinkQueue &Q)
{
Q.front = Q.rear = new LNode; //为头指针和尾指针分配同一个新结点
Q.rear->next = NULL; //尾结点的next指针为空
}
//销毁链队列
void Destroy_LinkQueue(LinkQueue &Q)
{
while (Q.front)
{
Q.rear = Q.front; //此时尾指针不再指向队尾 而是单纯作为一个辅助指针
Q.front = Q.front