C語言資料結構堆的基本操作實現

2022-09-21 08:45:10 字數 2060 閱讀 6514

目錄

void adjustdown(datetype*a, int n, int parent)

if (a[parent] > a[child])

else}}

注意:if裡面的條件語句(child+1)

void adjustup(datetype*a , int child)

else}}

注意:while裡面的條件語句是不能夠寫成(parent<0),因為當child==0時,parent=(child - 1) / 2,parent==0,再次進入迴圈不滿足a[child] < a[parent],恰好跳出迴圈。如果寫成(a[child] <= a[parent])就死迴圈了

void swap(datetype*p1, datetype*p2)

void creatheap(heap*p,datetype*num,int n)

memcpy(p->a, num, n * sizeof(datetype));

p->size = n;

p->capacity = n;

//建小堆

for (int i = (n - 1 - 1) / 2; i >= 0; i--)

}void heappush(heap*p, datetype x)

} (p->capacity) *= 2;

p->a[p->size] = x;

++(p->size);

//向上調整

adjustup(p->a, p->size-1);

}void heappop(heap*p, datetype x)

把堆頂的資料與最後乙個資料交換,再次調整size-1個資料。

datetype heaptop(heap*p)

int heapsize(heap*p)

bool heapisempty(heap*p)

void print(heap*p)

printf("\n");

int count = 0;//計數

int levelsize = 1;

for (int i = 0; i &leuhzbt; p->size; i++) }

printf("\n");

}void heapdestory(heap*p)

int main()

; int n = sizeof(num) / sizeof(num[0]);

heap a;

//建立小堆

creatheap(&a,num, n);

print(&a);

printf("\n");

//插入資料

heappush(&a, 1);

print(&a);

//刪除對頂的資料

heappop(&a);

print(&a);

printf("\n");

//獲取堆頂資料

int ret=heaptop(&a);

print"the top date is %d\neuhzb",ret);

//堆的資料個數

int number=heapsize(&a);

printf("the number of heap is %d\n", number);

//銷毀

he程式設計客棧apdestory(&a);

return 0;

}a.**1

int main()

; int n = sizeof(num) / sizeof(num[0]);

heapsort(num, n);

for (int i = 0; i < n; i++)

printf("\n\n");

return 0;

}void heapsort(int*num, int n)

int end = n - 1;

while (end>0)

}執行結果

堆的基本操作今天就分享在到這裡了,謝謝你的瀏覽,如果對你有幫助的話請大家以後多多支援我們!

本文標題: c語言資料結構堆的基本操作實現

本文位址:

資料結構堆的基本操作實現

堆 其實就是一棵完全二叉樹 見下圖 在陣列中的實現 堆分為大根堆和小根堆 大根堆 1.根節點最大 2.子節點必須大於等於父節點 小跟堆 1.根節點最小 2.子節點必須小於等於父節點 在陣列中儲存這種結構時,總是習慣將根節點儲存在陣列下標為1的位置 每乙個下標為k的節點的父節點的下標就是k 2 每乙個...

資料結構 堆的實現(C語言)

樹 樹是一種非線性的資料結構,它是由n n 0 個有限結點組成乙個具有層次關係的集合。普通的二叉樹是不適合用陣列來儲存的,因為可能會存在大量的空間浪費。而完全二叉樹更適合使用順序結構儲存。現實中我們通常把堆 一種二叉樹 使用順序結構的陣列來儲存,需要注意的是這裡的堆和作業系統虛擬程序位址空間中的堆是...

資料結構 單鏈表基本操作實現 C語言

個人複習過程中的回顧,有問題請與我交流。純c語言版,未用到c 的引用 單鏈表 含頭結點 include include define elemtype int typedef int elemtype typedef struct lnodelnode,linklist linklist creat...