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

专业建设润滑油网站如何开通网络

专业建设润滑油网站,如何开通网络,襄阳市住房和城乡建设局官方网站,wordpress需要开什么端口二叉树(堆) 简介 前文,我们大概的介绍了一下树的一些基本概念,然后这节就主要讲解一下二叉树的其中一种存储方式:用数组存储(顺序存储)。及其一些特殊结构,也就是堆。 注意一下就…

二叉树(堆)

简介

前文,我们大概的介绍了一下树的一些基本概念,然后这节就主要讲解一下二叉树的其中一种存储方式:用数组存储(顺序存储)。及其一些特殊结构,也就是堆。

注意一下就是,这种用数组存储二叉树的方式只适用于完全二叉树。非完全二叉树的话就更加适合链式存储,这个后面讲。

请添加图片描述

堆是什么呢?

请添加图片描述
在这里插入图片描述

堆的插入

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

讲完基本的思路,那么就要开始写代码了。

堆的实现及其功能代码

头文件.h

#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <stdbool.h>
#include <string.h>
#include <time.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* pq);
//初始化函数
void HeapInit(HP* pq);
//第二种初始化函数
void HeapInitArray(HP* pq,int* a,int n);
//摧毁函数
void HeapDestroy(HP* pq);//插入函数
void HeapPush(HP* pq,HPDataType x);
//删除函数
void HeapPop(HP* pq);//获取堆顶元素
HPDataType HeapTop(HP* pq);
//判断堆是否为空
bool HeapEmpty(HP* pq);

实现文件.c

#include "Heap.h"//初始化函数
void HeapInit(HP* pq)
{assert(pq);pq->a=NULL;pq->size=pq->capacity=0;
}
//第二种初始化函数(把已经存在的数组,复制一份给我们的数组)
void HeapInitArray(HP* pq,int* a,int n)
{assert(pq);assert(a);//这里直接开了一个大小为n的数组空间pq->a=(HPDataType*) malloc(sizeof (HPDataType)*n);if(pq->a==NULL){perror("malloc failed");exit(-1);}pq->capacity=n;memcpy(pq->a,a,sizeof (HPDataType)*n);pq->size=n;//建堆for(int i=1;i<n;i++){AdjustUp(pq->a,i);}
}//摧毁函数
void HeapDestroy(HP* pq)
{assert(pq);free(pq->a);pq->a=NULL;pq->size=pq->capacity=0;
}//交换函数
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=(child-1)/2;//parent=(parent-1)/2;}else{break;}}}
//向下调整(小堆)
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;}}
}//插入函数
void HeapPush(HP* pq,HPDataType x)
{assert(pq);//判断容量是否足够if(pq->size==pq->capacity){int newCapacity=pq->capacity==0?4:pq->capacity*2;HPDataType* tmp=(HPDataType*) realloc(pq->a,sizeof (HPDataType)*newCapacity);if(tmp==NULL){perror("reallocate failed");exit(-1);}pq->a=tmp;pq->capacity=newCapacity;}pq->a[pq->size]=x;pq->size++;AdjustUp(pq->a,pq->size-1);
}
//删除函数
void HeapPop(HP* pq)
{assert(pq);assert(pq->size>0);Swap(&pq->a[0],&pq->a[pq->size-1]);pq->size--;AdjustDown(pq->a,pq->size,0);
}//获取堆顶元素
HPDataType HeapTop(HP* pq)
{assert(pq);assert(pq->size>0);return pq->a[0];
}
//判断堆是否为空
bool HeapEmpty(HP* pq)
{assert(pq);return pq->size==0;
}//打印函数
void HeapPrint(HP* pq)
{assert(pq);for(int i=0;i<pq->size;i++){printf("%d ",pq->a[i]);}printf("\n");
}

测试文件.c

#include "Heap.h"/*
void HeapSort(int* a,int n)
{for(int i=(n-1-1)/2;i>=0;i--){AdjustDown(a,n,i);}int end=n-1;while(end>0){Swap(&a[0],&a[end]);AdjustDown(a,end,0);end--;}
}int main()
{int a[]={65,100,70,32,50,60};HeapSort(a,sizeof (a)/sizeof (int));return 0;
}*/
void PrintTopK(const char* filename, int k)
{// 1. 建堆--用a中前k个元素建堆FILE* fout = fopen(filename, "r");if (fout == NULL){perror("fopen fail");return;}int* minheap = (int*)malloc(sizeof(int) * k);if (minheap == NULL){perror("malloc fail");return;}for (int i = 0; i < k; i++){fscanf(fout, "%d", &minheap[i]);}// 前k个数建小堆for (int i = (k-2)/2; i >=0 ; --i){AdjustDown(minheap, k, i);}// 2. 将剩余n-k个元素依次与堆顶元素交换,不满则则替换int x = 0;while (fscanf(fout, "%d", &x) != EOF){if (x > minheap[0]){// 替换你进堆minheap[0] = x;AdjustDown(minheap, k, 0);}}for (int i = 0; i < k; i++){printf("%d ", minheap[i]);}printf("\n");free(minheap);fclose(fout);
}// fprintf  fscanfvoid CreateNDate()
{// 造数据int n = 1000;srand(time(0));const char* file = "data.txt";FILE* fin = fopen(file, "w");if (fin == NULL){perror("fopen error");return;}for (int i = 0; i < n; ++i){int x = (rand() + i) % 10000000;fprintf(fin, "%d\n", x);}fclose(fin);
}int main()
{//CreateNDate();//要先使用这个函数创建一个含有N个数据的文本文件,然后注释掉,使用下面那个函数PrintTopK("data.txt", 5);return 0;
}

解析

  1. 结构
    在这里插入图片描述

  2. 初始化函数和销毁函数
    在这里插入图片描述

  3. 插入函数

在这里插入图片描述在这里插入图片描述

  1. 向上调整函数

在这里插入图片描述
结合下图理解代码

在这里插入图片描述

  1. 删除函数

在这里插入图片描述
在这里插入图片描述

  1. 向下调整函数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

建堆

建堆什么意思呢?顾名思义,就是建立起一个堆,可以是大堆,可以是小堆,这里我们以建立小堆给大家讲解。然后我们顺便用上删除操作,这样就可以得到一个简单的排序的手法。

在这里插入图片描述
在这里插入图片描述

优化

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


文章转载自:

http://OafpabtZ.bwrbm.cn
http://y8oFMPM4.bwrbm.cn
http://dBORaIki.bwrbm.cn
http://LxKfQcC8.bwrbm.cn
http://eHs6VlPq.bwrbm.cn
http://G9Fh2ueB.bwrbm.cn
http://MaafpIzj.bwrbm.cn
http://TQJQYhQt.bwrbm.cn
http://xgsP2wz8.bwrbm.cn
http://7IfFLBJo.bwrbm.cn
http://KDW1ZDDg.bwrbm.cn
http://DFHY5N2w.bwrbm.cn
http://c3Nk7wc3.bwrbm.cn
http://kk4GnoL6.bwrbm.cn
http://WraoofVR.bwrbm.cn
http://7ylT6rvx.bwrbm.cn
http://VDoO0bmF.bwrbm.cn
http://tYYJQTop.bwrbm.cn
http://RDkfNmPf.bwrbm.cn
http://3Hn3sw8C.bwrbm.cn
http://n6ISn2FG.bwrbm.cn
http://Lbe7VFye.bwrbm.cn
http://ewpRNI0A.bwrbm.cn
http://hsCEuD5i.bwrbm.cn
http://3AQcpJWC.bwrbm.cn
http://wAql85Mb.bwrbm.cn
http://un6z7TZY.bwrbm.cn
http://8URwLKI7.bwrbm.cn
http://PuDqBz5d.bwrbm.cn
http://38lkeb9k.bwrbm.cn
http://www.dtcms.com/wzjs/641789.html

相关文章:

  • 网站常用布局设计制作小车二教学视频
  • 内蒙古建设工程造价信息网官方网站还是网站好
  • 网站关键词 价格生成设计之家效果图
  • 东明网站建设wordpress 首页模板
  • 网站不能调用样式加人引流加人网站怎么做
  • 中信云 做网站如何设置个人网站
  • 重庆自适应网站建设做网站开发钱
  • 网站建设与管理案例教程第三版答案深圳网站设计 深圳信科
  • 镇江专业网站建设制作wordpress建群站
  • 做文字头像的网站网站与微信结合
  • 网站发布初期的推广黄金网站软件app大全
  • 北京首华建设经营有限公司网站网站标题能改吗
  • 楼盘网站建设案例编程课网课哪家好
  • 江门网站推广多少钱找段子的各大网站
  • 安卓系统上怎样做网站前端开发萤栈WordPress
  • 网站精品案例南昌网站开发技术
  • 南京seo按天计费seo属于运营还是技术
  • 同一个空间可以做两个网站么六安网站建设找哪家
  • 北京做网站的公司排名做直播网站软件有哪些软件
  • 郑州网站免费制作娃哈哈网络营销策划方案
  • 内蒙古自治区建设厅网站婚庆公司网站建设方案
  • 网站外链暴涨淄博周村网站建设报价
  • 做网站什么最重要有哪些公众号是小黄油的
  • 找人做海报在什么网站找什么网站做玩具的比较多
  • 自己做的网站主页被人篡改seo技术培训价格表
  • s上海网站建设郓城如何做网站seo
  • 网站目录做外链wordpress分类加密
  • 重庆建站公司哪个好网站制作知名 乐云践新专家
  • 合肥专业做网站公司科技网站首页
  • 网站首页的名字通常是网站建设用哪个