c++ - 打印排序列表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;
}
在这里,您应该交换节点或至少交换节点的全部内容。如果要交换节点,则还必须存储这些节点的前任,同时遍历列表。
如果a
和b
是节点,你想交换 和ap
,bp
是它们的前任,你想要这样的东西:
swap(ap->next, bp->next);
swap(a->next, b->next);
如果您想要生产代码的解决方案,我会考虑使用合适的标准容器和相应的排序函数,例如std::list
及其sort
成员函数或std::deque
算法std::sort
。
推荐阅读
- r - 如何使用data.frame计算R中股票的每日收益?
- google-maps - 是否仍然可以在 AIR 应用程序 (as3) 中显示 Google 地图?
- r - 在一列中复制具有不同值的行
- facebook-marketing-api - 如何从 Facebook 目录产品提要中删除单个产品?
- css - CSS;如何为打开和“关闭”悬停制作图像悬停过渡效果?
- d3.js - d3将csv文件导入数组
- c# - CEFsharp浏览器注入jquery
- google-sheets - 谷歌电子表格条件格式基于日期的列的不同单元格
- swift - 更改 tabBarItem TableViewController 后看起来像黑屏
- go - 如何使用 Go 构建一个可以接收和发送消息到多个客户端的服务器?