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

百度网站关键词和网址广州现在可以正常出入吗

百度网站关键词和网址,广州现在可以正常出入吗,网站这么上百度,贵阳网站建设需要多少钱数据结构之二叉树(2)1.二叉树的存储结构2.实现顺序结构二叉树2.1何为堆2.2堆的性质2.3堆的定义2.3堆的初始化与销毁3.1向上调整算法3.2向下调整算法4.入堆5.出堆让花成花,让树成树上一次我们学习了树的分类,并初步了解了二叉树。今…

数据结构之二叉树(2)

  • 1.二叉树的存储结构
  • 2.实现顺序结构二叉树
    • 2.1何为堆
    • 2.2堆的性质
    • 2.3堆的定义
    • 2.3堆的初始化与销毁
  • 3.1向上调整算法
  • 3.2向下调整算法
  • 4.入堆
  • 5.出堆

让花成花,让树成树
上一次我们学习了树的分类,并初步了解了二叉树。
今天我们深入了解二叉树并写出C语言代码

1.二叉树的存储结构

在学习C语言时,我们就知道了数据有两种存储结构,一种是顺序结构,一种是链式结构。
对于用数组来实现的二叉树,完全二叉树要优于非完全二叉树。
在这里插入图片描述
在这里插入图片描述
我们从图中可以看到,非完全二叉树会有空间浪费。
现实中我们通常把堆(⼀种⼆叉树)使⽤顺序结构的数组来存储,需要注意的是这⾥的堆和操作系统虚拟进程地址空间中的堆是两回事,⼀个是数据结构,⼀个是操作系统中管理内存的⼀块区域分段。

2.实现顺序结构二叉树

堆是⼀种特殊的⼆叉树,具有⼆叉树的特性的同时,还具备其他的特性。

2.1何为堆

堆是一种树形数据结构,每个父节点都大于或等于(最大堆)或者小于或等于(最小堆)其子节点,根节点的值是堆中所有元素的最大值或最小值。
在这里插入图片描述
在这里插入图片描述

2.2堆的性质

  • 堆中某个结点的值总是不⼤于或不⼩于其⽗结点的值;
  • 堆总是⼀棵完全⼆叉树

在用代码实现前,我们还需要知道一些二叉树的性质:
在这里插入图片描述

2.3堆的定义

typedef int HpDataType;
typedef struct Heap {HpDataType* arr;int size;int capacity;
}Hp;

size表示有效个数
capacity表示可用容量

2.3堆的初始化与销毁

//初始化
void HpInit(Hp* php) {assert(php);php->arr = NULL;php->size = php->capacity = 0;
}
//销毁
void HpDestroy(Hp* php) {assert(php);if (php->arr)free(php->arr);php->size = php->capacity = 0;
}

3.1向上调整算法

当我们往堆中添加数据时,怎么能使数据自动校正自己的位置,使得其插入后任然满足是一个堆。
对于大堆:

//向上调整
void AdjustUp(HpDataType* arr, int child) {int parent = (child - 1) / 2;while (child > 0) {if (arr[child] > arr[parent]) {Swap(&arr[child], &arr[parent]);child = parent;parent = (child - 1) / 2;}else {break;}}
}

每一次和父节点比较,如果比父节点大则交换并使父节点变子节点,再找新的父节点比较。否则退出循环。

3.2向下调整算法

对于大堆:

//向下调整
void AdjustDown(HpDataType* arr, int parent, int n) {int child = 2 * parent + 1;while (child < n) {//对于两个子节点,先找到较大的一个,再与之比较if (child + 1 < n && arr[child] < arr[child + 1]) {child++;}if (arr[child] > arr[parent]) {Swap(&arr[child], &arr[parent]);parent = child;child = 2 * parent + 1;}else {break;}}
}

4.入堆

//入堆
void HpPush(Hp* php,HpDataType x) {assert(php);//空间不够增容if (php->size == php->capacity) {int newcapacity = php->capacity == 0 ? 4 : 2 * (php->capacity);HpDataType* tmp = (HpDataType*)realloc(php->arr, newcapacity * sizeof(HpDataType));if (tmp == NULL) {perror("realloc fail");exit(1);}php->arr = tmp;php->capacity = newcapacity;}php->arr[php->size++] = x;//向上调整AdjustUp(php->arr, php->size - 1);
}

5.出堆

出堆指的是堆顶元素出去。

//出堆
void HpPop(Hp* php) {assert(!HpEmpty(php));Swap(&php->arr[0], &php->arr[php->size - 1]);php->size--;//重新向上调整AdjustUp(php->arr, php->size - 1);//如果使用向下调整,换成	AdjustDown(php->arr, 0, php->size);
}


如果发现错误,欢迎打在评论区。
主页还有更多优质内容OvO

http://www.dtcms.com/a/502379.html

相关文章:

  • 路飞和女帝做h的网站建设网站 法律责任
  • 陕西省建设网站查询证件相片昆明智能网站推广价格
  • 网站优化一般要怎么做福州定制网站建设
  • 做直播信号网站太原优化排名推广
  • 海外 国内网站建设heritrix做网站
  • 河南省示范校建设专题网站如何创建自己的网址链接?
  • 个人网站备案 流程iis7添加php网站
  • 国外的智慧城市建设网站企业管理培训课程游戏
  • 撰写网站规划书工作网站开发制作
  • 怎么查看网站备案号wap小说网站源码
  • 网站开发使用架构网站备案是先做网站还是做完了备案
  • 合网站 - 百度企业网站百度认证
  • 网站平台建设呈现全新亮点网站开发费用会计分录
  • 安徽网站建设服务天津seo代理商
  • 网站页脚怎么做常见的网络推广方法有哪些
  • 门户网站优化怎么做廊坊快速优化排名
  • 找人做ps的网站山东省建设厅网站地址
  • 广州网站建设电话做好门户网站建设
  • 四川建设发展股份有限公司网站品牌建设建议
  • 百度创意产品网站小程序平台推广方案
  • 网站建设团队管理模板wordpress用来构建什么
  • 猪八戒网站开发网站推广员
  • 龙华个人网站建设鹿班设计网站官网
  • 做影视网站用主机还是用服务器国内谷歌网站SEO优化
  • vue做电商网站搭建什么样的平台
  • 网站建设为大学生服务html网站支付链接怎么做的
  • 网站开发技术期末考试试题移动端4060相当于桌面端什么显卡
  • 大连免费营销型建站网络推广找网络公司做网站要注意这4个细节
  • 月子会所网站源码建设银行官方网网址
  • 网站 备案 异地自己怎么做团购网站