簡體   English   中英

打印排序列表 C++

[英]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;
        }

在這里,您應該交換節點或至少交換節點的全部內容。 如果你想交換你的節點,你還必須存儲這些節點的前輩,同時迭代列表。

如果ab是節點,你想交換和apbp是他們的前輩,你想要這樣的東西:

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

如果您想要生產代碼的解決方案,我會考慮使用合適的標准容器和相應的排序函數,例如std::list及其sort成員函數或std::dequestd::sort算法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM