如何解决循环队列显示
在
void Queue::displayQueue()
{
if (front == -1)
{
printf("\nQueue is Empty");
return;
}
printf("\nElements in Circular Queue are: ");
if (rear >= front)
{
for (int i = front; i <= rear; i++)
printf("%d ",arr[i]);
}
else // Why do I need two loops in this else?
{
for (int i = front; i < size; i++)
printf("%d ",arr[i]);
for (int i = 0; i <= rear; i++)
printf("%d ",arr[i]);
}
为什么我不能从前到后打印我,而不是将它分成两行?
解决方法
您讨论过的实现...在此队列元素中可以采用两种方式:
- 线性方式,例如[4、3、1、2,
, , ]或 - 圆形方式,例如[1、2,
, , ,4、3]
在后一种情况下,4
是队列的最前面,2
是队列的最后一个元素。因此,您可能会明白为什么前面的索引大于后面的索引...
此外,如果您编写如下代码,则只需一个循环即可完成操作:
// no need to check with if/else,remove the if/else part and
// just do the following
for (int i = front; i != rear; i = ((i + 1) % size)) {
printf("%d ",arr[i]); // print elem
}
if(size > 0) printf("%d ",arr[i]); // don't forget it,it prints the rear elem
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。