Ris*_*abh 6 algorithm queue data-structures
我正在阅读CLRS中的基本数据结构,在阅读Queue ADT时,我遇到了这个问题:
当Q.head = Q.tail + 1时,队列已满,如果我们尝试将一个元素入队,则队列溢出.
它总是如此吗?因为如果Q.tail等于Q.length,那么我们根据文本设置Q.tail = 1.因此,如果我们完全填充队列,那么Q.tail和Q.head将指向相同的位置(索引1),并且上述条件不成立.我在这里错过了什么?请指出我在哪里误解了文本.提前致谢.
这里属性Q.head索引或指向队列的头部.属性Q.tail索引新到达的元素将被插入队列的下一个位置.
正如在 CLRS 的同一段中提到的,
使用数组 Q[1...n] 实现最多包含 n-1 个元素的队列。
这意味着还剩下一个位置。用于检查队列是否已满。如果我们使用所有的数组位置,空队列条件和满队列条件将相同,即 Q.head=Q.tail。@siddstuff 已经解释了环绕功能,Q.head = Q.tail+1 表示只剩下一个空位,所以队列已满。
包裹队列的功能:
您需要了解数组中的位置1按循环顺序紧跟位置n的事实.例如

索引1处的元素g的前导是索引11处的f.尾部指针始终指向将插入新元素的下一个空位置,在插入操作中,在插入元素之前我们检查溢出条件,如果Q.tail +1 = Q .head,表示在头部位置到达尾部,表示没有空闲空间,表示队列已满.
注意:可以使用长度为n的数组创建(n-1)长度队列.
| 归档时间: |
|
| 查看次数: |
3200 次 |
| 最近记录: |