堆化 二叉堆一般用数组来表示。typedef struct _minHeapNodetypedef struct _otherInfo-icoding-C-数据结构
生活随笔
收集整理的這篇文章主要介紹了
堆化 二叉堆一般用数组来表示。typedef struct _minHeapNodetypedef struct _otherInfo-icoding-C-数据结构
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
堆化
二叉堆一般用數組來表示。例如,根節點在數組中的位置是0,第n個位置的子節點分別在2n+1和 2n+2。?
因此,第0個位置的子節點在1和2,1的子節點在3和4。以此類推。這種存儲方式便于尋找父節點和子節點。
在二叉堆上可以進行插入節點、刪除節點、取出值最小的節點、減小節點的值等基本操作。
“最小堆”的定義如下:
typedef struct _otherInfo {int i;int j; }OtherInfo;typedef struct _minHeapNode {int value;OtherInfo otherInfo; }MinHeapNode, *PMinHeapNode;typedef struct _minPQ {PMinHeapNode heap_array; // 指向堆元素數組int heap_size; // 當前堆中的元素個數int capacity; //堆數組的大小 }MinHeap, *PMinHeap;void min_heapify(PMinHeap pq, int i);
其中 pq指向堆,i 為堆元素在數組中的下標。該函數假設元素i對應的子樹都已經是最小堆
(符合最小堆的要求),但元素i為根的子樹并不是最小堆,
min_heapify將對元素i及其子樹的各結點進行調整,使其為一個最小堆。
示例代碼如下:
#include <stdio.h> #include <stdlib.h> #include "minbinheap.h"void min_heapify(PMinHeap pq, int i){int j = parent(i);//if(pq->heap_array[i].value > pq->heap_array[j].value) return;for(; j >= 0 && pq->heap_array[i].value > pq->heap_array[j].value; i = j, j = parent(i))swap_node(&pq->heap_array[i], &(pq->heap_array[j])); }其實...
一行就夠了
void min_heapify(PMinHeap pq, int i){for(int j = parent(i); j >= 0 && pq->heap_array[i].value > pq->heap_array[j].value; i = j, j = parent(i))swap_node(&pq->heap_array[i], &(pq->heap_array[j]));}?
?
?
?
總結
以上是生活随笔為你收集整理的堆化 二叉堆一般用数组来表示。typedef struct _minHeapNodetypedef struct _otherInfo-icoding-C-数据结构的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 手部湿疹怎么办
- 下一篇: 菜花的营养价值及功效