打印排序列表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;
}

问题出现在以下代码中:

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::dequestd::sort算法。

最新更新