首页 > 解决方案 > 打印排序列表c ++

问题描述

我在打印排序列表时遇到问题。每个人都有自己的印记。该列表按降序标记排序,但是当我尝试打印它时,只有标记的位置发生了变化,但名称仍留在原处,就像排序前一样。我怎样才能使它正确打印?

这是排序方法:

void DynList::Sorting_name()
{
    list *R = P, *R1;
    string k;
    while (R != NULL) {
        R1 = R->next;
        while (R1 != NULL) {
            if (R1->name < R->name) {
                k = R->name;
                R->name = R1->name;
                R1->name = k;
            }
            R1 = R1->next;
        }
        R = R->next;
    }
}

这是输出方法

void DynList::Output()
{
    list* D = P;
    int sk = 0;
    while (D) {
        sk++;
        cout << sk << ". " << D->name << " " << D->surname << " " << D->sk << endl;
        D = D->next;
    }
    cout << endl;
}

标签: c++

解决方案


问题出在以下代码中:

        if (R1->name < R->name) {
            k = R->name;
            R->name = R1->name;
            R1->name = k;
        }

在这里,您应该交换节点或至少交换节点的全部内容。如果要交换节点,则还必须存储这些节点的前任,同时遍历列表。

如果ab是节点,你想交换 和apbp是它们的前任,你想要这样的东西:

swap(ap->next, bp->next);
swap(a->next, b->next);

如果您想要生产代码的解决方案,我会考虑使用合适的标准容器和相应的排序函数,例如std::list及其sort成员函数或std::deque算法std::sort


推荐阅读