循环队列显示
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 从前到后,而不是分成两行?
您所讨论的实施...因为队列元素可以采用两种方式:
- 线性方式如 [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
在
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,
, , ] 或 - 循环方式如 [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