資料結構 堆的實現

2021-08-01 04:44:02 字數 1421 閱讀 5788

//普通的模板引數

template

struct less

};template

struct greater

};template

//預設為小堆

class heap

heap(const t array,size_t size)

int root = (_heap.size ()-2)>>1;

for(;root>=0;root--)

}size_t size()const

bool empty()const

void insert(const t& data)

_adjustup(_heap.size ()-1);

}void remove()

//如果節點數大於2個,則先交換根元素和尾元素,再刪除尾元素,

//最後重新調整堆結構

else

}const t& top()const

private:

void _adjustdown(size_t parent)

else

return ;}}

void _adjustup(size_t child)

}private:

std::vector

_heap;

};

//模板的模板引數

template

struct less

};template

struct greater

};template

class compare>

//可以傳入實時引數模板,但不能用無名物件呼叫

class heap

heap(const t array,size_t size)

int root = (_heap.size ()-2)>>1;

for(;root>=0;root--)

}size_t size()const

bool empty()const

void insert(const t& data)

_adjustup(_heap.size ()-1);

}void remove()

//如果節點數大於2個,則先交換根元素和尾元素,再刪除尾元素,

//最後重新調整堆結構

else

}const t& top()const

private:

void _adjustdown(size_t parent)

else

return ;}}

void _adjustup(size_t child)

}private:

std::vector

_heap;

};

(資料結構)堆的實現

堆總是一棵完全二叉樹 且 最大堆總滿足,堆中父節點的值總是大於等於其左右子節點的值 最小堆總滿足,堆中父節點的值總是小於等於其左右子節點的值。1.資料儲存 如下圖所示,如果自頂向下,自左向右依次將完全二叉樹中的每個節點標上序號 注 此處從1開始 並使用陣列儲存 注 陣列中下標0對應的位置未放置元素 ...

資料結構 堆(python實現)

資料結構 堆 python實現 用list來儲存堆元素,表尾端加入元素,首段作為堆頂 借鑑裘老師資料結構與演算法的書加上自己的理解 堆 就是乙個完全二叉樹 class heap object def init self,elist self.elems list elist if elist sel...

資料結構 堆的實現(heap)

堆分為兩種 最大堆和最小堆 最大堆 父節點的值比每乙個子節點的值都要大。最小堆,父節點的值比每乙個子節點的值都要小。heap實現 heap.h include include include include include typedef int hpdatatype typedef struct ...