1 堆堆實際上是乙個完全二叉樹的層次序列,可以用陣列表示(所以完全二叉樹的下表公式也通用~)
建堆過程
n不必將值乙個個地插入堆中,通過交換形成堆
n 假設根的左、右子樹都已是堆,並且根的元素名為r。這種情況下,有兩種可能
篩選法 重要
template void minheap::siftdown(int position)
//end if
else break;
}//end if
heaparray[i]=temp;
}
建堆n從堆的第乙個分支結點heaparray[currentsize/2-1]開始,自底向上逐步把以各分支結點為根的子樹調整成堆
templatevoid minheap::buildheap()
向上篩選調整堆 只需和父節點比較
templatevoid minheap::siftup(int position)
heaparray[temppos]=temp;
}
插入元素在尾部操作
template bool minheap::insert(const t& newnode)
//向堆中插入新元素newnode
移出最小值(優先佇列出隊)
n可以將堆中最後乙個位置上的元素(陣列中實際的最後乙個元素)移到根的位置上,利用siftdown對堆重新調整
templatet& minheap::removemin()
else
//end else
}
刪除元素
templatebool minheap::remove(int pos, t& node)
建堆效率o(n)
插入結點、刪除普通元素和刪除最小元素的平均時間代價和最差時間代價都是o(logn)
堆是優先佇列的一種自然的實現方法。
資料結構學習筆記
資料結構概述 定義我們如何把現實中大量而複雜的問題以特定的資料型別和特定的儲存結構 儲存到主儲存器 記憶體 中,以及在此基礎上為實現某個功能 比如查詢摸個 元素,刪除某個元素,對所有元素進行排序 而執行的相應操作,這個相應 的操作也叫演算法 資料結構 個體 個體的關係 演算法 對儲存資料的操作 演算...
資料結構學習筆記
資料結構學習筆記 程式 資料結構 演算法 資料結構 資料 結構 結構的本質是關係 資料之間的關係從不通風層面上分為邏輯關係和物理關係 演算法的設計要依據資料的邏輯關係 演算法的實現要依據資料的物理關係 物理關係是邏輯關係的基礎和載體 演算法實現時需要先依據問題抽象出資料模型,即初步確定待處理資料的邏...
資料結構 學習筆記
一 鍊錶 1 基本特徵 記憶體節點是不連續的,節點之間通過指標彼此關聯。2 基本操作 追加 插入 刪除 遍歷 偽隨機訪問!3 實現要點 1 追加 新建節點存放資料,令新節點的前指標指向當前尾節點,新節點的後指標為null,令當前尾節點的後指標指向新節點,尾指標指向新節點。考慮在空煉表中追加第乙個節點...