堆是利用的完全二叉樹的性質,並且利用陣列來實現的一種特殊資料結構
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 來實現,堆是乙個完全二叉樹,其每個節點的值總是大於等於或小於等於子節點的值.實際 實現堆時,通常用乙個陣列而不是指標建立一盒樹.這是因為堆是完全二叉樹...