堆的建立及基礎操作

2021-09-18 07:10:57 字數 1007 閱讀 6393

//建立乙個堆

void creatheap(heap *hp, int *array, int size)

hp->_capacity= size; //搬移

for (i; i< size; ++size)

hp->_size= size;

//找數的倒數第乙個非葉子結點

int last =((size - 2)>> 1); //最後乙個結點是size-1,雙親就是再減一除以2

for (; last>= 0; last--)

}int main()

; creatheap(&hp,a,sizeof (a)/sizeof(a[0]));

destroheap(&hp);

return 0;

}//銷毀堆

void destroheap(heap *hp)

adjustup(int *array,int size,int child)

else

return;

} }//插入乙個元素

void insertheap(heap *hp, int data)

//刪除乙個元素

void eraseheap(heap *hp)

//堆裡面有效元素的個數

int sizeheap(heap *hp)

//檢查堆是否為空

int emptyheap(heap *hp)

//獲取堆頂元素

int topheap(heap *hp)

//檢查是否進行擴容

void checkcapacity(heap *hp)

//搬元素

for (int i = 0;i < hp->_size;i++)

//釋放舊空間

free(hp->_array);

hp->_array= ptemp;

hp->_capacity= newcapacity;

}}

小頂堆及大頂堆的建立

首先明確堆是乙個完全二叉樹,小頂堆指根結點的值小於或等於左右子節點的值,大頂堆指根結點的值都大於或等於左右子節點的值 關於大小頂堆的建立更詳細的介紹 include include include include include include include include using names...

堆的實現(堆的建立及push pop元素)

堆資料結構是一種陣列物件,它可以被視為一棵完全二叉樹結構。堆結構的二叉樹儲存 大堆 每個父節點的都大於孩子節點 小堆 每個父節點的都小於孩子節點。建堆 由於堆被視為完全二叉樹,故在h 1層找到第乙個 從後往前找 非葉子結點,進行堆的下調 建大堆時,從下往上依次判斷並調整堆,使該結點的左右子樹都滿足大...

堆操作及應用

1.堆是乙個完全二叉樹,堆主要設計到的操作有插入,刪除,堆化。2.堆的主要應用有堆排序 從小到大排序,使用大頂堆 從大到小排序,使用小頂堆。3.下面以大頂堆為例,給出實現 view code 1 include 2 include 3 4using namespace std 56 大頂堆的實現 7...