出队想不明白!请大佬指导一下。

来源:4-3 环形队列检测

慕运维3094527

2019-02-17 00:54

https://img4.mukewang.com/5c683e8700013ebc07410518.jpg


第一处:参数为甚么要引用?(首地址?但elment是输入赋值,对他引用是哪里的首地址?)

第二处:element = m_pQueue[m_iHead],这样,对头给了element,m_pQueue[m_iHead]的值怎么就实现了删除吧?

写回答 关注

3回答

  • 精慕门6399046
    2019-03-11 22:33:47

    【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--; // 长度减去一位

    这两句才是真正实现了删除的功能。

  • 慕运维3094527
    2019-02-17 18:25:12

    多谢你

    qq_超越_...

    我觉得这里用引用不是多余的,如果你在外部需要用到出队的那个值,就应该传引用或者指针来保存这个出队的值

    2019-02-25 16:18:22

    共 1 条回复 >

  • 不吃辣的李叔叔
    2019-02-17 16:10:07

    第一处:传参采用引不引用效果一样,老师这里是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--;(长度也缩短一位),理解为队首后移一位(而不是删除了,那个位置就还是存在的,也符合环形队列的特点)


    纯个人理解,用词不是很专业,有点啰嗦,希望帮你更好理解。

数据结构探险—队列篇

与现实最为贴近的数据结构-队列,带大家进入数据结构的美妙世界

110035 学习 · 170 问题

查看课程

相似问题