學習C C 的第二十四天 資料結構 4 堆

2021-10-01 16:29:18 字數 2487 閱讀 3542

最大堆特點:

a)每個節點最多可以有兩個節點

b)根節點的鍵值是所有堆節點鍵值的最大者,且每個節點的值都比其孩子的值大。

c)除了根節點沒有兄弟節點,最後乙個左子節點可以沒有兄弟節點,其他節點必須有兄弟節點。

堆是最有個性的樹!它是用陣列表示的樹

i的子節點左:2i+1

i的右子節點:2i+2

i的父節點:(i-1)/2

#define default_capcity 128

struct heap

;

#include

#include

using

namespace std;

#define default_capcity 128

struct heap

;//對外的介面

bool

initheap

(heap &heap,

int*orginal,

int size)

;//初始化

bool

insert

(heap &heap,

int value)

;//插入堆

bool

popmax

(heap &heap,

int&value)

;//出堆

static

void

buildheap

(heap &heap)

;//建立堆

static

void

adjustdown

(heap &heap,

int index)

;//向下調整

static

void

adjustup

(heap &heap,

int index)

;//向下調整

//初始化堆

bool

initheap

(heap &heap,

int*orginal,

int size)

}return

true;}

/* 從最後乙個父節點(size/2-1的位置)逐個往前調整所有的父節點(直到根節點)

確保每乙個父節點都是乙個最大堆,最後整體上形成乙個最大堆

*/void

buildheap

(heap &heap)

}//將當前的節點和子節點調整成最大堆

void

adjustdown

(heap &heap,

int index)

//判斷最大的節點是否大於當前的父節點

if(cur >= heap.arr[child]

)//不大於,則不需要調整,跳出迴圈

else

//大於當前的父節點,進行交換,然後從子節點位置向下調整}}

//向上調整,將當前的節點和父節點調整成最大堆

void

adjustup

(heap &heap,

int index)

else

//如果已經比父親小,直接結束迴圈

}else

//越界結束迴圈}}

//刪除最大節點,並獲得節點的值

bool

popmax

(heap &heap,

int&value)

//最大堆尾部插入節點,同時保證最大堆的特性

bool

insert

(heap &heap,

int value)

int index = heap.size;

heap.arr[heap.size++

]= value;

adjustup

(heap, index)

;return

true;}

intmain()

;int i =0;

if(!initheap

(hp, ori**als,

sizeof

(ori**als)

/sizeof

(ori**als[0]

)))for

(i =

0; i < hp.size; i++

)//堆中插入元素

insert

(hp,99)

; cout <<

"在堆中插入新的元素99,插入結果如下:"

<< endl;

for(i =

0; i < hp.size; i++

)//堆中元素出列

cout <<

"最大元素依次出列:"

<< endl;

int value;

while

(popmax

(hp, value)

)system

("pause");

return0;

}

學習前端的第二十四天

一 grid布局 針對的是子元素布局。1.形成乙個網格結構 父元素新增 display grid 2.劃分行和列 grid template columns grid template rows 如果是3個值 代表3行或3列 能接受具體的px 也能是百分比 劃分行和列的時候的關鍵字 和 方法 a r...

python 學習第二十四天(同步鎖和遞迴鎖)

import time import threading defaddnum global num 在每個執行緒中都獲取這個全域性變數 num 1 temp num print get num num time.sleep 0.1 可以把時間調短一點,看看是什麼效果 num temp 1 對此公共變...

學習C C 的第二十五天 資料結構 棧

棧 進出的一端稱為棧頂 top 另一端稱為棧底 base 棧可以用順序儲存,也可以用鏈式儲存。注意 棧只能在一端操作,後進先出,這是棧的關鍵特徵,也就是說你允許在中間查詢 取值 插入 刪除等操作,我們掌握棧的初始化 入棧 出棧 去棧頂元素。define max size 128 typedef in...