2013-07-26 65 views
1

我想了解如何建立一個使用兩個堆的雙端優先級隊列:分鐘堆和最大堆。我到目前爲止的想法是,我需要一個數組來存儲最小堆,另一個來存儲最大堆,然後我需要弄清楚如何將兩個數組中的相關條目彼此連接起來。例如,我需要確保在最小堆中值「12」結束的地方以某種方式指向最大堆中值「12」的位置,反之亦然。我理解這一點,但我不知道如何去實際執行它。雙重優先級隊列使用雙重結構方法

如何使一個數組中的元素以高效靈活的方式指向另一個數組中的元素?特別是因爲每個陣列都將在整個程序中不斷重新洗牌。

不知道這是否有道理,但任何幫助最受讚賞。謝謝。

+0

感謝您的回覆。我不確定自己能否得到它,但是我會根據回覆回來。 –

回答

1

如何使一個數組中的元素以高效且靈活的方式指向另一個 數組中的元素?

使用指向每個元素的指針,該元素知道它的對應部分是什麼對象,例如,

public class Element<T> { 
    T otherElement; 

    public void setOther(T element) { 
     this.otherElement = element; 
    } 
} 

// when you create the objects 
Element<String> one = new Element(); 
Element<String> two = new Element(); 

// now both elements know about each other and they can be to whatever list/array etc they want 
one.setOther(two); 
two.setOther(one); 

如果你的要求是,每個對象都知道它在每個列表中的位置(即指數),這可能取決於你如何實現堆需要一點點更多的工作。你應該確保他們設定每個元素的位置,每次他們改變位置。所以Element對象將成爲位置感知。

0

您將最終創建包裝對象並將其存儲在數組或地圖中(如果您想稍後使用ID進行檢索)。我不明白互相引用的目的是什麼。如果你想添加和刪除你必須寫的邏輯。