c++ - 循环队列显示
问题描述
在
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>, <empty_pos>, <empty_pos>] 或
- 循环方式,如 [1, 2, <empty_pos>, <empty_pos>, <empty_pos>, 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
推荐阅读
- c++ - “class CLASS_EXPORT IKLogin_Export”是什么意思
- php - 如何使用 CodeIgniter DB Forge 生成 createdAt 和 updatedAt 时间戳/日期时间?
- python - Python:ValueError:无法反序列化关键数据
- javascript - 引导轮播滑块活动类和下一个/上一个按钮不起作用
- javascript - buttonImage 中没有显示图像,这是我的日期选择器日历图标的 JS 小部件
- javascript - 这是 C# ASP.NET 通用处理程序冗余变量中的主要错误吗?
- python - 如何将列表(StringType)的元素相互添加
- javascript - 在 componentDidUpdate 中反应 Native navigation.goBack()
- jquery - 上一张/下一张幻灯片在当前“主轮播下方的导航预览”周围设置边框
- javascript - Jquery 找不到带“+”的类