问题描述
在
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