[数据结构]:循环队列的尾指针
在循环队列的实现中,尾指针指向队列中最后一个元素之后的位置1:
|1|2|3|4|5| | |
^ ^
front tail
为什么?
我想我可以实现循环队列,尾部指针指向最后一个元素,而不是最后一个元素。
In the implementation of Cyclic Queue, the tail pointer points to the position 1 past the last element in the queue:
|1|2|3|4|5| | |
^ ^
front tail
why?
I think I can implement the Cyclic Queue with the tail pointer pointing to the very last element, not 1 past the last.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您确实可以这样实现。让尾部指针指向最后一个元素之后的位置 1 有一定的对称性:
front
指向第一个(最旧的)使用的元素 - 下一个要读取的元素tail
> 指向第一个(最旧的)未使用的元素 - 要写入的下一个元素在任何一种情况下,您都需要做更多的事情来区分完整的循环队列和空的循环队列。 有关循环缓冲区的维基百科文章中讨论了一些替代方案(包括按照您的方式进行操作)。
You can, indeed implement it that way. There's a certain symmetry to having the tail pointer point to the position 1 past the last element:
front
points to the first (oldest) used element - the next element to be readtail
points to the first (oldest) unused element - the next element to be writtenIn either case, you need to do a bit more to distinguish between a full cyclic queue and an empty one. Some of the alternatives (including doing things your way) are discussed in the Wikipedia article on circular buffers.
看起来这就是您使用的确定队列是空还是满的实现方式。
http://en.wikipedia.org/wiki/Circular_buffer#Full_.2F_Empty_Buffer_Distinction
It looks like that is the implementation your using's way of determining if the queue is empty or full.
http://en.wikipedia.org/wiki/Circular_buffer#Full_.2F_Empty_Buffer_Distinction