概念:如果有乙個關鍵碼的集合k=,把它的所有元素按完全二叉樹的順序儲存方式儲存 在乙個一維陣列中,並滿足k i<=k 2*i+1且ki<=k 2程式設計客棧*i+2(k i>=k 2*i+1且ki>=k 2*i+2) i = 0,1,2...,則稱為小堆(或大堆)。將根節點最大的堆叫做最大堆或大根堆,根節點最小的堆叫做最小堆或小根堆。
1.大堆
2.小堆
堆的介面:
#pragma once
#include
#include
#include
#include
typedef int hpdatatype;
typedef struct heap
hp;
//堆的建立www.cppcns.com
void heapinit(hp*hp);
//堆的銷毀
void heapdestroy(hp*hp);
//交換數值
void swap(hpdatatype *px, hpdatatype *py);
//向上調整
void adjustup(int *a,int child);
//向下調整
void adjustdown(int *a, int n, int parent);
//堆的插入
void heappush(hp*hp,hpdatatype x);
//堆的刪除
void heappop(hp*hp);
//取堆頂的資料
hpdatatype heaptop(hp*hp);
//列印堆
void heapprint(hp*hp);
//堆的判空
bool heapempty(hp*hp);
//堆的資料個數
int heapsize(hp*hp);
堆的建立:
void heapinit(hp*hp)
堆的銷毀:
void heapdestroy(hp*hp)
交換數值:
void swap(hpdatatype*px, hpdatatype*py)
向上調整:
void adjustup(int*a, int child)
else}}
堆得插入:
void heappush(hp*hp,hpdatatype x)
hp->a=tmp;
hp->capacity=newcapacity;
}hp->a[hp->size-1]=x;
hp->size++;
//向上調整
adjusiup(hp->a,hp->size-1);
}向下調整:
void adjustdown(int *a,int n,int parent)
if(a[child]>a[parent])
else}}
堆的判空:
bool heapempty(hp*hp)
堆的刪除:
void heappop(hp*hp)
取堆頂的資料:
hpdatatype heaptop(hp*hp)
列印堆:
void heapprint(hp*hp)
printf("\n");
}堆的資料個數:
int heapsize(hp*hp)
以上就是對堆的講解與操作實現。
感謝老鐵看到這裡,如果文章對你有用的話請給我乙個贊支援一下,感激不盡!
在下才疏學淺,一點淺薄之見,歡迎各位大佬指點。
深入解讀Khash h之資料結構
閱讀此文前,推薦先看klib之khash學習筆記 c語言標準庫並沒有字典 map 和集合 set 這種資料結構,因此如果想需要在c語言使用這種資料結構,要麼自己根據不同資料型別都寫一種函式,或者就是用別人寫好的資料結構來用。khash.h提供了一種基於開放定址法的泛型的雜湊表,這裡的開放定址法是一種...
讀資料結構(C語言版)
資料 資料是對現實世界物質的符號表示,在計算機中的意思是能輸入到計算機中進行計算處理的符號為資料 實現是客觀世界在計算機中的表示方式,是程式加工的原材料。資料可以是聲音,文件 資料元素 組成資料的基本構成單位,通常以結構化的形式出現,比如一本書的書目資訊,包含作者,書名,出版刊號,出版社這些資料項,...
讀《資料結構(C語言版)》(4)
從本節開始討論線性表,這次先討論線性表的順序實現。一提到線性表,我們腦子很可能會出現陣列 鍊錶這樣的概念。沒錯,陣列和鍊錶都是線性表,但它們只是線性表的兩種實現,強調的是線性表的物理結構。我們研究乙個資料結構時,一般先從它的邏輯結構入手,等研究清楚了邏輯結構再考慮具體的物理實現。在寫程式時,思路也是...