循环队列显示

Circular queue Display

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, , , ] 或
  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