我需要帮助理解循环队列概念。我在stackoverflow上读了几篇文章,没有一个答案回答我曾经遇到过的心理障碍。
例如说我在循环队列中有8个单元格。
Head Tail
empty|U | I | S | K | M | empty | empty
说我插入两个字符F& P,这将使队列变为。
Tail Head
empty|U | I | S | K | M | F | P
现在让我们感兴趣,如果删除3个条目会怎样。
Tail Head
empty| empty | empty | empty | K | M | F | P
很明显,我的头部和尾部现在已经改变,我有3个新的可用位置。但是为了好的措施,我想再增加两个条目。
Tail Head
A| B | empty | empty | K | M | F | P
这是我的问题
我实现了这个吗?大声笑如果完全填满队列,如尾部和头部处于同一位置,即" K"?如果有人可以更详细地说明这个概念,我会很感激。
谢谢!
答案 0 :(得分:0)
在我看来,你说得对。您可以通过显示头部和尾部的整数值来使图表更清晰
循环队列有很多解释和示例。我发现没有比我在前一段时间提供的答案中发布的答案更好的解释here。它解释了如果队列为空,有空间或已满,头和尾如何显示。
在图表的最后一行,队列可以容纳2个以上的项目。添加第三个会使tail = head,并且会覆盖你不想做的K.
当tail = head时,队列为空。测试完整队列稍微复杂一些。请参阅链接以获取完整说明。
答案 1 :(得分:0)
我实现了这个吗?
是的,确实是你做过。
如果在尾部和头部完全填满队列时会发生什么情况,即“K”处于同一位置?
K将被覆盖。可以通过条件TAIL == HEAD来检查该溢出条件。
如果有人能够更详细地说明这个概念,我会很感激。
您必须了解,在传统的线性FIFO队列中,只要达到最大尺寸,就需要连续移动元素。例如,如果队列的大小为5,则在5(数字1-5)连续插入然后删除(数字1被删除)之后,队列变为[null,2,3,4,5]。你可以在这里看到,虽然有一个元素的位置,但除非你将所有元素向上移动,否则不能插入。这就是使用循环队列的原因。它不需要元素转换。
但是,如果您的队列一直在溢出,则队列的整个目的都将丢失。我建议使用链表(线性或圆形),因为它动态添加和删除元素。
请记住,当内存有限制时,实际上会使用队列。例如。输入/输出流是一个队列。当内存充足且不喜欢数据压缩时,会使用链接列表。