[英]Printing sorted list 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
算法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.