This commit is contained in:
krahets
2023-08-21 19:32:37 +08:00
parent 02ac0aa9fe
commit fb9ace3a95
62 changed files with 291 additions and 254 deletions

View File

@@ -6,7 +6,7 @@ comments: true
「队列 queue」是一种遵循先入先出规则的线性数据结构。顾名思义队列模拟了排队现象即新来的人不断加入队列的尾部而位于队列头部的人逐个离开。
我们队列的头部称为“队首”,尾部称为“队尾”,将元素加入队尾的操作称为“入队”,删除队首元素的操作称为“出队”。
如下图所示,我们队列的头部称为“队首”,尾部称为“队尾”,将元素加入队尾的操作称为“入队”,删除队首元素的操作称为“出队”。
![队列的先入先出规则](queue.assets/queue_operations.png)
@@ -299,7 +299,7 @@ comments: true
### 1.   基于链表的实现
对于链表实现,我们可以将链表的“头节点”和“尾节点”分别视为“队首”和“队尾”,规定队尾仅可添加节点,队首仅可删除节点。
如下图所示,我们可以将链表的“头节点”和“尾节点”分别视为“队首”和“队尾”,规定队尾仅可添加节点,队首仅可删除节点。
=== "LinkedListQueue"
![基于链表实现队列的入队出队操作](queue.assets/linkedlist_queue.png)
@@ -312,7 +312,7 @@ comments: true
<p align="center"> 图:基于链表实现队列的入队出队操作 </p>
以下是用链表实现队列的示例代码。
以下是用链表实现队列的代码。
=== "Java"
@@ -1188,10 +1188,10 @@ comments: true
我们可以使用一个变量 `front` 指向队首元素的索引,并维护一个变量 `queSize` 用于记录队列长度。定义 `rear = front + queSize` ,这个公式计算出的 `rear` 指向队尾元素之后的下一个位置。
基于此设计,**数组中包含元素的有效区间为 [front, rear - 1]**进而:
基于此设计,**数组中包含元素的有效区间为 `[front, rear - 1]`**各种操作的实现方法如下图所示。
- 对于入队操作将输入元素赋值给 `rear` 索引处,并将 `queSize` 增加 1 。
- 对于出队操作只需将 `front` 增加 1 ,并将 `queSize` 减少 1 。
- 入队操作将输入元素赋值给 `rear` 索引处,并将 `queSize` 增加 1 。
- 出队操作只需将 `front` 增加 1 ,并将 `queSize` 减少 1 。
可以看到,入队和出队操作都只需进行一次操作,时间复杂度均为 $O(1)$ 。