heap.h
#pragma once
#include#include#include#include#include#includetypedef int hpdatatype;
typedef struct heap
heap;
void heapcreat(heap* hp, hpdatatype* a, int n); //堆的初始化
void heapdestory(heap* hp); //堆的清空
hpdatatype heaptop(heap* hp); //
heap *swap(hpdatatype *a, hpdatatype* b);//交換
int heapsize(heap* hp); //堆的大小
int heapempty(heap* hp);//判斷堆是否為空
void adjustup(hpdatatype *a, int n, int child);//向上調整
void adjustdown(hpdatatype *a, int n, int root);//向下調整
// 堆排序 void heapsort(int* a, int n);
heap.c
//建立大堆
void heapcreat(heap* hp, hpdatatype* a, int n) //堆的初始化
}void heapdestory(heap* hp) //堆的清空
hp->_a[hp->_size++] = x;
//向上調整
adjustup(hp->_a, hp->_size, hp->_size - 1);
}heap *swap(hpdatatype *x, hpdatatype *y)
hpdatatype heaptop(heap* hp) //堆頂
else
return hp->_a[0];
}int heapsize(heap* hp)//堆的大小
hpdatatype heapempty(heap* hp)//判斷堆是否為空
else }
void adjustup(hpdatatype *a, int n, int child)//向上調整
else
break; }}
void adjustdown(hpdatatype *a, int n, int root)//向下調整
else
break; }}
printf("\n");
}
test.c
#include"heap.h"
void sort(int*brr, int n)//堆排序
int end =n - 1;
while (end)//每次將堆頂的值放在最後,再繼續向下調整,繼續互換 }
int main()
; heapcreat(&hp,&a, 10); //堆的初始化
//heapsize(&hp); //堆的大小
// heaptop(&hp); //
// heapempty(&hp);//判斷堆是否為空
//heapdestory(&hp); //堆的清空*/
int brr[5] = ;
sort(&brr, 5);
}
學了這麼長時間的資料結構還是不太懂怎們傳參 堆的實現以及堆排序 最大堆,最小堆
堆是一種特殊的資料結構,相當於陣列實現的一顆二叉樹,但是和一般的二叉搜尋樹不同 1.堆分為最大堆 父結點的值必大於其孩子結點的值 和最小堆 父結點的值必小於其孩子結點的值 而二叉搜尋樹中左孩子結點的值小於父節點的值,右孩子結點的值大於父節點的值。2.堆採用陣列形式儲存,相較於二叉樹的鍊錶結構減少記憶...
堆以及堆排序實現
1.今天實現了一下堆排序,這裡的堆是指二叉堆,至於二項堆和斐波那契堆以後再說。先看二叉堆的定義 二叉堆是完全二叉樹或近似完全二叉樹。滿足特性是 父親節點的值大於等於 小於等於 左右孩子的值,並且左右子樹也是二叉堆。對應的二叉堆是大頂堆 小頂堆 二叉堆是完全二叉樹,可以用線性表來儲存。2.實現堆排序時...
堆以及php實現堆排序
什麼是堆 這裡的堆 二叉堆 指得不是堆疊的那個堆,而是一種資料結構。堆可以視為一棵完全的二叉樹,完全二叉樹的乙個 優秀 的性質是,除了最底層之外,每一層都是滿的,這使得堆可以利用陣列來表示,每乙個結點對應陣列中的乙個元素.陣列與堆之間的關係 二叉堆一般分為兩種 最大堆和最小堆。什麼是最大堆 堆中每個...