写一个会回绕的下一格
补全 nxt:给出当前下标和容量,返回下一格的下标(到末尾要绕回 0)。 补全后输出容量 4 时下标 3 的下一格。
循环入队:绕回去用前面的空格
补全 enqueue:新元素写在 (head + count) % 容量 那一格。 容量 4,先排 4 个人,叫走 1 个,再排进「北辰」。输出北辰被写在了哪一格。
循环出队:队头也要会绕
补全 dequeue:取走 head 那一格,然后让 head 往前挪一格(要会绕回 0)。 容量 4:排满 4 个 → 全叫走(head 正好绕完一圈)→ 再排 3 个 → 又叫走 2 个。 输出最后 head 停在哪一格。
只看 head 和 tail 为什么分不清
循环队列里只比较 head 和 tail,分不清满和空,因为【0】。
通常怎么解决这个歧义
解决满/空分不清,常见做法是【0】。
用计数法判满,条件写成什么
用「另存一个计数」的做法,满的条件是【0】。
满了没有
运行下面这段程序: class CQueue: def __init__(self, cap=4): self.data = [None] * cap self.head = 0 se
空了没有
运行下面这段程序: class CQueue: def __init__(self, cap=4): self.data = [None] * cap self.head = 0 se
写出判空和判满
补全 is_empty 和 is_full。 容量 4,排进 4 个人之后,输出它满了没有。
满了还往里排,得挡住
补全 enqueue:满了就不写入、返回 队列已满,没满才正常排进去并返回 已排上。 容量 4,排进 4 个人之后再排「北辰」,输出这次的结果。