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

  • 相关阅读:
    (三)通用定时器的定时功能(不使用中断)
    (二)STM32中中断优先级理解
    (一)通用定时器的相关介绍
    Ambari client
    Ambari的资源池管理
    Sentry的授权模型
    关于yum
    Ambari-HDP
    Ambari的API调用
    CentOS上面搭建SVN服务器
  • 原文地址:https://www.cnblogs.com/vigorz/p/10499160.html
Copyright © 2011-2022 走看看