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

企业网站优化推广公司免费建网站的平台

企业网站优化推广公司,免费建网站的平台,网络公司经营范围网站建设,宁波外贸公司有哪些在上篇文章数据结构6——树与二叉树中,我们了解了树和二叉树的概念,接着上篇文章,在本篇文章中我们学习二叉树顺序结构的实现。 目录 1. 二叉树的顺序存储结构 2. 堆的概念及结构 1. 堆的概念 2. 堆的结构 3. 堆的实现 1. 堆节点 2. 交…

在上篇文章数据结构6——树与二叉树中,我们了解了树和二叉树的概念,接着上篇文章,在本篇文章中我们学习二叉树顺序结构的实现。



目录

1. 二叉树的顺序存储结构

2. 堆的概念及结构

1. 堆的概念

2. 堆的结构

3. 堆的实现

1. 堆节点

2. 交换节点

3. 打印

4. 堆的插入

向上调整:

插入:

5. 堆的删除

向下调整:

删除:

6. 初始化

7. 销毁

验证:

源代码:

Heap.h:

Heap.c:

test.c:


1. 二叉树的顺序存储结构

二叉树一般可以使用两种结构存储,一种是顺序结构,一种是链式结构。本篇文章我们先来研究二叉树的顺序存储,下篇文章详解二叉树的链式存储。

普通的二叉树是不适合用数组来存储的,因为可能会存在大量的空间浪费。而完全二叉树更适合使用顺序结构存储。现实中我们通常把堆(一种二叉树)使用顺序结构的数组来存储,需要注意的是这里的堆和操作系统虚拟进程地址空间中的堆是两回事,一个是数据结构,一个是操作系统中管理内存的一块区域分段。

如图: 完全二叉树顺序存储:

非完全二叉树顺序存储:

2. 堆的概念及结构

1. 堆的概念

简单来说,堆除了是一棵完全二叉树之外,还要满足堆序性。

堆中每个节点的值都大于等于其子节点的值,根节点是堆中最大的元素,这样的堆称为最大堆或大根堆;

相反的,堆中每个节点的值都小于等于其子节点的值,根节点是堆中最小的元素,这样的堆称为最小堆或小根堆;

2. 堆的结构

3. 堆的实现

(本篇文章只实现最小堆,最大堆与最小堆是相同的道理)

1. 堆节点

typedef int HPDataType;
//堆的物理结构与顺序表相似
typedef struct Heap
{HPDataType* a;int size;int capacity;
}HP;

2. 交换节点

//交换
void Swap(HPDataType* p1, HPDataType* p2)
{HPDataType tmp = *p1;*p1 = *p2;*p2 = tmp;
}

3. 打印

//打印
void HeapPrint(HP* php)
{assert(php);for (size_t i = 0; i < php->size; i++){printf("%d ", php->a[i]);}printf("\n");
}

4. 堆的插入

可是现在堆属性并不满足,因为30在5的上面,这是一个最小堆,我们需要将小的数字在上面。

为了恢复堆属性,我们需要交换30和5:

可是现在仍旧没有满足最小堆的堆属性,所以还需要交换10和5:

此时才得到了最小堆。

因此在插入数据后每次都要进行向上调整,于是向上调整的实现为:

向上调整:

//向上调整
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;}}
}

插入:

//插入
void HeapPush(HP* php, HPDataType x)
{assert(php);//判断是否需要扩容if (php->size == php->capacity){int newCapacity = php->capacity == 0 ? 4 : php->capacity * 2;HPDataType* tmp = 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);//传数组的最后一个数据
}

5. 堆的删除

由于堆顶是最大或最小元素,为了满足堆属性,所以堆中每次只能删除堆顶元素,一般的做法是先将堆顶元素与数组末尾元素先交换,再删除末尾元素。

可是现在40在了堆顶,反而成了最大的元素,并不满足最小堆,这时就需要向下调整:

每次删除都要调整,所以向下调整的具体实现为:

向下调整:

//向下调整
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 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);
}

6. 初始化

//初始化
void HeapInit(HP* php)
{assert(php);php->a = NULL;php->size = 0;php->capacity = 0;
}

7. 销毁

//销毁
void HeapDestroy(HP* php)
{assert(php);free(php->a);php->a = NULL;php->size = php->capacity = 0;
}

验证:

int main()
{int a[] = { 9,3,7,10,24,14,28,72,21,5 };HP hp;HeapInit(&hp);for (size_t i = 0; i < sizeof(a) / sizeof(int); i++){HeapPush(&hp, a[i]);}HeapPrint(&hp);HeapDestroy(&hp);return 0;
}



源代码:

Heap.h:

#pragma once#include <stdio.h>
#include <stdlib.h>
#include <assert.h>typedef int HPDataType;
//堆的物理结构与顺序表相似
typedef struct Heap
{HPDataType* a;int size;int capacity;
}HP;//交换
void Swap(HPDataType* p1, HPDataType* p2);//打印
void HeapPrint(HP* php);//初始化
void HeapInit(HP* php);//向上调整
void AdjustUP(HPDataType* a, int child);
//插入
void HeapPush(HP* php, HPDataType x);//向下调整
void AdjustDown(HPDataType* a, int n, int parent);
//删除
void HeapPop(HP* php);//销毁
void HeapDestroy(HP* php);

Heap.c:

#include "Heap.h"//交换
void Swap(HPDataType* p1, HPDataType* p2)
{HPDataType tmp = *p1;*p1 = *p2;*p2 = tmp;
}//打印
void HeapPrint(HP* php)
{assert(php);for (size_t i = 0; i < php->size; i++){printf("%d ", php->a[i]);}printf("\n");
}//向上调整
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;}}
}//插入
void HeapPush(HP* php, HPDataType x)
{assert(php);//判断是否需要扩容if (php->size == php->capacity){int newCapacity = php->capacity == 0 ? 4 : php->capacity * 2;HPDataType* tmp = 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);//传数组的最后一个数据
}//向下调整
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 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);
}//初始化
void HeapInit(HP* php)
{assert(php);php->a = NULL;php->size = 0;php->capacity = 0;
}//销毁
void HeapDestroy(HP* php)
{assert(php);free(php->a);php->a = NULL;php->size = php->capacity = 0;
}

test.c:

int main()
{int a[] = { 9,3,7,10,24,14,28,72,21,5 };HP hp;HeapInit(&hp);for (size_t i = 0; i < sizeof(a) / sizeof(int); i++){HeapPush(&hp, a[i]);}HeapPrint(&hp);HeapDestroy(&hp);return 0;
}

文章转载自:
http://biltong.pfbx.cn
http://divesture.pfbx.cn
http://refractor.pfbx.cn
http://cosmetic.pfbx.cn
http://plumbing.pfbx.cn
http://infraction.pfbx.cn
http://chamfer.pfbx.cn
http://dynatron.pfbx.cn
http://smoky.pfbx.cn
http://coking.pfbx.cn
http://coverall.pfbx.cn
http://deter.pfbx.cn
http://onymous.pfbx.cn
http://hellish.pfbx.cn
http://microfarad.pfbx.cn
http://finitary.pfbx.cn
http://ringgit.pfbx.cn
http://boloney.pfbx.cn
http://civicism.pfbx.cn
http://upbreed.pfbx.cn
http://burke.pfbx.cn
http://ussc.pfbx.cn
http://aural.pfbx.cn
http://diplodocus.pfbx.cn
http://infinity.pfbx.cn
http://tritish.pfbx.cn
http://tetrahedrane.pfbx.cn
http://sadi.pfbx.cn
http://thioacetamide.pfbx.cn
http://sharer.pfbx.cn
http://wheatgrass.pfbx.cn
http://misappropriate.pfbx.cn
http://barren.pfbx.cn
http://whipt.pfbx.cn
http://broadway.pfbx.cn
http://pelviscope.pfbx.cn
http://agronomics.pfbx.cn
http://overcolour.pfbx.cn
http://thurification.pfbx.cn
http://bananalander.pfbx.cn
http://superposition.pfbx.cn
http://sportscaster.pfbx.cn
http://imputable.pfbx.cn
http://anuretic.pfbx.cn
http://viselike.pfbx.cn
http://steely.pfbx.cn
http://mordant.pfbx.cn
http://setoff.pfbx.cn
http://aaup.pfbx.cn
http://lasecon.pfbx.cn
http://semisubterranean.pfbx.cn
http://keelboat.pfbx.cn
http://churchianity.pfbx.cn
http://relieved.pfbx.cn
http://distress.pfbx.cn
http://gambeson.pfbx.cn
http://anesthetize.pfbx.cn
http://saddle.pfbx.cn
http://bagarre.pfbx.cn
http://tetanal.pfbx.cn
http://jehad.pfbx.cn
http://infighter.pfbx.cn
http://presence.pfbx.cn
http://talofibular.pfbx.cn
http://nona.pfbx.cn
http://panathenaea.pfbx.cn
http://chopfallen.pfbx.cn
http://aridisol.pfbx.cn
http://feelthy.pfbx.cn
http://nascence.pfbx.cn
http://sowens.pfbx.cn
http://onfall.pfbx.cn
http://largesse.pfbx.cn
http://adnascent.pfbx.cn
http://merosymmetry.pfbx.cn
http://careerist.pfbx.cn
http://renowned.pfbx.cn
http://baleful.pfbx.cn
http://gynecomastia.pfbx.cn
http://dahomean.pfbx.cn
http://newswriting.pfbx.cn
http://theopathic.pfbx.cn
http://labradorian.pfbx.cn
http://barbeque.pfbx.cn
http://toom.pfbx.cn
http://subpleural.pfbx.cn
http://demonography.pfbx.cn
http://polysyllogism.pfbx.cn
http://knickknack.pfbx.cn
http://rocksy.pfbx.cn
http://necrophagy.pfbx.cn
http://chiao.pfbx.cn
http://endophasia.pfbx.cn
http://lugansk.pfbx.cn
http://inshoot.pfbx.cn
http://pariah.pfbx.cn
http://publicly.pfbx.cn
http://gramarie.pfbx.cn
http://pillow.pfbx.cn
http://forecastleman.pfbx.cn
http://www.15wanjia.com/news/61902.html

相关文章:

  • 网页升级紧急通知正常更新厦门seo关键词
  • 灯具做外贸的网站有哪些怎么申请网站详细步骤
  • 动态网站asp怎么做百度推广竞价托管
  • 初学php者网站首页怎么做b站推广网站入口202
  • 做网站语言seo 服务
  • 一个公司只能备案一个网站吗十八未成年禁用免费app
  • 中山哪里有做网站品牌策划公司介绍
  • 北京高端品牌网站定制seo排名优化的方法
  • 做好的网站模板怎么修改营销模式有哪些
  • 做网站要学什么专业电商平台怎么注册
  • 接计设做的网站网站查询域名ip
  • wordpress和网站区别刷关键词指数
  • 做微商海报的网站百度账号24小时人工电话
  • 搭建本地网站做色流互联网推广渠道有哪些
  • 网站做压测武汉seo推广优化
  • 成都做网页公司快排seo软件
  • 如何用服务器搭建网站学电脑办公软件培训班
  • 政务网站的建设原则开源crm系统
  • 宁波网站推广方式定制公司石家庄百度搜索引擎优化
  • 深圳大型论坛网站建设湖南专业关键词优化
  • 高端网站建设谷美百度seo关键词排名查询
  • wordpress全站公告刷排名seo软件
  • 黑龙江省道路建设网站平面设计网站
  • 前端网站主题怎么做小程序开发
  • 网站制作视频seo服务运用什么技术
  • 青海城乡住房和建设厅网站郑州网站营销推广公司
  • 天水网站制作公司如何做网络推广营销
  • 一些免费的网站国内产女装一线二线品牌知乎
  • 长沙专业做网站公司seo线上培训班
  • 怎样创建个人购物网站合肥网络优化公司有几家