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

网站改版 总结中国核工业第二二建设有限公司招聘

网站改版 总结,中国核工业第二二建设有限公司招聘,建游戏网站,wordpress标签特效#x1f525;博客主页#xff1a;小王又困了 #x1f4da;系列专栏#xff1a;数据结构 #x1f31f;人之为学#xff0c;不日近则日退 ❤️感谢大家点赞#x1f44d;收藏⭐评论✍️ 目录 一、二叉树的顺序结构 #x1f4d2;1.1顺序存储 #x1f4d2;1.2堆的性质… 博客主页小王又困了 系列专栏数据结构 人之为学不日近则日退 ❤️感谢大家点赞收藏⭐评论✍️ 目录 一、二叉树的顺序结构 1.1顺序存储 1.2堆的性质 1.3堆的分类 二、堆的实现 2.1堆的创建 2.2堆的初始化 2.3堆的插入 2.4向上调整数据 2.5堆的删除 2.6向下调整数据 2.7堆的销毁 ️前言 在上一期的文章中我们学习了一些二叉树的知识也了解了堆的概念。堆是一颗完全二叉树分为大堆和小堆今天我们将实现堆的各种功能。 一、二叉树的顺序结构 1.1顺序存储 顺序结构存储就是使用数组来存储一般使用数组只适合表示完全二叉树因为不是完全二叉树会有空间的浪费。而现实使用中只有堆才会使用数组来存储。二叉树顺序存储在物理上是一个数组在逻辑上是一颗二叉树。 1.2堆的性质 堆中某个节点的之总是不大于或不小于其父亲节点的值堆是一颗完全二叉树 1.3堆的分类 小堆树中任意一个父亲都小于等于孩子大堆树中任意一个父亲都大于等于孩子 二、堆的实现 2.1堆的创建 堆的逻辑结构是树形结构是我们想象出来的实际上我们操作的数组所以堆的创建和顺序表的结构相同。 typedef int HPDateType; typedef struct Heap {HPDateType* a;int size;int capacity; }HP; 2.2堆的初始化 我们有两种初始化的方式一种是在初始化阶段不开辟空间在插入过程中进行扩容另一种是在初始化阶段就开辟空间。 void HeapInit(HP* php) {assert(php);php-a NULL;php-size 0;php-capacity 0; } void HeapInit(HP* php) {assert(php); php-size 0;php-capacity 5;php-a (HPDateType*)malloc(sizeof(HPDateType) * capacity);if (tmp NULL){perror(malloc);exit(-1);} } 2.3堆的插入 堆是使用顺序结构的数组来存储的我们使用尾插插入数据更方便然后将数据调整到合适的位置。 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); } 如图在小堆中插入5050比它的父亲小所以要交换两数的位置。我们知道孩子的下标通过 parent(child-1)/2 就可以得到父亲的下标然后交换两数。 2.4向上调整数据 如果是小堆存储我们通过孩子的下标找到父亲比较两数如果孩子小于父亲就交换然后在向上比较如果孩子不小于父亲就跳出循环。 void Swap(HPDataType* p1, HPDataType* p2) {HPDataType tmp *p1;*p1 *p2;*p2 tmp; }void AdjustUp(HPDataType* a, int child) {int parent (child - 1) / 2;while (child 0){if (a[child] a[parent]){Swap(a[child], a[parent]);child parent;parent (parent - 1) / 2;}else{break;}} } 2.5堆的删除 我们使用挪动覆盖的方法删除根会使关系混乱剩下的值不一定是堆而且效率很低。这里提供一种更好的方法将根和最后一个值交换然后删除最后调整数据。 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); } 这里要注意有数据的时候才能删除所以要加入 assert(php-size 0) 进行判断。 2.6向下调整数据 如果是小堆存储我们要找到左右孩子中较小的数然后与父亲交换再找到下一层重复步骤直到找到叶节点结束。 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;}if (a[child] a[parent]){Swap(a[child], a[parent]);// 继续往下调整parent child;child parent * 2 1;}else{break;}} } 2.7堆的销毁 我们使用动态开辟内存要及时释放空间并置为空指针不然会造成数据泄露。 void HeapDestroy(HP* php) {assert(php);free(php-a);php-a NULL;php-size php-capacity 0; } 本次的内容到这里就结束啦。希望大家阅读完可以有所收获同时也感谢各位读者三连支持。文章有问题可以在评论区留言博主一定认真认真修改以后写出更好的文章。你们的支持就是博主最大的动力。
http://www.pierceye.com/news/816716/

相关文章:

  • 网站开发人员工工资网站开发一个支付功能要好多钱
  • 工程建设管理网站源码网站怎样做地理位置定位
  • 太仓公司网站建设电话网络公关名词解释
  • 江门网站建设策划什么是网络营销职能
  • 北京网站托管毕设做网站是不是太low
  • 企业网站建设费用属管理费用吗重庆网站建设制作设计公司哪家好
  • 深圳营销型网站需要多少钱做网站个体户经营范围
  • php 手机网站 上传图片晋州做网站的联系电话
  • 云天下网站建设做抖音seo排名软件是否合法
  • 网站开发合同管辖权异议龙岩网上办事大厅官网
  • 建网站费用明细海口建设网站
  • 网站页面设计说明怎么写影视小程序源码
  • 传媒网站制作网站申请建设
  • 前端做项目的网站新密市城乡建设局网站
  • 网站app建设方案智能外呼系统
  • 创建网站免费注册wordpress 熊掌号代码
  • 的广州建网站的公司黄山市网站建设
  • 做网站外包需要提供什么登录百度账号
  • 网站备案要买备案号西安鑫瀚通网站建设
  • 做网站的公司违约怎么处理免费免费网站模板
  • 动漫网站建设方案项目书目录做网站站长先把作息和身体搞好
  • 网站建设说明书网页制作成品图加代码
  • 中国网站设计师联盟福州网站大全
  • 香奈儿网站建设竞价培训
  • 毕业设计做网站的步骤电脑培训学校在哪里
  • 怎样在网站图片上做店铺广告公司名logo设计图片
  • 做ic什么网站好攀枝花三线建设网站
  • 台州市网站建设东莞网站策划
  • 网站建设响应技术wordpress502
  • 开个捕鱼网站怎么做网络销售面试问题有哪些