資料結構 堆的實現(heap)

2021-09-25 04:24:23 字數 1796 閱讀 1627

堆分為兩種:最大堆和最小堆

最大堆:父節點的值比每乙個子節點的值都要大。

最小堆,父節點的值比每乙個子節點的值都要小。

heap實現:

heap.h

#include #include #include #include #include typedef int hpdatatype;

typedef struct heap

heap;

void heapinit(heap* hp, hpdatatype* a, size_t n);

void heapdeatory(heap* hp);

hpdatatype heaptop(heap* hp);

int heapsize(heap* hp);

int heapempty(heap* hp);

void adjustdown(hpdatatype* a, size_t n, int root);

void swap(int* a, int* b);

void heapsort(int* a, int n);

void heaptest();

void topk();

heap.c

#define _crt_secure_no_warnings 1

#include "heap.h"

void adjustdown(hpdatatype* a, size_t n, int root)

}void heapdeatory(heap* hp)

void adjustup(hpdatatype* a, size_t n, size_t child)

else

}} hp->_array[hp->_size] = x;

hp->_size++;

//調堆

adjustup(hp->_array, hp->_size, hp->_size - 1);

}hpdatatype heaptop(heap* hp)

int heapsize(heap* hp)

int heapempty(heap* hp)

void swap(int* a, int* b)

void heapsort(int* a, int n)

int end = n - 1;

while (end > 0) }

void topk()

a[6] = 100001;

a[7] = 100003;

a[9] = 100004;

a[22] = 100008;

a[88] = 100007;

a[79] = 100006;

a[46] = 100005;

a[99] = 100004;

a[55] = 100002;

a[100] = 100009;

heap hp;

heapinit(&hp, a, k);

for (size_t i = k; i < n; i++) }

} printf("\n");

}int main()

; heap hp;

heapinit(&hp, a, sizeof(a) / sizeof(int));

//topk();

heapsort(a, sizeof(a) / sizeof(a[0]));

heapdeatory(&hp);

system("pause");

return 0;

}

資料結構 堆(heap)

堆 heap 也被稱為優先佇列 priority queue 佇列中允許的操作是先進先出 fifo 在隊尾插入元素,在隊頭取出元素。而堆也是一樣,在堆底插入元素,在堆頂取出元素,但是堆中元素的排列不是按照到來的先後順序,而是按照一定的優先順序排列的。這個優先順序可以是元素的大小或者其他規則。如圖一所...

資料結構 堆 heap

陣列表示 公式運算 堆就是用陣列實現的完全二叉樹,所以它沒有使用父指標或者子指標。堆根據 堆屬性 來排序,堆屬性 決定了樹中節點的位置。堆的根節點中存放的是最大或者最小元素,但是其他節點的排序順序是未知的。例如,在乙個最大堆中,最大的那乙個元素總是位於 index 0 的位置,但是最小的元素則未必是...

C 資料結構 堆 Heap 的實現

現在有乙個陣列,邏輯上可看做一棵完全二叉樹.堆 heap 就是用陣列實現的完全二叉樹 堆分為兩種 大根堆和小根堆 在大根堆中,父節點的值比每乙個子節點的值都要大 在小根堆中,父節點的值比每乙個子節點的值都要小 這裡將用 建立乙個小根堆 如下 標頭檔案heap.h pragma once includ...