我正在尝试了解如何使用两个堆构建双端优先级队列:最小堆和最大堆。到目前为止,我的想法是,我需要一个数组来存储最小堆,另一个存储最大堆,然后我需要弄清楚如何将两个数组中的相关条目相互连接。例如,我需要确保在最小堆中值“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
对象将变为位置感知。
答案 1 :(得分:0)
您将最终创建包装器对象并存储在数组或映射中(如果您希望稍后使用id检索它)。我不明白互相参考的目的是什么。如果你想添加和删除你必须为此编写逻辑。