植物大戰 二叉樹 堆——純C
#define _CRT_SECURE_NO_WARNINGS
#include "Heap.h"
//初始化結構體
void HeapInit(HP* php)
{
assert(php);
php->a = NULL;
php->size = 0;
php->capacity = 0;
}
//銷燬結構體
void HeapDestroy(HP* php)
{
assert(php);
free(php->a);
php->a = NULL;
php->size = 0;
php->capacity = 0;
}
//交換
void HeapSwap(HPDataType* pa, HPDataType* pb)
{
HPDataType tmp = *pa;
*pa = *pb;
*pb = tmp;
}
//向上調整
void AdjustUp(HPDataType* a, size_t child)
{
size_t parent = (child - 1) / 2;
while (child > 0)
{
if (a[child] < a[parent])
{
HeapSwap(&a[child], &a[parent]);
child = parent;
parent = (child - 1) / 2;
}
else
{
break;
}
}
}
//插入堆
void HeapPush(HP* php, HPDataType x)
{
assert(php);
if (php->size == php->capacity)
{
int newcapacity = php->capacity == 0 ? 4 : php->capacity * 2;
HPDataType* tmp = (HPDataType*)realloc(php->a, sizeof(HPDataType)* newcapacity);
if (tmp == NULL)
{
printf("realloc fail\n");
exit(-1);
}
php->a = tmp;
php->capacity = newcapacity;
}
php->a[php->size] = x;
++php->size;
//向上調整
AdjustUp(php->a, php->size - 1);
}
//向下調整
AdjustDown(HPDataType* a,size_t size, size_t root)
{
size_t parent= root;
size_t child= parent * 2 + 1;
while (child < size)
{
if (child+1 < size && a[child + 1] < a[child])
{
++child;
}
if (a[child] < a[parent])
{
HeapSwap(&a[parent], &a[child]);
parent = child;
child = parent * 2 + 1;
}
else
{
break;
}
}
}
//刪除堆的值
void HeapPop(HP* php)
{
assert(php);
assert(php->size > 0);
//交換堆頂和堆尾的值。然後刪除堆尾的值
HeapSwap(php->a,外匯跟單gendan5.com &php->a[php->size - 1]);
--php->size;
//向下調整
AdjustDown(php->a, php->size, 0);
}
//列印堆
void HeapPrint(HP* php)
{
assert(php);
for (size_t i = 0; i < php->size; ++i)
{
printf("%d ", php->a[i]);
}
printf("\n");
}
//判斷堆是否為空
bool HeapEmpty(HP* php)
{
assert(php);
return php->size == 0;
}
//求堆中有幾個元素
size_t HeapSize(HP* php)
{
assert(php);
return php->size;
}
//得到堆頂的值
HPDataType HeapTop(HP* php)
{
assert(php);
assert(php->size > 0);
return php->a[0];
}
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69946337/viewspace-2888542/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 二叉樹與堆二叉樹
- 二叉堆、BST 與平衡樹
- C/C++ 二叉樹C++二叉樹
- 資料結構-二叉樹、堆、圖資料結構二叉樹
- Unity 植物大戰殭屍(一)Unity
- C++樹——遍歷二叉樹C++二叉樹
- 植物大戰殭屍 雜交版
- 植物大戰殭屍-雜交版
- 《植物大戰殭屍》10歲了
- 二叉堆
- 平衡二叉樹(AVL樹)和 二叉排序樹轉化為平衡二叉樹 及C語言實現二叉樹排序C語言
- 植物大戰殭屍1.2.0.1073漢化版
- 樹堆
- 洛谷題單指南-二叉堆與樹狀陣列-P3378 【模板】堆陣列
- 《植物大戰殭屍:綠意盎然的防禦戰》
- 星鐵版植物大戰殭屍介紹
- python開發植物大戰殭屍遊戲Python遊戲
- 滿二叉樹、完全二叉樹、平衡二叉樹、二叉搜尋樹(二叉查詢樹)和最優二叉樹二叉樹
- Treap——堆和二叉樹的完美結合,價效比極值的搜尋樹二叉樹
- Python 植物大戰殭屍程式碼實現(2):植物卡片選擇和種植Python
- 詳細二叉樹實現c++二叉樹C++
- 植物大戰殭屍-雜交版-修改陽光
- 植物大戰殭屍 2.0中文版
- python 植物大戰殭屍外掛輔助工具Python
- Part 7.5 二叉堆
- Win10植物大戰殭屍電腦存檔在哪_win10怎麼開啟植物大戰殭屍存檔位置Win10
- 劍指offer——二叉樹的映象C++二叉樹C++
- 劍指offer——二叉樹的深度C++二叉樹C++
- 植物大戰殭屍雜交版修改器22.09
- 這就是你們要的《植物大戰殭屍3》
- 《植物大戰殭屍 3》封閉測試開啟
- 排序二叉樹和平衡二叉樹排序二叉樹
- 二叉樹的簡單實戰 → 一起溫故下二叉樹的遍歷二叉樹
- 二叉樹(順序儲存二叉樹,線索化二叉樹)二叉樹
- 二叉堆及堆排序排序
- 手擼二叉樹——AVL平衡二叉樹二叉樹
- 手擼二叉樹——二叉查詢樹二叉樹
- 資料結構之樹結構概述(含滿二叉樹、完全二叉樹、平衡二叉樹、二叉搜尋樹、紅黑樹、B-樹、B+樹、B*樹)資料結構二叉樹