在中
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,而不是把它分成两行?
您讨论过的实现。。。队列元素可以采用两种方式:
- 线性方式,如[4,3,1,2,<empty_pos>,<
- 循环方式,如[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