gpt4 book ai didi

c++ - 以排序方式插入节点时遇到问题

转载 作者:行者123 更新时间:2023-11-28 04:15:02 26 4
gpt4 key购买 nike

我有一个链表,我必须将对象插入其中,基于对象的字段之一,我必须以正确的顺序将节点插入链表。

在使用数组和 vector 时,我的排序工作得很好,但我只是在链表的插入方面遇到了麻烦。我的 getLink() 调用用于获取我的链接的函数,即 = next。

void sortedInsert(DomNodePtr& head, string fName, string lName, float CGPA, int rScore,string prov){
DomNodePtr here = head;
DomNodePtr tempPtr;
tempPtr = new DomNode(fName, lName, CGPA, rScore, prov, head);

while (here->getCumGPA() > CGPA && here->getLink() != NULL){
here = here->getLink();

}
if (here->getCumGPA() < CGPA){
tempPtr->setLink(here->getLink());
here->setLink(tempPtr);
}
else if (here->getCumGPA() > CGPA){
here = tempPtr;
}
}

基本上,我希望累积 GPA 最高的学生的排序高于 CGPA 较低的学生。我知道我的部分问题是我没有插入 CGPA 较低的学生,但我正在为这部分而苦苦挣扎。当我打印链接列表时,它也输出了大约 10 个学生,而实际上他们大约有 100 个,而且他们的顺序不正确。

最佳答案

将新学生插入列表时有以下三种情况:

  • 新元素的 CGPA 小于列表中所有元素的 CPGA 值。在这种情况下,学生必须附加到列表的末尾。
  • 学生的 CPGA 大于列表的所有元素:必须将新元素添加到列表的头部
  • 学生在两个现有元素之间有一个 CPGA。这里必须在那些 to 元素之间插入新元素。因此,您必须跟踪 CPGA 大于新元素 CPGA 的前一个元素。

    void sortedInsert(DomNodePtr& head, string fName, string lName, float CGPA, int rScore,string prov){
    DomNodePtr here = head;
    DomNodePtr tempPtr;
    tempPtr = new DomNode(fName, lName, CGPA, rScore, prov, head);

    DomNodePtr previous = NULL; // keeping track of the previous element

    while (here->getCumGPA() >= CGPA && here->getLink() != NULL){
    previous = here;
    here = here->getLink();
    }
    if (here->getLink() == NULL){
    // Insert new student at the end of the list
    // If CPGA is larger for all students in the list

    here->setLink(tempPtr);
    }
    else if (previous = NULL) {
    // The new student has the highest CGPA and
    // has to be added at the head of the list
    tempPtr->setLink(here);
    }
    else{
    // Insert the student between the current
    // and the previous elements of the list

    previous->setLink(tempPtr);
    tempPtr->setLink(here);
    }
    }

关于c++ - 以排序方式插入节点时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56863223/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com