This commit is contained in:
krahets
2023-08-31 02:32:20 +08:00
parent a47a974a6a
commit e052cb1d3b
5 changed files with 13 additions and 17 deletions

View File

@ -378,12 +378,12 @@
由于数组删除首元素的时间复杂度为 $O(n)$ ,这会导致出队操作效率较低。然而,我们可以采用以下巧妙方法来避免这个问题。
我们可以使用一个变量 `front` 指向队首元素的索引,并维护一个变量 `queSize` 用于记录队列长度。定义 `rear = front + queSize` ,这个公式计算出的 `rear` 指向队尾元素之后的下一个位置。
我们可以使用一个变量 `front` 指向队首元素的索引,并维护一个变量 `size` 用于记录队列长度。定义 `rear = front + size` ,这个公式计算出的 `rear` 指向队尾元素之后的下一个位置。
基于此设计,**数组中包含元素的有效区间为 `[front, rear - 1]`**,各种操作的实现方法如下图所示。
- 入队操作:将输入元素赋值给 `rear` 索引处,并将 `queSize` 增加 1 。
- 出队操作:只需将 `front` 增加 1 ,并将 `queSize` 减少 1 。
- 入队操作:将输入元素赋值给 `rear` 索引处,并将 `size` 增加 1 。
- 出队操作:只需将 `front` 增加 1 ,并将 `size` 减少 1 。
可以看到,入队和出队操作都只需进行一次操作,时间复杂度均为 $O(1)$ 。