没有OO概念的C ++双向链接列表插入到排序列表中

时间:2017-05-21 05:07:37

标签: c++ sorting

我鼓励在没有oo概念的情况下使用C ++。我一直在研究名为" InsertIntoSortedList"的函数。使用双向链表。但是,它允许我插入第一个节点。对于第二个节点及之后,它将从函数跳出。Here is the Sample Output。 代码在简单程序上工作正常,所以我试图在更复杂的程序上使用它。我将把这两个程序的编码放在下面。

void InsertIntoSortedList(){

newnode = new carlist;
newnode->next = NULL;
newnode->back = NULL;
    if (head == NULL) {
        cout << "List is empty, Please insert Data: " << endl;
        cout << "ID: ";
        cin >> newnode->id;
        cout << "Description: ";
        cin >> newnode->description;
        cout << "Price: ";
        cin >> newnode->price;
        cout << "Stock: ";
        cin >> newnode->stock;
        head = tail = newnode;

    }
    else if (newnode->price < head->price) {

        InsertAtBeginning();
    }
    else {

        temp = head;
        while (temp != NULL) {
            if (newnode->price > temp->price) {
                previous = temp;
            }
            else {
                break;
            }
            temp = temp->next;
        }
        if (temp == NULL) {
            InsertAtEnd();
        }
        else {
            newnode->next = previous->next;
            previous->next->back = newnode;
            previous->next = newnode;
            newnode->back = previous;
        }
    }

它在这个程序上运行良好

void insertIntoSortedList(int eid) {
newnode = new employee;
newnode->employeeID = eid;
newnode->next = NULL;
newnode->back = NULL;
if (head == NULL) {
    head = tail = newnode;
}
else if (eid < head->employeeID) {

    insertatBeginning(eid);
}
else {
    temp = head;
    while (temp != NULL) {
        if (eid > temp->employeeID) {
            previous = temp;
        }
        else {
            break;
        }
        temp = temp->next;
    }
    if (temp == NULL) {
        insertAtEnd(eid);
    }
    else {
        newnode->next = previous->next;
        previous->next->back = newnode;
        previous->next = newnode;
        newnode->back = previous;
    }
}

有人可以向我解释一下这个问题是什么,为什么它不起作用?我甚至试图绘制双重链表,我认为它应该工作得很好。这件事一直困扰着我一整夜。谢谢你提前。

1 个答案:

答案 0 :(得分:1)

一些问题:

1)函数获取任何数据的唯一位置是head为null。从if语句中取出输入代码,然后从那里进行调试。

2)要获取多个节点,则需要某种循环。最好将该循环以及刚删除的输入代码放入主函数中:

int main() {

    newnode = new carlist;

    while (newnode != nullptr)
    {

        newnode->next = nullptr;
        newnode->back = nullptr;
        cout << " Please insert Data: " << endl;

        cout << "ID: ";
        cin >> newnode->id;
        cout << "Description: ";
        cin >> newnode->description;
        cout << "Price: ";
        cin >> newnode->price;
        cout << "Stock: ";
        cin >> newnode->stock;

        InsertIntoSortedList(newnode);

        cout << "To exit write \"exit\", or any other key to continue : ");
        string exitnow;
        cin >> exit;
        if (exitnow == "exit")
            newnode = nullptr;
        else
            newnode = new carlist;

    }



      return 0;
}

对于我们没有看到的其余代码,最好使用调试器并尝试了解每个控制路径的作用。