我一直在試圖在我的程序中實現一個堆。在我看來,堆和二叉樹是一樣的。這種情況下,所有堆,如最小堆和最大堆,因爲所有正在做的事情是遍歷樹穿越最大/最小節點到頂部?C++數據結構堆
此外,我讀過使用一維數組只有當我們有一個完整的二叉樹。如果我們沒有一個完整的二叉樹,使用另一個朋友類的類會更有益處?這是爲什麼?如:
template<class T> class BT; // forward declartion -> added at edit
template<class T>
class BTNode{
friend class BT<T>; // not sure why we need two classes
private:
T data;
BTNode<T> *leftChild; // what is the benefit of making a object Node?
BTNode<T> *rightChild;
};
template<class T>
class BT{
private:
BTNode<T> *root; // what is the benefit of having this root in another class?
};
提前致謝。
這就是在諸如'std :: priority_queue'等容器中使用的東西,並且被稱爲**堆**。 – Aesthete
@Aesthete:挑選,我知道。 heap是一個具體的數據結構; 「優先級隊列」是可以用堆實現的抽象數據類型(即,接口),但也可以以其他方式實現。 'std :: priority_queue'是一個容器適配器,而不是一個容器。 – rici
這是默認實現,語義挑剔完全減損了我試圖創建的點,這是針對之前已被刪除的註釋。 – Aesthete