2012-12-23 70 views
-4

所以,如果我有一個雙鏈表,並且我想添加一個名稱和一個年齡,這樣我就可以分別搜索這兩個值了。具有兩個值的雙鏈接列表節點

+1

就去做。將所需的任何數據放入列表節點中。 – Mat

+0

但是,這仍然允許我基於僅年齡後搜索? – user1913688

+1

你是編寫搜索代碼的人。它可以做任何你喜歡的事情。 – Mat

回答

0

鏈表非常適合於在多個按鍵排序:

item0: age=1    item1: age=99; 
      name='z'     name='a'; 
      next_age=item1    next_age=NULL; 
      next_name=NULL    next_name=item0 

基本上唯一要考慮的額外的事情是如何安排列表遍歷算法共享和無知有關的位置下一個/ prev鏈接。

一種解決方案是包裹列表結構:

struct list_s { 
     struct list_s *next; 
     struct list_s *prev; 
     void *key_ptr; 
     struct master_struct_s *parent; 
} 

struct master_struct_s { 
     struct list_s key1; 
     struct list_s key2; 
     struct list_s key3; 
     int other_data; 
} 

查閱列表排序算法可以與& KEY1,& KEY2或& KEY3工作,並能夠指的other_data內容,就像每個列表結構指的是「父」結構或它們自己的容器。

0

你問,

「所以,如果我有一個雙向鏈表,我想添加一個名字和也是一個時代,這樣我就可以單獨如何將我做搜索兩者兼而有之? 」

作爲一個實際問題,您不會爲此目的實施一個雙向鏈表。相反,您可以使用標準庫容器,如std::vector。或者std::map

但考慮到這是學習,問題是問題是&hellip什麼;

想到你’再問一次,你怎麼能讓每個節點同時參與兩個鏈表。

而一種簡單的方法是讓列表節點只包含指向數據節點的指針。俗話說,解決任何計算機科學問題,是一個額外的間接層。當然,這也是解決太多間接問題的辦法。 :-P