斜堆的實現

2021-10-04 04:07:59 字數 2549 閱讀 1380

斜堆,也稱為自適應堆,它是左傾堆的乙個變種。與左傾堆一樣,它通常也用於優先佇列的實現,它的合併操作的時間複雜度也是o(logn)

斜堆的結點

template

<

class

t>

class

node

};

1、合併操作

//合併斜堆x和斜堆y 

template

<

class

t>

node

* skewheap

::merge

(node

*&x,node

*&y)

#include

#include

using

namespace std;

template

<

class

t>

class

node};

template

<

class

t>

class

skewheap

;//建構函式

template

<

class

t>

skewheap

::skewheap()

//析構函式

template

<

class

t>

skewheap::~

skewheap()

//前序遍歷

template

<

class

t>

void skewheap

::preorder

(node

*tree)

}template

<

class

t>

void skewheap

::preorder()

//中序遍歷

template

<

class

t>

void skewheap

::inorder

(node

*tree)

}template

<

class

t>

void skewheap

::inorder()

//後序遍歷

template

<

class

t>

void skewheap

::postorder

(node

*tree)

}template

<

class

t>

void skewheap

::postorder()

//交換兩個結點的內容

template

<

class

t>

void skewheap

::swapnode

(node

*&x,node

*&y)

//合併斜堆x和斜堆y

template

<

class

t>

node

* skewheap

::merge

(node

*&x,node

*&y)

template

<

class

t>

void skewheap

::merge

(skewheap

*other)

//新增

template

<

class

t>

void skewheap

::insert

(t key)

//刪除根結點

template

<

class

t>

void skewheap

::remove()

//銷毀斜堆

template

<

class

t>

void skewheap

::destroy

(node

*&tree)

}template

<

class

t>

void skewheap

::destroy()

template

<

class

t>

void skewheap

::print

(node

*tree,t key,

int child)

}template

<

class

t>

void skewheap

::print()

斜堆(待補充)

一 斜堆的介紹 斜堆 skew heap 也叫自適應堆 self adjusting heap 它是左傾堆的乙個變種。和左傾堆一樣,它通常也用於實現優先佇列 作為一種自適應的左傾堆,它的合併操作的時間複雜度也是o lg n 它與左傾堆的差別是 01 斜堆的節點沒有 零距離 這個屬性,而左傾堆則有。0...

可並堆 左偏樹 斜堆

經典的二叉堆已經可以在 o log n 的複雜度的情況下維護堆這樣的資料結構,也有d 堆可以維護成 o log d n 雖然pop操作的複雜度是 o d log d n 然而這兩種堆不能滿足 o log n 的合併操作,它們的經常是 o n log n 即每次將乙個堆中的堆頂拿出來放到另乙個堆裡。雖...

bzoj1078 斜堆 推理

orz 大意就是證明了當前的斜堆中沿著只有左子樹的那條鏈的頂端是當前堆中最後加入的。特殊情況該節點的子節點是葉節點,則取葉節點。然後倒推即可,注意最後要加乙個空格!因為這個pe了一遍 include include include define n 205 using namespace std i...