資料結構 堆的實現(Go)

2021-10-04 18:31:56 字數 2427 閱讀 6051

謝謝這兩位博主,兩位博主寫的很好,我看了很久,自己總結的記錄如下。

堆 堆排序 優先佇列 **詳解(golang實現)

最大堆,最小堆實現

我們經常需要從一組物件中查詢前n大值或小值。當然我們可以每次都先排序,然後再進行查詢,但是這種做法效率很低。那麼有沒有一種特殊的資料結構,可以高效率的實現我們的需求呢,答案就是堆(heap)。delete的複雜度為o(1),insert不大於樹的高度。

堆的最小值或最大值在根節點上,所以可以快速找到最大值或最小值。

堆是一棵完全二叉樹,所以我們可以用順序結構來儲存它,用乙個陣列表示,不需要指標,所以效率更高。

當用陣列表示時,陣列中任一位置i上的元素,其左兒子(如果存在)在位置2i上,右兒子(如果存在)在位置(2i + 1)上,其父節點在位置(i/2)上。

我的目錄

堆實現**(我是小白,求指導)

package heap

import

("fmt"

"math"

)//二叉堆是一種特殊的堆,它滿足兩個性質:結構性和堆序性

//結構性:二叉堆是一顆完全二叉樹,完全二叉樹可以用乙個陣列表示,不需要指標,所以效率更高。

//堆序性質:堆的最小值或最大值在根節點上,所以可以快速找到最大值或最小值。

//當用陣列表示時,陣列中任一位置i上的元素,其左兒子在位置2i上,右兒子在位置(2i+ 1)上,其父節點在位置(i/2)上。

type inte***ce inte***ce

//define maxheap

type maxheap struct

// new a heap

func

newheap()

*maxheap }}

// implementing methods

func

(heap *maxheap)

len(i, j int

)int

func

(heap *maxheap)

swap

(i, j int

)func

(heap *maxheap)

bigger

(i, j int

)bool

func

(heap *maxheap)

insert

(value int)}

func

(heap *maxheap)

delete()

heap.element[1]

= heap.element[

len(heap.element)-1

] heap.element = heap.element[

:len

(heap.element)-1

] i :=

1//assuming

maxpos := i

// if 2i and 2i + 1 exist , find maxpos of (heap.element[i], heap.element[2i], heap.element[2i+1])

// and swap(i, maxpos)

forif

2*i <=

len(heap.element)-1

&& heap.element[maxpos]

< heap.element[

2*i]

//判斷是否進行交換

資料結構 堆的實現

普通的模板引數 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 s...

(資料結構)堆的實現

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

資料結構 堆(python實現)

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