循环队列显示

问题描述

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

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

解决方法

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

  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

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...