1:堆的概念以及特性
堆是一種陣列物件,它可以被視為一科完全二叉樹結構。它的特點是父節點的值大於(小於)兩個子節點的值(分別稱為大頂堆和小頂堆)。它常用於管理演算法執行過程中的資訊,應用場景包括堆排序,優先佇列等。
2:資料結構堆與記憶體堆區的區別
1):資料結構中的棧與堆
資料結構中的堆與棧是兩種不同的資料結構,兩者都是資料項按序排列的資料結構。
棧:像是裝資料的桶或者箱子
棧是一種具有先進後出特性的資料結構,也就是說,先存放的後取,後存放的先取,這就類似於我們取箱子底部的東西(放進去比較早的),必須先移開壓在它上面的東西(後放進去的)
堆:像是一顆倒立的大樹
堆是一種經過排序的樹形資料結構,每個節點都是乙個值,通常我們說的堆的資料結構是指二叉樹。
堆的特點是根結點的值最大(或最小),且根結點的兩個數也是乙個堆。
由於堆的這個特性,常用來實現優先佇列,堆的訪問是隨意的。
2):記憶體分配中的堆和棧
我們現在用的堆和棧並不是資料結構中的堆和棧,之所以說了資料結構中的堆和棧是為了和後面的堆區和棧區區別開來。
記憶體中的棧區處於相對較高的位址,以位址的增長方向為上的話,棧位址是向下增長的
棧中分配區域性變數空間,堆區是向上增長的用於分配程式設計師申請的記憶體空間;
另外還有靜態區和分配靜態變數,全域性變數的;
唯讀區是分配常量和程式**空間的;
3:堆的基本操作
一:調整
(1):向下調整:
void
swap
(int
* a,
int* b)
void
heapdown
(int a,
int size,
int index)
int min = left;
if(right>a[right])if
(a[index]
<= a[min]
)else
heapdown
(a, size, min)
;}
(2)向上調整
void
swap
(int
* a,
int* b)
void
heapupadjust
(int a,
int size,
int index)
int max = left;
if(right(a[index]
>= a[max]
)else
heapupadjust
(a, size, max)
;}
二:建立
void
creatheap
(int a,
int size)
}
三:插入
int
insertelement
(int a,
int size,
int element)
return-1
;}
四:刪除
int
deleteelement
(int a,
int size)
return-1
;}
資料結構 堆
最大堆 最小堆 堆的定義是 n個元素的序列,當且僅當滿足如下關係時被成為堆 1 ki k2i 且 ki k2i 1 或 2 ki k2i 且 ki k2i 1 i 1,2,n 2 當滿足 1 時,為最小堆,當滿足 2 時,為最大堆。若將此序列對應的一維陣列堪稱是乙個完全二叉樹,則2i和2i 1個節點...
資料結構 堆
資料結構 堆的操作和實現 當應用優先順序佇列或者進行堆排序時,一般利用堆來實現。堆是乙個完全 除最底層 外都是滿的 二叉樹,並滿足如下條件 1 根結點若有子樹,則子樹一定也是堆。2 根結點一定大於 或小於 子結點。因為要求堆必須是完全二叉樹,所以可以用線性的資料結構,比如陣列,來實現堆。利用陣列實現...
資料結構 堆
堆常用來實現優先佇列,在這種佇列中,待刪除的元素為優先順序最高 最低 的那個。在任何時候,任意優先元素都是可以插入到佇列中去的,是電腦科學中一類特殊的資料結構的統稱 最大 最小 堆是一棵每乙個節點的鍵值都不小於 大於 其孩子 如果存在 的鍵值的樹。大頂堆是一棵完全二叉樹,同時也是一棵最大樹。小頂堆是...