队列遍历的代码还是有点不清楚
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这两点 求大神讲解一下 本人小白
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这两点 求大神讲解一下 本人小白
2017-06-27
假设一种情况,一个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。
画一下图更清楚(这里是顺时针队列)。
拙见,见笑。
举报