初步認識堆

2021-09-19 07:36:58 字數 1587 閱讀 6226

如果有乙個關鍵碼的集合k=,把它的所有元素按完全二叉樹的順序儲存方式儲存在乙個一維陣列中,並滿足:ki <= k2i+1 且 ki<= k2i+2 (ki >= k2i+1 且 ki >= k2i+2) i = 0,1,2…,則稱為小堆(或大堆)。將根節點大的叫大堆,根節點小的叫小堆。

堆的特點

每個節點比他的孩子節點小**

堆是乙個完全二叉樹

每條路徑是乙個遞增的序列

資料結構中堆與記憶體堆的區別和關係:

資料結構中的堆是一種概念,或者說是一種邏輯技術,與語言,操作平台無關

記憶體管理中的「堆」是一塊記憶體,區別於棧區,全域性資料區和**區的另一塊記憶體區域。堆允許程式在執行時動態申請某個大小的記憶體。

typedef int datetype;

//typedef struct heap heap;

void swap(datetype* pleft, datetype* pright)

//向下調整

void adjustdown(int* array, int size, int parent)

else }}

//向上調整

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

else

if (array[child] < array[parent])

else

}}//擴容

void checkcapacity(heap* hp)

//拷貝元素

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

ptemp[i] = hp->_array[i];

//釋放舊空間

free(hp->_array);

hp->_array = ptemp;

hp->_capacity = newcapacity;}}

//建立堆

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

hp->_capacity = size;

for (; i < size; ++i)

hp->_array[i] = array[i];

hp->_size = size;

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

int last = ((size - 2) >> 1);

for(;last>=0;–last)

adjustdown(hp->_array, hp->_size, last);

}//刪除堆頂元素

void eraseheap(heap* hp)

//插入元素

void insertheap(heap* hp, datetype data) //插入

int sizeheap(heap* hp) //獲取堆中元素個數

int emptyheap(heap* hp) //判斷堆是不是空

datetype topheap(heap* hp) //獲取堆頂元素

//銷毀堆

void destroyheap(heap* hp)

初步認識繼承

include stdafx.h include using namespace std 構造方式跟類內類物件是一樣的 父類 info 派生類 sci 派生類 sci 父類 info struct info 父類 void outputinfo info info private int numb ...

初步認識redis

1.什麼redis 2.為什麼使用redis 3.什麼場合使用redis 4.redis的好處 5.編譯安裝redis 6.redis資料結構 1.什麼是redis redis是remote dictionary server 遠端資料服務 的縮寫,是義大利人antirez開發的一款記憶體快取記憶體...

kafka初步認識

producer 訊息生產者,向kafka集 送訊息,它是乙個程式 consumer 訊息消費者,從kafka集群獲取資料,它是乙個程式 broker kafka集群的最小組成單元,它是乙個服務 topic kafka將producer產生的訊息按照topic進行分類 partition kafka...