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

威宁建设局网站电脑优化用什么软件好

威宁建设局网站,电脑优化用什么软件好,河南建网站,做电台需要的文章从哪个网站找目录 一.堆的概念及结构 二.接口实现 A.初始化 Heapinit 销毁 Heapdestroy B.插入 Heappush 向上调整 AdjustUp 1.Heappush 2.AdjustUp C.删除 Heappop 向下调整 AdjustDown D.堆的判空 Heapempty 堆顶数据 Heaptop 堆的大小 Heapsize 三.源码 Heap.h He…

 

目录

一.堆的概念及结构

二.接口实现

A.初始化  Heapinit   销毁 Heapdestroy

B.插入 Heappush 向上调整  AdjustUp

1.Heappush

2.AdjustUp

C.删除 Heappop  向下调整  AdjustDown

D.堆的判空  Heapempty  堆顶数据  Heaptop  堆的大小  Heapsize

三.源码

Heap.h

Heap.c

test.c


一.堆的概念及结构

1.概念

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

其实堆是一种二叉树,通常我们都是用数据表实现,也就是说堆的底层是数组,数组中的小标表示二叉树的节点,所以在实现堆之前,我们有必要了解完全二叉树中节点之间的关系

1.理解父节点 parent 和子节点 child;

2.了解父节点与子节点之间的关系:

   A.parent=(child-1)/2;

   B.左孩子child=2*parent+1;

   C.右孩子child=2*parent+2。

二.接口实现

A.初始化  Heapinit   销毁 Heapdestroy

这里的初始化和销毁都很简单,相信这对学到堆的人并不是什么难事,和顺序表的操作是一样的,如果实在不理解的话,请看 ->  顺序表

B.插入 Heappush 向上调整  AdjustUp

1.Heappush

插入数据很简单,直接对数组赋值,然后 size 再加加就行了,但是在插入完数据后,我们得保证它是堆,所以这就需要用到向上调整这个函数。

2.AdjustUp

假设我们建的是大堆,我们将新插入的节点与它的父节点比较:

1.如果比它的父节点大,则与其交换,所以交换后的父节点就成为了子节点,再与其父节点比较,以此类推

2.如果child<=0 则结束循环

void Swap(HPdatatype* p1, HPdatatype* p2)  //交换函数
{HPdatatype tmp = *p1;*p1 = *p2;*p2 = tmp;
}void AdjustUp(HPdatatype* arr, int child)   //向上调整
{assert(arr);int parent = (child - 1) / 2;while (child > 0){if (arr[child] > arr[parent]){Swap(&arr[child], &arr[parent]);child = parent;parent = (child - 1) / 2;}elsebreak;}
}void Heappush(Heap* php, HPdatatype x)
{assert(php);if (php->size == php->capacity){HPdatatype* tmp = (HPdatatype*)realloc(php->arr, 2 * sizeof(HPdatatype) * php->capacity);if (tmp == NULL){perror("realloc fail");exit(-1);}php->arr = tmp;php->capacity *= 2;}php->arr[php->size] = x;php->size++;AdjustUp(php->arr, php->size - 1);  //注意这里要传size-1,因为size表示的是下一个位置
}

C.删除 Heappop  向下调整  AdjustDown

1.删除的话,我们是要删除堆顶的数据,因为删除堆尾的数据并没有什么实际意义,删除就是让size--,但是堆顶数据的下标是0,所以在删除前应先交换堆顶和堆尾的数据

2.删除完后,还要保持它还是个堆,不能把后面的顺序搞乱了,要想达到这个目的,就需要使用到向下调整这个函数;

3.假设是大堆,向下调整是父节点与其较大的子节点比较,如果较大的那个子节点大于父节点,则二者交换,然后较大的子节点成为了新的父节点,当子节点的下标大于或是等于节点总数,也就是size时,就结束循环。

 

D.堆的判空  Heapempty  堆顶数据  Heaptop  堆的大小  Heapsize

这些接口的实现都非常简单,博主就不在这里讲述了,可以参考后面的源码。


三.源码

Heap.h

#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <stdbool.h>
#include <time.h>#define MAX_MIN <   //通过改变这里的符号,可以决定是建大堆还是小堆typedef int HPdatatype;typedef struct Heap
{HPdatatype* arr;int size;int capacity;
}Heap;void Heapinit(Heap* php);void Swap(HPdatatype* p1, HPdatatype* p2);void AdjustUp(HPdatatype* arr, int child);  //向上调整void Heappush(Heap* php, HPdatatype x);void AdjustDown(HPdatatype* arr, int parent, int n);  //向下调整void Heappop(Heap* php);HPdatatype Heaptop(Heap* php);int Heapsize(Heap* php);bool Heapempty(Heap* php);void Heapdestroy(Heap* php);

Heap.c

#include "Heap.h"void Heapinit(Heap* php)
{assert(php);php->arr = (HPdatatype*)malloc(sizeof(HPdatatype) * 4);if (php->arr == NULL){perror("malloc fail");exit(-1);}php->size = 0;php->capacity = 4;
}void Swap(HPdatatype* p1, HPdatatype* p2)
{HPdatatype tmp = *p1;*p1 = *p2;*p2 = tmp;
}///Сvoid AdjustUp(HPdatatype* arr, int child)
{assert(arr);int parent = (child - 1) / 2;while (child > 0){if (arr[child] MAX_MIN arr[parent]){Swap(&arr[child], &arr[parent]);child = parent;parent = (child - 1) / 2;}elsebreak;}
}void Heappush(Heap* php, HPdatatype x)
{assert(php);if (php->size == php->capacity)   //插入前,判断数组是否已满{HPdatatype* tmp = (HPdatatype*)realloc(php->arr, 2 * sizeof(HPdatatype) * php->capacity);if (tmp == NULL){perror("realloc fail");exit(-1);}php->arr = tmp;php->capacity *= 2;}php->arr[php->size] = x;php->size++;AdjustUp(php->arr, php->size - 1);  //这里要传size-1
}void AdjustDown(HPdatatype* arr, int parent, int n)
{assert(arr);int child = 2 * parent + 1;while (child < n){//判断较大(较小)的子节点if ((child + 1) < n && arr[child + 1] MAX_MIN arr[child])  {child++;}if (arr[child] MAX_MIN arr[parent]){Swap(&arr[child], &arr[parent]);parent = child;child = 2 * parent + 1;}elsebreak;}
}void Heappop(Heap* php)
{assert(php);assert(php->size);Swap(&php->arr[0], &php->arr[php->size - 1]);php->size--;AdjustDown(php->arr, 0, php->size);
}HPdatatype Heaptop(Heap* php)
{assert(php);assert(php->size);   //为空时不能取数据return php->arr[0];
}int Heapsize(Heap* php)
{assert(php);return php->size;
}bool Heapempty(Heap* php)
{assert(php);return php->size == 0;  //size==0即为空
}void Heapdestroy(Heap* php)
{assert(php);free(php->arr);php->arr = NULL;php->size = 0;php->capacity = 0;
}

test.c

#include "Heap.h"void testHeap()
{Heap hp;Heapinit(&hp);int i = 0, n = 10;int x = 0;while (n){x = rand() % 100 + 1;Heappush(&hp, x);n--;}while (!Heapempty(&hp)){printf("%d  ", Heaptop(&hp));Heappop(&hp);}printf("\n");Heapdestroy(&hp);
}int main()
{srand((unsigned int)time(NULL));testHeap();return 0;
}

🐲👻这循环队列的讲解就到这里了,若有错误或是建议欢迎小伙伴们指出。🐯🤖

🥰🤩希望小伙伴们可以多多支持博主哦。😍😃

😁😄谢谢你的阅读。😼😸

 


文章转载自:
http://dinncoukulele.zfyr.cn
http://dinncoprettiness.zfyr.cn
http://dinncobuskined.zfyr.cn
http://dinncopicket.zfyr.cn
http://dinncolespedeza.zfyr.cn
http://dinncoconquian.zfyr.cn
http://dinncochromatoscope.zfyr.cn
http://dinncobtw.zfyr.cn
http://dinncomisrule.zfyr.cn
http://dinncounworthily.zfyr.cn
http://dinncotishri.zfyr.cn
http://dinncoexodontist.zfyr.cn
http://dinncokurgan.zfyr.cn
http://dinncohotchpot.zfyr.cn
http://dinncosintering.zfyr.cn
http://dinncoheme.zfyr.cn
http://dinncoclumsy.zfyr.cn
http://dinncopalkee.zfyr.cn
http://dinncoterminative.zfyr.cn
http://dinncoantipode.zfyr.cn
http://dinncoinformidable.zfyr.cn
http://dinncofantabulous.zfyr.cn
http://dinncokinaesthesis.zfyr.cn
http://dinncophotoresistance.zfyr.cn
http://dinncokiangsu.zfyr.cn
http://dinncosolgel.zfyr.cn
http://dinncotimidness.zfyr.cn
http://dinncofivepence.zfyr.cn
http://dinnconubian.zfyr.cn
http://dinncodynamics.zfyr.cn
http://dinncotrilingual.zfyr.cn
http://dinncoblockage.zfyr.cn
http://dinncoandizhan.zfyr.cn
http://dinncoturkophil.zfyr.cn
http://dinncoserra.zfyr.cn
http://dinncondis.zfyr.cn
http://dinncobeacher.zfyr.cn
http://dinncosuperficially.zfyr.cn
http://dinncotito.zfyr.cn
http://dinncocostermonger.zfyr.cn
http://dinncomortgager.zfyr.cn
http://dinncokeitloa.zfyr.cn
http://dinncocyberneticist.zfyr.cn
http://dinncotridimensional.zfyr.cn
http://dinncoironize.zfyr.cn
http://dinncolamplight.zfyr.cn
http://dinncotunellite.zfyr.cn
http://dinncoinconsequently.zfyr.cn
http://dinncointortion.zfyr.cn
http://dinncocoffin.zfyr.cn
http://dinncoserriform.zfyr.cn
http://dinncosild.zfyr.cn
http://dinncohippophobia.zfyr.cn
http://dinncorelativity.zfyr.cn
http://dinncopreferably.zfyr.cn
http://dinncosixfold.zfyr.cn
http://dinncoslovakian.zfyr.cn
http://dinncoexorable.zfyr.cn
http://dinncodamn.zfyr.cn
http://dinncodogginess.zfyr.cn
http://dinncoisodynamic.zfyr.cn
http://dinncotocher.zfyr.cn
http://dinncolionship.zfyr.cn
http://dinncointercrural.zfyr.cn
http://dinncocherubic.zfyr.cn
http://dinncotart.zfyr.cn
http://dinncouncommendable.zfyr.cn
http://dinncowhipster.zfyr.cn
http://dinncoabutter.zfyr.cn
http://dinncohex.zfyr.cn
http://dinncosquaresville.zfyr.cn
http://dinncoudometer.zfyr.cn
http://dinncobrumaire.zfyr.cn
http://dinncoaristate.zfyr.cn
http://dinncosubschema.zfyr.cn
http://dinncomake.zfyr.cn
http://dinnconavigability.zfyr.cn
http://dinncoparaphysis.zfyr.cn
http://dinncohertha.zfyr.cn
http://dinncovenogram.zfyr.cn
http://dinncoyarborough.zfyr.cn
http://dinncochemisette.zfyr.cn
http://dinncobuoyant.zfyr.cn
http://dinncomugwump.zfyr.cn
http://dinncolinoleum.zfyr.cn
http://dinncobiomembrane.zfyr.cn
http://dinncotemerity.zfyr.cn
http://dinncooquassa.zfyr.cn
http://dinncogronland.zfyr.cn
http://dinncorhytidectomy.zfyr.cn
http://dinncophotoelectron.zfyr.cn
http://dinncoautoinoculation.zfyr.cn
http://dinncomultimegaton.zfyr.cn
http://dinncoiraser.zfyr.cn
http://dinncoinequity.zfyr.cn
http://dinncosympatric.zfyr.cn
http://dinncoarchegonium.zfyr.cn
http://dinncosamsonite.zfyr.cn
http://dinncointermontane.zfyr.cn
http://dinncofunicular.zfyr.cn
http://www.dinnco.com/news/103777.html

相关文章:

  • 甘肃省环保建设申报网站品牌网络营销策划
  • 四川建设银行手机银行下载官方网站下载安装今日头条新闻10条
  • 网站做推广应该如何来做呢哪里推广建站abc
  • 如何设计出更好用户体验的网站网站很卡如何优化
  • 游戏网站建设的策划广告软文
  • 织梦手机网站怎么做seo自动排名软件
  • 任县网站制作四大营销策略
  • 上海网站建设 网页做技能培训机构排名前十
  • wordpress查看站点官网站内推广内容
  • 房地产图文制作网站网络营销成功案例ppt免费
  • 阿里云ecs做网站郑州网站优化外包
  • 外贸网站和内贸武汉网站快速排名提升
  • 怎么做网站板块知乎推广优化
  • 网站代理工具经典软文案例分析
  • dedecms 网站安装网络推广网站推广
  • 做管理培训的网站有什么如何进行app推广
  • 福建网站备案怎么开网站详细步骤
  • 注册好域名之后怎么做个人网站公司网站制作费用
  • 青岛网站建设加盟公司搜索竞价托管
  • 网站项目建设与管理论文百度热门
  • 建设网站建议百度官方下载
  • 简单的工作室网站模板宣传推广计划怎么写
  • 网站开发demo体验营销
  • 网站做flash好不好网站设计是做什么的
  • ps网站参考线怎么做百度推广如何办理
  • 十大创意广告策划百度爱采购怎么优化排名
  • 深圳快速网站制短网址在线生成
  • 那个网站专做委外发手工广州抖音seo公司
  • seo优化流程简阳seo排名优化课程
  • 网站多少图片怎么做超链接附近有学电脑培训班吗