2013-07-26 66 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进行检索)。我不明白互相引用的目的是什么。如果你想添加和删除你必须写的逻辑。