出队想不明白!请大佬指导一下。
第一处:参数为甚么要引用?(首地址?但elment是输入赋值,对他引用是哪里的首地址?)
第二处:element = m_pQueue[m_iHead],这样,对头给了element,m_pQueue[m_iHead]的值怎么就实现了删除吧?
第一处:参数为甚么要引用?(首地址?但elment是输入赋值,对他引用是哪里的首地址?)
第二处:element = m_pQueue[m_iHead],这样,对头给了element,m_pQueue[m_iHead]的值怎么就实现了删除吧?
2019-02-17
【1】首先解释一下参数为什么要用引用类型?
首先不用参数,直接申明函数如下:
bool DeQueue( ); // return bool 类型,判断出队列操作是否成功,但是不会返回被移出队列的数值
那么,传入引用类型的参数呢?
bool DeQueue(int& element);
除了return的返回值可以判断操作是否成功外,我们还可以拿到当前被移出队列的数
【2】element = m_pQueue[m_iHead],这样,对头给了element,m_pQueue[m_iHead]的值怎么就实现了删除吧?
element = m_pQueue[m_iHead] ;// 只是将m_pQueue数组中的m_iHead下标(这儿也是队列头)的数值给了element变量,这样引用类型的传参可以获取到当前被移出队列的数值。
m_iHead++; // 头后移动一位
m_iQueueLen--; // 长度减去一位
这两句才是真正实现了删除的功能。
第一处:传参采用引不引用效果一样,老师这里是p->Dequeue(XXX);把队首原先的值的赋值给传进来的参数element,只是赋值给它,(先把队首元素赋值给element,再队首后移一位,为什么老师要把原来队首的值进行赋值给别人,队首再后移,我个人觉得多余)后面并没有用到,其实也可以这样写:
bool Dequeue()//出队
{
if(QueueEmpty())
{
return false;
}
else
{
m_iHead++;
m_iHead=m_iHead%m_iQueueCapacity;
m_iQueueLen--;
return true;
}
}
第二处:通过m_iHead++;指针后移,相当于队首元素m_pQueue[m_iHead]后移一位,m_iQueueLen--;(长度也缩短一位),理解为队首后移一位(而不是删除了,那个位置就还是存在的,也符合环形队列的特点)
纯个人理解,用词不是很专业,有点啰嗦,希望帮你更好理解。
举报