循环队列显示



在中

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]); 
} 

为什么我不能从前面到后面打印I,而不是把它分成两行?

您讨论过的实现。。。队列元素可以采用两种方式:

  1. 线性方式,如[4,3,1,2,<empty_pos>,<
  2. 循环方式,如[1,2,<empty_pos>,<

在后一种情况下,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

最新更新