为了账号安全,请及时绑定邮箱和手机立即绑定

队列遍历的代码还是有点不清楚

 for (int i = m_iHead; i < m_iQueueLen + m_iHead; i++)
{
    cout << m_pQueue[i % m_iQueueCapacity] << endl;
}

主要是m_iQueueLen + m_iHead和i % m_iQueueCapacity这两点 求大神讲解一下 本人小白

正在回答

1 回答

    假设一种情况,一个m_iQueueCapacity=4的队列,经过一系列入队和出对操作,此时m_iHead=3,而m_tail=2,此时在3,0,1位置都有元素。

    此时m_iQueueLen=3。如果是循环是for (int i = m_iHead; i < m_iQueueLen ; i++),循环次数m_iQueueLen-m_iHead=0,很明显循环不能执行。因为我们要循环的次数是m_iQueueLen,也就是3。所以循环次数应该是(m_iQueueLen + m_iHead)-m_iHead=3,也就是i < m_iQueueLen + m_iHead。

    至于i % m_iQueueCapacity,在假设中,我们首先访问3位置元素,接下要访问0位置元素了,而i++后此时m_pQueue[i]会访问4位置元素,而在 m_iQueueCapacity=4队列里只有0,1,2,3,这几个位置,所以我们要对i%m_iQueueCapacity取余数,使得我们访问的位置在m_pQueue[ ]的范围内,这个余数也是我们访问完3位置元素的下一个位置0。

    画一下图更清楚(这里是顺时针队列)。

    拙见,见笑。

0 回复 有任何疑惑可以回复我~
#1

ziorm 提问者

非常感谢!
2017-06-29 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

队列遍历的代码还是有点不清楚

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信