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

成都高档网站建设东莞网站建设设计公司哪家好

成都高档网站建设,东莞网站建设设计公司哪家好,wordpress彩色内链,阿里云使用wordpress-move文章目录 堆的概念堆的实现HeapPushHeapPop HeapTop HeapSize HeapEmpty堆的应用 堆的概念 堆是一颗完全二叉树每个结点的值都小于子结点的值#xff0c;这颗二叉树为小根堆每个结点的值都大于子结点的值#xff0c;这颗二叉树为大根堆堆的定义如下#xff1a;n个元素的序列… 文章目录 堆的概念堆的实现HeapPushHeapPop HeapTop HeapSize HeapEmpty堆的应用 堆的概念 堆是一颗完全二叉树每个结点的值都小于子结点的值这颗二叉树为小根堆每个结点的值都大于子结点的值这颗二叉树为大根堆堆的定义如下n个元素的序列{k1,k2,ki,…,kn}当且仅当满足下关系时称之为堆。 堆的性质堆中某个节点的值总是不大于或不小于其父节点的值堆总是一棵完全二叉树。 堆的实现 在讲堆的实现前我们首先要知道堆需要实现的功能。 HeapPushHeapPop(删除根结点)HeapTopHeapSizeHeapEmpty 接下来我们要先创建和销毁一个堆。 typedef int HeapType; typedef struct Heap {HeapType* arr;int size;int capacity; }Hp; void HeapInit(Hp* php) {assert(php);php-arr NULL;php-capacity php-size 0; } void HeapDestroy(Hp* php) {assert(php);free(php-arr);php-arr NULL;php-capacity php-size 0; }HeapPush 实现HeapPush时难点在于如何保持整体是一个堆。 即在一个堆的后面插入一个值那么这棵完全二叉树大概率不会是堆那么我们需要将这个值和其父结点比较再根据需要交换值也就是AdjustUp。 那么接下来以小根堆为例实现HeapPush。 void Swap(HeapType* a, HeapType* b) {HeapType tmp *a;*a *b;*b tmp; } void AdjustUp(HeapType* arr, int child) {int parent (child - 1) / 2;while (child0){if (arr[child] arr[parent]){Swap(arr[child], arr[parent]);child parent;parent (child - 1) / 2;}else{break;}} } void HeapPush(Hp* php, HeapType x) {assert(php);if (php-size php-capacity){int newcapacity (php-capacity 0 ? 4 : 2 * php-capacity);HeapType * tmp (HeapType*)realloc(php-arr,newcapacity * sizeof(HeapType));if (!tmp){perror(realloc fail!);exit(-1);}php-arr tmp;php-capacity newcapacity;}php-arr[php-size] x;php-size;AdjustUp(php-arr, php-size - 1); }HeapPop 实现HeapPop也是和HeapPush一样需要考虑的是如何维持整体完全二叉树是一个堆由于我们删除的是根结点如果将根结点的子结点向上调整那么整体二叉树就会空出一个位置导致变成非完全二叉树。 这里的解决办法是将根结点和最后一个结点交换删除最后一个结点然后再对根结点进行向下调整。 void AdjustDown(HeapType* a, int n, int parent) {int child 2 * parent 1;while (childn){if (child 1 n a[child] a[child 1]){child;}if (a[parent] a[child]){Swap(a[child], a[parent]);parent child;child 2 * parent - 1;}else{break;}} } void HeapPop(Hp* php) {assert(php);assert(php-size);Swap(php-arr[0], php-arr[php-size - 1]);php-size--;AdjustDown(php-arr, php-size, 0); }HeapTop HeapSize HeapEmpty 实现了Heap的Push和Pop后那么取根结点的值和判空、判满也是手到擒来的。 HeapType HeapTop(Hp* php) {assert(php);assert(php-size);return php-arr[0]; } size_t HeapSize(Hp* php) {assert(php);return php-size; } bool HeapEmpty(Hp* php) {assert(php);return php-size 0; }堆的应用 实现了堆那么我们肯定要知道能用在什么地方才行实际上堆的应用也是非常广泛的 实现堆排序求Top K值问题求中位数、百分位数 等等。 堆的应用还有很多这里就不一一赘述了。
http://www.w-s-a.com/news/538402/

相关文章:

  • 番禺网站设计威海微网站建设
  • 新乡网站建设服务网站建设的点子
  • 赛罕区城乡建设局网站什么是新媒体运营
  • 松原企业网站建设设计素材网排名
  • 网站建设是那个行业广东公司排名
  • 制作网站要多少钱seo是如何优化
  • 求个网站2020急急急做金融网站拘留多久
  • 网站后台管理系统怎么进seo网络推广外包公司
  • 中山市 做网站网站建设如何上传文件
  • 网站呢建设公众号制作要求
  • 网站备案证明在自己电脑上做网站
  • 沈阳旅游团购网站建设怎么制作网站搜索窗口
  • 做化学合成的网站有哪些枣庄住房和城乡建设局网站
  • 天猫优惠券网站怎么做的网络连接
  • 保定网站建设多少钱公司网页网站建设+ppt模板下载
  • 用户上传商品网站用什么做建设跳转公积金网站
  • 买程序的网站上海市网站建设公司
  • 南通网站建设排名公司哪家好wordpress网站图片迁移
  • 河南省汝州文明建设门户网站博客网站建设源码
  • 单位建设网站的请示手机移动端网站案例
  • 国内做网站的企业网站结构有哪些类型
  • 南通网站建设制作公司苏州好的网站公司名称
  • 咸阳做网站开发公司哪家好珠海公司制作网站
  • 深圳网站建设好不好医疗网站前置审批
  • 做ic什么网站好安溪网站建设
  • 网站建设 慕课企业文化标语经典
  • 做短视频的网站都有哪些简约 时尚 高端 网站建设
  • 浦口区网站建设售后服务建设一个网站多少钱
  • 做个小网站大概多少钱广州h5网站
  • 360免费建站视频wordpress标签显示图片