簡體   English   中英

雙向鏈接列表,分別對名稱和年齡進行排序C ++

[英]Doubly Linked List to Sort Name & Age Separately C++

我嘗試創建的程序遇到一些問題。 對於很多人,我需要閱讀一個文本文件,其中包含一個人的名字,然后在下一行顯示他們的年齡。例如:

Tyler
24
Greg
16
Laura
25
etc... 

然后,我需要為數據建立一個列表,該列表基於名稱和使用雙鏈接列表的年齡按升序排列。 該列表需要進行排序(而不是最后)。 到目前為止,我已經完成了構建一個排序的雙鏈表,並且正在閱讀文件,但是當我打印文件時,它給了我所有年齡的升序排列,然后是所有名字按字母順序排列。 我需要堅持自己的年齡。 例如,使用上面的名稱/年齡,當前正在打印:

16
24
25
Greg
Laura 
Tyler

當我需要打印時:

(by age)
Greg 16
Tyler 24
Laura 25

要么

(by name)
Greg 16
Laura 25
Tyler 24

我可以根據需要發布代碼,但我並不是真正在尋找編碼幫助(至少到目前為止),而不僅僅是為了使它們保持一致的技術。 目前,我正在讀取文件,並將其作為字符串傳遞給insert函數(我很確定這是我弄錯的地方,但不知道如何處理)。

在此先感謝您,始終感謝您的幫助!

我看到了一些可以在這里工作的不同解決方案。 如果您定義這樣的類:

class Person {
 private:
  int name;
  int age;

  ...
};

具有一些不同的比較功能( isGreaterAge()isAlphabeticalName() ),可能會起作用。
to be a linked list (is this schoolwork?), you could use maps or (more suited for your purpose) multimaps, which are specifically designed to do this sort of thing: 如果這並不是一個鏈表(這是功課?),你可以使用地圖或(更適合你的目的)屈德寧,這是專門用來做這樣的事情:
http://www.cplusplus.com/reference/map/multimap/?kw=multimap

這主要取決於您設計數據結構的方式以及在其上執行排序算法的方式。

數據結構:

您需要使給定節點的數據指針中的信息名稱/年齡與雙向鏈接列表指針分開。 因此插入將有兩個參數,一個是名稱,另一個是列表頭指針之外的年齡(如果函數是可重入的)

排序:

有不同的排序方式,我更喜歡的是? 最初,在基於名稱對列表創建節點進行排序的情況下插入(考慮到名稱排序的優先級而不是年齡)

因此,每當用戶要求命名排序時,我們都可以直接列出所有元素。

現在,當用戶要求按年齡進行排序時,您需要執行實際的排序,但不要更改鏈接,只需打印鏈接並將其標記為已訪問或已處理,無論您調用什么,然后繼續即可。

希望這對您有所幫助。 沙皇

暫無
暫無

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

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