循环队列理论

时间:2015-04-08 04:27:23

标签: language-concepts

我需要帮助理解循环队列概念。我在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"?如果有人可以更详细地说明这个概念,我会很感激。

谢谢!

2 个答案:

答案 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]。你可以在这里看到,虽然有一个元素的位置,但除非你将所有元素向上移动,否则不能插入。这就是使用循环队列的原因。它不需要元素转换。

但是,如果您的队列一直在溢出,则队列的整个目的都将丢失。我建议使用链表(线性或圆形),因为它动态添加和删除元素。

请记住,当内存有限制时,实际上会使用队列。例如。输入/输出流是一个队列。当内存充足且不喜欢数据压缩时,会使用链接列表。