zoukankan      html  css  js  c++  java
  • How does this enqueue function work?

    Question:

    I'm having trouble understanding this line:

    rear->next = temp;

    in this queue function:

     void Queue::enqueue(int data) {
    
        Node *temp = new Node();    // make a temporary node
        temp->info = data;          // assign passed in data to it
        temp->next = 0;             // make it point to null
    
        if(front == 0)              // if there is no front node
            front = temp;           // make this a front node
    
        else                        // else, if there is already a front node
            rear->next = temp;      // make this rear's next pointer???? why?
    
        rear = temp;                // in any case make this a rear node
    
    }

    Wouldn't it make more sense to do it like this?

        else                    // else, if there is already a front node
            temp->next = rear;  // make temp point to REAR; not other way around
    
        rear = temp;                // make temp a new rear node
    
    Answer:
    

    The rear points to the last element. What is wanted is to place temp after the current rear, and then move rear to point to the newly placed last element. So, if we were wanting to enqueue 4 to the queue (1, 2, 3), we want:

    1 -> 2 -> 3 -> 4
    |              |
    front          rear

    Your solution lets temp cut in front of the current rear, and then moves rear to the cut position. It doesn't even cut properly, since the item before the rear is still pointing to the original rear. The rear isn't pointed to the last item anymore, and your queue would thus be in an inconsistent state.

    1 -> 2 -> 3
    |      4 -^
    |      |
    front  rear

  • 相关阅读:
    hypermesh生成MNF柔性体
    手机拍照参数的调整
    周金涛生前20篇雄文精华,一文尽览
    什么是DA控制
    win7系统程序未响应怎么办
    如何在老惠普电脑上安装windows xp系统
    linux的学习在runoob.com网站
    K:红黑树
    K:图的存储结构
    Q:链表的倒数第K个元素
  • 原文地址:https://www.cnblogs.com/vigorz/p/10499160.html
Copyright © 2011-2022 走看看