代码之家  ›  专栏  ›  技术社区  ›  knownasilya

附加多个条目的队列

  •  0
  • knownasilya  · 技术社区  · 14 年前

    我不断地得到第一个条目附加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 回复  |  直到 14 年前
        1
  •  0
  •   knownasilya    14 年前

    看起来复制构造函数的逻辑不好。在我确定了这个构造器之后,司机只返回第一个术语作为前后进入。所以我也必须修复过载的=操作符。

    新代码(用于复制构造函数):

    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;
        }
    }