資料結構 左式堆

2021-07-16 15:45:26 字數 1352 閱讀 7596

左式堆:同二叉堆一樣具有結構性和堆序性。惟一的區別是:左式堆不是理想平衡的,而實際上是趨於不平衡的。

零路徑長(npl(x)):從節點x到乙個沒有兩個兒子節點的最短路徑長。

左式堆要求對於堆中的每乙個節點x,左兒子的零路徑長至少與右兒子的零路徑長一樣大。

左式堆的結構宣告:

struct treenode;

typedef struct treenode *priorityqueue;

struct treenode

;priorityqueue initialize(priorityqueue h);

void swapchildren(priorityqueue h);

priorityqueue merge(priorityqueue h1, priorityqueue h2);

static priorityqueue merge1(priorityqueue h1, priorityqueue h2);

priorityqueue insert1(int x, priorityqueue h);

int isempty(priorityqueue h);

priorityqueue deletemin1(priorityqueue h);

void printqueue(priorityqueue h);

合併左式堆的驅動例程:

priorityqueue merge(priorityqueue h1, priorityqueue h2)

合併左式堆的實際例程:

void swapchildren(priorityqueue h)

static priorityqueue merge1(priorityqueue h1, priorityqueue h2)

return h1;

}

插入例程:

priorityqueue insert1(int x, priorityqueue h)

return h;

}

deletemin例程:

int isempty(priorityqueue h)

priorityqueue deletemin1(priorityqueue h)

leftheap = h->left;

rightheap = h->right;

free(h);

return merge(leftheap, rightheap);

}

左式堆實現

左式堆是為了方便合併操作實現的。左式堆性質 任意節點x的零路徑長是x到任意沒有兩個兒子的節點的最短路徑。任意乙個節點的零路徑長比他兒子的零路徑長的最大值大1,null的零路徑長是 1 對於x來說,他的左兒子的零路徑長要大於等於右兒子。通過遞迴實現 如下 public class leftisthea...

資料結構 堆

最大堆 最小堆 堆的定義是 n個元素的序列,當且僅當滿足如下關係時被成為堆 1 ki k2i 且 ki k2i 1 或 2 ki k2i 且 ki k2i 1 i 1,2,n 2 當滿足 1 時,為最小堆,當滿足 2 時,為最大堆。若將此序列對應的一維陣列堪稱是乙個完全二叉樹,則2i和2i 1個節點...

資料結構 堆

資料結構 堆的操作和實現 當應用優先順序佇列或者進行堆排序時,一般利用堆來實現。堆是乙個完全 除最底層 外都是滿的 二叉樹,並滿足如下條件 1 根結點若有子樹,則子樹一定也是堆。2 根結點一定大於 或小於 子結點。因為要求堆必須是完全二叉樹,所以可以用線性的資料結構,比如陣列,來實現堆。利用陣列實現...