📄 heap.cpp
字号:
// *********************************************************// Implementation file Heap.cpp for the ADT heap.// *********************************************************#include "Heap.h" // header file for class HeapHeap::Heap() : size(0){} // end default constructorbool Heap::heapIsEmpty() const{ return bool(size == 0);} // end heapIsEmptyvoid Heap::heapInsert(const HeapItemType& newItem) throw(HeapException)// Method: Inserts the new item after the last item in the// heap and trickles it up to its proper position. The// heap is full when it contains MAX_HEAP items.{ if (size > MAX_HEAP) throw HeapException("HeapException: Heap full"); // place the new item at the end of the heap items[size] = newItem; // trickle new item up to its proper position int place = size; int parent = (place - 1)/2; while ( (parent >= 0) && (items[place].getKey() > items[parent].getKey()) ) { // swap items[place] and items[parent] HeapItemType temp = items[parent]; items[parent] = items[place]; items[place] = temp; place = parent; parent = (place - 1)/2; } // end while ++size;} // end heapInsertvoid Heap::heapDelete(HeapItemType& rootItem) throw(HeapException)// Method: Swaps the last item in the heap with the root// and trickles it down to its proper position.{ if (heapIsEmpty()) throw HeapException("HeapException: Heap empty"); else { rootItem = items[0]; items[0] = items[--size]; heapRebuild(0); } // end if} // end heapDeletevoid Heap::heapRebuild(int root){ // if the root is not a leaf and the root's search key // is less than the larger of the search keys in the // root's children int child = 2 * root + 1; // index of root's left // child, if any if ( child < size ) { // root is not a leaf, so it has a left child at child int rightChild = child + 1; // index of right child, // if any // if root has a right child, find larger child if ( (rightChild < size) && (items[rightChild].getKey() > items[child].getKey()) ) child = rightChild; // index of larger child // if the root's value is smaller than the // value in the larger child, swap values if ( items[root].getKey() < items[child].getKey() ) { HeapItemType temp = items[root]; items[root] = items[child]; items[child] = temp; // transform the new subtree into a heap heapRebuild(child); } // end if } // end if // if root is a leaf, do nothing} // end heapRebuild// End of implementation file.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -