資料結構 二叉堆

2021-07-16 15:45:26 字數 1267 閱讀 3604

二叉堆(優先佇列)具有結構性和堆序性

結構性為:二叉堆是一棵完全被填滿的二叉樹,有可能的例外是在底層,底層上的元素從左到右填入。這樣的樹稱為完全二叉樹。二叉堆可以用陣列表示,對於陣列中任意位置i上的元素,其左兒子在位置2i上,右兒子在位置2i+1上,父親則在i/2上(小於i/2的最小整數)。

堆序性為:使操作被快速執行的性質稱為堆序性。在乙個堆中,對於每個節點x,x的父節點中的關鍵字小於等於x中的關鍵字,除根節點外(根節點沒有父節點)。

優先佇列的宣告:

struct heapstruct;

typedef struct heapstruct* priorityqueue;

struct heapstruct

;priorityqueue initialize(int maxelements);

int isfull(priorityqueue h);

void insert(int x, priorityqueue h);

int isempty(priorityqueue h);

int deletemin(priorityqueue h);

初始化:

priorityqueue initialize(int maxelements)

插入(上濾(percolate up)):

int isfull(priorityqueue h)

void insert(int x, priorityqueue h)

for (i = ++h->size; h->elements[i / 2] > x; i = i / 2)

h->elements[i] = h->elements[i / 2];

h->elements[i] = x;

}

刪除(下濾(percolate down)):

int isempty(priorityqueue h)

int deletemin(priorityqueue h)

minelement = h->elements[1];

lastelement = h->elements[h->size--];

for (i = 1; i * 2 < h->size; i = child)

h->elements[i] = lastelement;

return minelement;

}

資料結構 二叉堆

二叉堆一般用來實現優先佇列 優先佇列是一種至少允許以下兩種操作的資料結構 insert 以及 deletemin 同查詢樹一樣,二叉堆具有結構性與堆序性,對二叉堆的基本操作可能會破壞這些性質,所以二叉堆的操作要直到其基本性質滿足才能結束。一 結構性 二叉堆在結構上為完全二叉樹,其具有完全二叉樹的結構...

資料結構 二叉堆

二叉堆其實就是二叉樹,只不過二叉堆的最頂端的值,要麼最大,要麼最小,這要根據題意來定。如圖 讀者注意一下,圖上的黑字代表二叉堆的值,而紅色則代表下表。二叉堆的基本操作 插入,刪除和查詢。堆的stl實現 本人不太懂,就參考這位大佬的 上圖中,q.top 就是查詢,q.pop 就是刪除,q.push 就...

資料結構之(二叉)堆

二叉 堆是乙個陣列,是一顆近似完全二叉樹,分為大頂堆 小頂堆。表示堆的陣列a有兩個屬性 1 a.length表示陣列元素的個數 2 a.heap size表示有多少個堆元素儲存在陣列a中。更多的關於堆的性質的介紹 演算法導論第三版 p85 p89 程式設計珠璣 p141 p145。堆的操作主要包括堆...