python實現最大堆

2021-10-11 17:46:42 字數 2100 閱讀 1427

堆是利用的完全二叉樹的性質,並且利用陣列來實現的一種特殊資料結構

class myheap(object):

'''max heap

'''def __init__(self):

self.heap =

def add(self,item):

self.heapity(len(self.heap)-1)

def show(self):

print(self.heap)

def heapity(self,index):

'''this funtion using from button start target heap list heapity

'''ii = (index-1) // 2

if index > 0 and ii >= 0 and self.heap[index] > self.heap[ii]:

self.heap[index],self.heap[ii] = self.heap[ii],self.heap[index]

self.heapity(ii)

def heapity_up(self,index):

'''heapity heap is from up to button

'''#因為二叉樹,所以有子節點需要判斷節點就只有len(heap)//2個

if index >= len(self.heap) // 2:

return

ll,rr = index*2+1,index*2+2

#print(f"index:,ll:,rr:,len:")

if rr < len(self.heap) and self.heap[rr] >= self.heap[ll] and self.heap[rr] >= self.heap[index]:

self.heap[index],self.heap[rr] = self.heap[rr],self.heap[index]

self.heapity_up(rr)

elif self.heap[ll] >= self.heap[index]:

self.heap[index],self.heap[ll] = self.heap[ll],self.heap[index]

self.heapity_up(ll)

def getmax(self):

'''get max value from heap

'''if len(self.heap) <= 0:

print("[error]:heap is emtpy,not can get max value,sorry!!!")

return

elif len(self.heap) <= 2:

rel = self.heap.pop(0)

print(f"max:")

return rel

else:

rel = self.heap[0]

self.heap[0] = self.heap.pop() #因為》2所以pop乙個元素之後,肯定還有》2元素存在,需要排列了

self.heapity_up(0)

print(f"[max]:")

return rel

if __name__ == "__main__":

a = myheap()

a.show()

a.add(5)

a.show()

a.add(7)

a.show()

a.add(3)

a.show()

a.add(4)

a.show()

a.add(10)

a.show()

a.add(11)

a.show()

a.add(6)

a.show()

print("-"*50)

a.getmax()

a.getmax()

a.getmax()

a.getmax()

a.getmax()

a.getmax()

a.getmax()

最大堆實現,python

堆 heap class maxheap 索引0不用,所以陣列大小應該是 n 1 左節點2i 右節點2i 1,父節點 i 2 def init self self.data 堆陣列容量不知道 self.count len self.data def size self return self.cou...

C 最大堆實現

max heap.h pragma once include template class max heap node heap 最大堆 uint32 t max size 最大儲存數 uint32 t size 儲存數 擴容 void expansion 刪除指定下標節點 void del nod...

LeetCode 實現最大堆

優先佇列 priority queue 可以在o 1 時間內獲取最大值,並且在0 logn 時間內取出最大值或插入任意值.優先佇列常常用堆 heap 來實現,堆是乙個完全二叉樹,其每個節點的值總是大於等於或小於等於子節點的值.實際 實現堆時,通常用乙個陣列而不是指標建立一盒樹.這是因為堆是完全二叉樹...