樹
樹是一種非線性的資料結構,它是由n(n>=0)個有限結點組成乙個具有層次關係的集合。普通的二叉樹是不適合用陣列來儲存的,因為可能會存在大量的空間浪費。而完全二叉樹更適合使用順序結構儲存。現實中我們通常把堆(一種二叉樹)使用順序結構的陣列來儲存,需要注意的是這裡的堆和作業系統虛擬程序位址空間中的堆是兩回事,乙個是資料結構,乙個是作業系統中管理記憶體的一塊區域分段。
堆的概念及結構
如果有乙個關鍵碼的集合k = ,把它的所有元素按完全二叉樹的順序儲存方式儲存在乙個一維陣列中,並滿足:ki <= k2i+1 且 ki<= k2i+2 (ki >= k2i+1 且 ki >= k2i+2) i = 0,1,2…,則稱為小堆(或大堆)。將根節點最大的堆叫做最大堆或大根堆,根節點最小的堆叫做最小堆或小根堆。
堆的**實現,具體如下:
heap.h
#include #include #include #include #include typedef int hpdatatype;
typedef struct heap
heap;
//typdef struct heap heap
void heapinit(heap* hp, hpdatatype* a, size_t n);
void heapdestory(heap* hp);
hpdatatype heaptop(heap* hp);
size_t heapsize(heap* hp);
size_t heapempty(heap* hp);
void topk();
// 堆排序
void heapsort(int* a, int n);
void heaptest1();
heap.c
#include "heap.h"
void swap(hpdatatype* p1, hpdatatype* p2)
void adjustdown(hpdatatype* a, size_t n, int root)
if (a[child] > a[parent])
else
}}void heapinit(heap* hp, hpdatatype* a, size_t n)
}void heapdestory(heap* hp)
printf("\n");
}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);
}size_t heapsize(heap* hp)
size_t heapempty(heap* hp)
hpdatatype heaptop(heap* hp)
void topk()
a[2] = 100001;
a[19] = 100002;
a[23] = 100003;
a[34] = 100004;
a[78] = 100005;
heap hp;
heapinit(&hp, a, k);
for (size_t i = k; i < n; ++i) }
}//公升序->大堆
void heapsort(int* a, size_t n)
size_t end = n - 1;
while (end > 0) }
void heaptest1()
; heap hp;
heapinit(&hp, a, sizeof(a) / sizeof(int));
heapsort(a, sizeof(a) / sizeof(int));
for (size_t i = 0; i < sizeof(a) / sizeof(int); ++i)
printf("\n");
}
test.c
#include "heap.h"
int main()
C語言資料結構堆的基本操作實現
目錄 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裡面的條件語句是不...
資料結構 樹 C語言 堆
include include typedef struct heapstruct pheap pheap為結構指標,指向這個結構 struct heapstruct typedef pheap maxheap typedef pheap minheap define maxdata 1000 de...
資料結構之串結構的實現 堆分配結構 C語言
學習參考 嚴蔚敏 資料結構 c語言版 基本操作 賦值操作 字串連線 取長度字串比較 求子串輸出字串 清空操作 實現 結構定義 typedef struct pstr,dynstring 賦值操作 int strassign pstr str,char ch if len 0 return 0 str...