9.7.1 堆的定義與基本操作
堆是一顆完全二叉樹,樹中的每個結點都不小於(或不大於)其左右結點孩子結點的值,分為大根堆和小根堆
由於是完全二叉樹,可以使用陣列儲存
const int maxn = 100;
//heap為堆,n為元素個數
int heap[maxn],n=10;
//對heap陣列在[low,high]範圍進行向下調整
void downadjust(int low,int high)
//如果孩子中最大的權值比欲調整結點i大
if(heap[j]>heap[i])else
}}
建堆,假設序列中元素的個數為n,由於是完全二叉樹,則[1,n/2]區間內的結點都是非葉子結點
//建堆
void createheap()
}
如果要刪除堆中的最大元素,即刪除堆頂元素,令最後乙個元素覆蓋堆頂元素,然後對根結點進行調整即可
//刪除堆頂元素
void deletetop()
如果想要往堆裡新增乙個元素,可以把想要新增的元素放在陣列最後,然後進行向上調整。向上調整總是把欲調整結點與父親結點比較,如果權值比父親結點大,那麼就交換與其父親結點,這樣反覆比較,直到達堆頂或是父親結點的權值較大為止,**如下,時間複雜度為o(logn)
//對heap陣列在[low,high]範圍內進行向上調整
void upadjust(int low,int high)
}
Python學習筆記 part 3
ide vscode python版本 python3.6 學習教材 python程式設計從入門到實踐 人民郵電出版社 操作列表 for a in b 構建了python的for迴圈,迴圈方式為每次從列表b中取出乙個元素存入a。例如 idiols chen ju liu for idiol in i...
Gentoo安裝筆記(part3
此安裝筆記是按照gentoo中文手冊上實際操作記下來的,使用的是宿主機ubuntu9.04 virtualbox3.04,在virtualbox3.04中按預設屬性建立了乙個gentoo虛擬機器。使用gentoo minimal映像檔案安裝。6.開始安裝gentoo 1 選擇乙個合適的映象站點 mi...
JS筆記 part3(物件導向)
物件導向的本質是對面向過程的封裝 物件導向三大特徵 封裝 繼承 多型將某個具體功能封裝在物件中,對外部暴露指定的介面,外界使用時無需考慮內部是如何實現的 function person name,age,country var person1 newperson lin 30 china conso...