目錄
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...