当前位置: 首页 > news >正文

0基础学做网站小型项目外包网站

0基础学做网站,小型项目外包网站,汕头软件定制,做游戏网站需要多少钱目录 一 二叉树的顺序结构 二 堆的概念及结构 三 堆的实现 1 包含所有接口 (Heap.h) 2 初始化,销毁和交换(Heap.c) 3 向上调整(Heap.c) 4 插入(Heap.c) ​5 向下调整(Heap.c) 6 删除(Heap.c) ​7 打印&#…

目录

一 二叉树的顺序结构

二 堆的概念及结构

三 堆的实现

1 包含所有接口 (Heap.h)

2 初始化,销毁和交换(Heap.c)

3 向上调整(Heap.c)

4 插入(Heap.c)

​5 向下调整(Heap.c)

6 删除(Heap.c)

​7 打印(Heap.c)

8 返回堆顶(Heap.c)

9 判断是否为空(Heap.c)

10 测试(Test.c)


一 二叉树的顺序结构

顺序结构存储就是使用数组来存储,一般使用数组只适合表示完全二叉树,因为不是完全二叉树会有空 间的浪费。而现实中使用中只有堆才会使用数组来存储,关于堆我们后面的章节会专门讲解。二叉树顺 序存储在物理上是一个数组,在逻辑上是一颗二叉树。

二 堆的概念及结构

如果有一个关键码的集合K = { , , ,…, },把它的所有元素按完全二叉树的顺序存储方式存储 在一个一维数组中,并满足: <= 且 <= ( >= 且 >= ) i = 0,1, 2…,则称为小堆(或大堆)。将根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆。

堆的性质: 堆中某个节点的值总是不大于或不小于其父节点的值;

堆总是一棵完全二叉树。

三 堆的实现

1 包含所有接口 (Heap.h)

#pragma once
#include<stdbool.h>
#include<assert.h>
#include<stdlib.h>
#include<stdio.h>typedef int HPDataType;
typedef struct Heap
{HPDataType* a;int size;int capacity;
}HP;//向上调整
void AdjustUp(HPDataType* a, int child);//向下调整
void AdjustDown(HPDataType* a, int n, int parent);//交换
void Swap(HPDataType* p1, HPDataType* p2);
//打印
void HeapPrint(HP* php);
//初始化
void HeapInit(HP* php);
//销毁
void HeapDestroy(HP* php);
//插入
void HeapPush(HP* php, HPDataType x);
//删除
void HeapPop(HP* php);
//返回堆顶
HPDataType HeapTop(HP* php);
//是否为空
bool HeapEmpty(HP* php);

2 初始化,销毁和交换(Heap.c)

#include"Heap.h"void HeapInit(HP* php)
{assert(php);php->a = NULL;php->size = php->capacity = 0;
}//销毁
void HeapDestroy(HP* php)
{assert(php);free(php->a);php->a = NULL;php->size = php->capacity = 0;
}//交换
void Swap(HPDataType* p1, HPDataType* p2)
{int tmp = *p1;*p1 = *p2;*p2 = tmp;
}

 3 向上调整(Heap.c)

  时间复杂度 O(logN)

//向上调整
void AdjustUp(HPDataType* a, int child)
{int parent = (child - 1) / 2;while (child > 0){if (a[child] < a[parent])//如果建大堆 就改成 a[child] > a[parent]{Swap(&a[child], &a[parent]);child = parent;parent = (child - 1) / 2;}else{break;}}
}

 4 插入(Heap.c)

//插入
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){perror("realloc fail");exit(-1);}php->a = tmp;php->capacity = newcapacity;}php->a[php->size] = x;php->size++;AdjustUp(php->a, php->size - 1);
}

5 向下调整(Heap.c)

  时间复杂度 O(logN)

//向下调整
void AdjustDown(HPDataType* a, int n, int parent)
{int child = parent * 2 + 1;while (child < n){//找小的那个孩子if (child+1 < n && a[child+1] < a[child])//child+1<n  防止数据越界 如果想改成大堆 改成>{child++;}if (a[child] < a[parent])//如果想大堆 改成>{Swap(&a[child], &a[parent]);parent = child;child = parent * 2 + 1;}else{break;}}
}

6 删除(Heap.c)

//删除
void HeapPop(HP* php)
{assert(php);assert(php->size > 0);Swap(&php->a[0], &php->a[php->size - 1]);php->size--;AdjustDown(php->a, php->size, 0);
}

7 打印(Heap.c)

//打印
void HeapPrint(HP* php)
{assert(php);for (size_t i = 0; i < php->size; i++){printf("%d ", php->a[i]);}printf("\n");
}

8 返回堆顶(Heap.c)

//返回堆顶
HPDataType HeapTop(HP* php)
{assert(php);assert(php->size > 0);return php->a[0];
}

9 判断是否为空(Heap.c)

bool HeapEmpty(HP* php)
{assert(php);return php->size == 0;
}//堆为空返回1 true
//堆不为空 返回0 false

10 测试(Test.c)

小堆情况(升序)

#include"Heap.h"int main()
{int a[] = { 2,3,5,7,4,6,8,65,100,70,32,50,60 };HP hp;HeapInit(&hp);for (int i = 0; i < sizeof(a) / sizeof(int); i++){HeapPush(&hp, a[i]);}HeapPrint(&hp);while (!HeapEmpty(&hp)){printf("%d ", HeapTop(&hp));HeapPop(&hp);}HeapDestroy(&hp);return 0;
}

但是这种排序方式有明显的缺陷

1、先有一个堆的数据结构

2、空间复杂度复杂度的消耗

所以我们可以改进一下 用真正的堆排序 堆排序有很多细节 所以放在后面一节讲

本节很基础 与栈的实现有很多相似之处 大家也可以看我之前对栈的讲解 以此加深印象

继续加油!

http://www.ahscrl.com/news/436.html

相关文章:

  • 北京企业网站建设推广一般收多少钱
  • 莱州 网站制作windows优化大师在哪里
  • 网站如何做公安备案贵阳seo网站推广
  • 帮客户做网站图片被告侵权百度怎么发广告
  • 墨刀怎么做网站台州网站建设
  • 佛山企业网站开发seo零基础教学
  • edunews wordpressseo薪资水平
  • 山东网站seo推广优化价格网站收录
  • 找做网站营销策划的六个步骤
  • 昆明网站建设-中国互联怎么做网页宣传
  • 合肥市建设工程市场信息价网站保温杯软文营销300字
  • 乐清网站制作免费网站在线观看人数在哪直播
  • 网站开发技术要求百度应用市场官网
  • ftp服务器搭建设置网站信息狠抓措施落实
  • wamp做的网站标签图标新媒体营销推广公司
  • 做网站logo的网站上海排名优化推广工具
  • 政府网站的建设趋势新闻网站排行榜
  • 个人如何申请开公司aso优化推广公司
  • 网站域名后缀代表什么网站外链购买平台
  • wordpress成品网站云部落百度客户服务电话
  • 网站制作论文优帮云成都调查事务所
  • 如何做国外的电商网站设计信息流广告推广
  • 网站外部链接建设下载app
  • 南京广告公司招聘信息上海百度整站优化服务
  • 上海金融网站制作网站制作公司好怎么自己创建网站
  • jsp和.net做网站的区别注册网站域名
  • 企业网站建设费用入哪个科目seo搜索引擎
  • 网站建设的开发方式知乎百度扫一扫入口
  • 网站建设公司代理外贸平台app
  • 营销型网站的标准做一个网站要花多少钱