Очередь добавления более одной записи - PullRequest
0 голосов
/ 22 октября 2010

Я продолжаю добавлять первую запись 4 раза, а не один раз ... когда я добавляю свою первую запись в очередь, она добавляет ее 4 раза ... Я думал, что это может быть проблемой ... но похоже, что это не так "т.Я не могу найти, где проблема ..

Я также создал функцию печати для узлов, и она показывает, что в очереди 4 одинаковых записи, так что это не проблема печати.И это не похоже, что это в функции чтения.Может дело в логике функции добавления ??Все еще работаем над этим ..

Это вывод: 3X ^ 2 + 3X ^ 2 + 3X ^ 2 + 3X ^ 2 + 1 , но это должно быть 3X ^ 2+ 1

Это моя функция добавления:

//Append(Add) item to back of queue.
Error_code Extended_queue::append(const Queue_entry &item) {
    Node<Queue_entry> *new_rear = new Node<Queue_entry>(item);

    if(rear == nullptr){
        front = new_rear; // I also tried rear = new_rear; front = rear;            rear = new_rear;        
    }
    else {
        rear->next = new_rear;
        rear = new_rear;
    }

    return success;
}

А вот код, который печатает вывод:

This is the node code declaration:

#ifndef NODE_H
#define NODE_H

enum Error_code{success,underflow,overflow}; // Used in node containing classes

template <class Node_entry> // Template to allow for more varience

// Part of a linked structure
struct __declspec(align(1)) Node{
    Node_entry entry; // Data contained in the node
    Node *next;   //Pointer to next node
    //constructors
    Node(); // Creates empty node
    Node(Node_entry item, Node *add_on = nullptr); // Creates node with specified data and pointer to next node
};

/* Post: The Node is initialized to contain nothing, and to have a null pointer.*/
template <class Node_entry>
Node<Node_entry>::Node()
{
    entry = nullptr;
    next = nullptr;
}

/* Post: The Node is initialized to contain item, and to point to add_on.*/
template <class Node_entry>
Node<Node_entry>::Node(Node_entry item, Node *add_on)
{
    entry = item;
    next = add_on;
}


#endif

1 Ответ

0 голосов
/ 29 октября 2010

Похоже, у конструктора копирования была плохая логика. После того, как я исправил этот конструктор, водитель возвратил первый член как передний и задний вход. Поэтому мне пришлось исправить и перегруженный оператор =.

Новый код (для конструктора копирования):

Extended_queue::Extended_queue(const Extended_queue &original){
    Node<Queue_entry> *temp_node, *original_node = original.front;
    if(original.empty()){ //original queue is empty, set new to NULL        
        front = nullptr;
        rear = nullptr;
    }
    else
    {
        front = temp_node = new Node<Queue_entry>(original_node->entry,nullptr);
        while(original_node->next != nullptr)
        {
            original_node = original_node->next;
            //needed to change next and still incriment
            temp_node->next = new Node<Queue_entry>(original_node->entry, nullptr);
            temp_node = temp_node->next;
            //rear->next = temp_node;           
            //rear = temp_node;

        }
        rear = temp_node->next;
    }
}
...