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
                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
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With