数据结构:队列详解与实现
一、队列是什么?
1. 队列的定义
队列: 特殊的线性表,只允许在一端进行插入数据操作,在另一端进行删除数据操作的一种数据结构。 队列具有先进先出(FIFO, First In First Out)的原则。
2. 队尾&&队头
进行插入操作的一端称为队尾 进行删除操作的一端称为队头

3. 类比
就像我们在餐厅吃饭时,若饭店满人了,也许就会开始排队摇号,有 1 号、2 号、3 号…等等。 当有座位空出来时,就让序号前的人先去;当又有人来时,就在队尾加一个序列。 而队列也是如此,只允许在一端进行插入数据操作,在另一端进行删除数据操作的一种数据结构。 当要删除数据时,就让队头的数据(先来的数据)先删除;当要插入数据时,就在队尾插入数据。
二、队列的实现
那么,我们该如何来实现队列呢?
1. 用什么来实现?
想要实现队列,首先要想清楚要用什么实现队列。 之前,我们依次实现了顺序表、链表以及栈,他们都是用数组或链表来实现的。
队列也可以数组和链表的结构实现。 但是之前我们讲到了在数组上头删(出队列)很麻烦,后续的每一个元素都要往前挪一位。 如果使用数组的结构来实现队列,出队列就会在数组头上出数据,效率会很低。 综上所诉,使用链表的结构来实现队列更优一些。
2. 实现思路
由于队列与单链表类似,这里可以拿单链表的实现来做参考
-
第 1 步
与单链表同理,队列中的每一个节点有以下两成员:
指向下一个节点的指针节点中存储的数据
-
第 2 步 但是,我们需要记录下队列的总元素个数、头节点、尾节点这三个重要信息。 于是乎,我们可以单独创建一个结构体来包含这些信息,将队列的总元素个数、头节点、尾节点包含在内。
-
第 3 步 最后,就是一一实现我们队列的增、删、查、改等操作了。
3. 代码实现
本文以创建一个 int 类型的队列为例
(1)创建头文件&源文件
详见扫雷游戏等复杂程序的开发规范
如图:
创建了一个 Queue.h 头文件,用于存放用来放函数的声明和一些库函数的头文件。
创建了一个 Queue.c 源文件,用于用来放函数的定义 (队列的主体)。
还有一个 源文件,用于测试实现的队列的运行效果。


