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