队列

什么是队列

队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和 一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。

队列概念

队尾

队列中指定了用来插入数据的一端。

队头

队列中指定了用来删除数据的一端。

入队

数据的插入动作。

出队

数据的删除动作。

队列特点

  1. 只允许在表的前端 front 进行删除操作,而在表的后端 rear 进行插入操作;
  2. 进行插入操作的端称为队尾,进行删除操作的端称为队头;
  3. 队列中没有元素时,称为空队列。

图解队列

队列的实现可以分为链式队列和静态队列,链式队列使用链表来实现,具体结构如下:

06_队列详解.png

静态队列使用数组来实现,具体结构如下:

07_队列详解.png

队列结构

队列的结构定义如下:

typedef struct Node { int data; //队列每个结点的数据 struct node *pNext; //当前结点的下一个结点的地址 }NODE, *PNODE; struct Queue { PNODE pHead; //头指针 PNODE pTail; //尾指针 };

我们在定义队列结构之前,首先定义了一个 Node 结点,其结构是一个链表的结构,保存了结点元素的值和下一个元素的指针。

队列结构的定义其实就是一个包含队列头结点 pHead 和队列尾结点 pTail 的元素的结构。