簡體   English   中英

按升序對鏈表進行排序C ++

[英]sorting a linked list in ascending order c++

所以我有一個單鏈表。 新項目將添加到鏈的最前面,因此,如果添加8,4,10,則列表將為10,4,8。 無論如何,現在我試圖在插入完成后對列表進行排序,除了我只是無法弄清楚如何依次遍歷這些數字並按升序重新排列它們。 我可能會在這里稍事休息,然后再回來,希望這可以幫助我解決這個問題。

*這是一個針對學校的項目,因此建議我使用其他容器對我的情況沒有幫助,除非提供信息,因為我無法更改正在使用的內容。

列表的布局

struct Node
    {
      int Item;      // User data item
      Node * Succ;   // Link to the node's successor
    };

unsigned Num //number of items in the list
Node * Head //pointer to the first node

我的插入功能看起來像這樣

Node * newOne;
newOne = new (nothrow) Node;
newOne->Item = X;
newOne->Succ = NULL;

if(Head == NULL)
{
        Head = newOne;
}
else
{
        newOne->Succ = Head;
        Head = newOne;
}
Num++;

這可以通過兩種方式完成,我不會發布代碼,但希望這會對您有所幫助。

1.插入時按升序排列

這涉及始終按升序添加元素。 例如,如果鏈接列表是

            | 1  |

然后添加5,新的鏈接列表為

           |1|--->|5|

如果再加上3,它應該是

           |1| ---> |3| ----> |5|

這涉及比較新元素,直到找到正確的位置。

2.等待所有元素插入,然后按升序排列。

這將涉及在鏈接列表的元素上使用排序算法,例如合並排序,插入排序,冒泡排序等。

在對數字進行排序之后,以正確的順序重寫鏈接列表。

例:

如果鏈接列表包含

        3 2 5 1 6 

經過算法排序

  1 2 3 5 6 (stored in an array)

現在循環瀏覽鏈接列表,並以正確的順序替換元素。

如果節點包含其他元素,則要小心,這些其他元素也需要替換。

注意:這需要額外的內存,另一種方法是交換節點,這將花費更長的時間。 除非鏈接列表包含大量節點(因此使內存變得重要)或具有其他元素,否則使用數組會更簡單。

對單鏈列表進行排序對代碼來說很討厭(除非您喜歡像氣泡排序或插入排序這樣的線性排序)。 將內容復制到向量中,對向量進行排序,然后重建列表要簡單得多。

暫無
暫無

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

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