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

淘宝客可道cms网站建设上海网络优化服务

淘宝客可道cms网站建设,上海网络优化服务,网站怎么做才能被百度收录,青岛公司网站建设开发目录 堆的结构类型定义 最大堆的创建 堆的插入 堆的插入的三种情况 代码实现 哨兵元素 堆的结构类型定义 #define ElementType int typedef struct HNode* Heap; /* 堆的类型定义 */ struct HNode {ElementType* Data; /* 存储元素的数组 */int Size; /* 堆中…

目录

堆的结构类型定义

最大堆的创建

堆的插入

堆的插入的三种情况

代码实现

哨兵元素


堆的结构类型定义

#define ElementType int
typedef struct HNode* Heap; /* 堆的类型定义 */
struct HNode 
{ElementType* Data; /* 存储元素的数组 */int Size;          /* 堆中当前元素个数 */int Capacity;      /* 堆的最大容量 */
};

HNode中的两个成员变量:

一个ElementType类型的指针Data,用于存储堆中的元素;

一个int类型的Size,用于表示堆中当前的元素个数;

还有一个int类型的Capacity,用于表示堆的最大容量。

最大堆的创建

typedef Heap MaxHeap; /* 最大堆 */
typedef Heap MinHeap; /* 最小堆 */#define MAXDATA 1000  /* 该值应根据具体情况定义为大于堆中所有可能元素的值 */MaxHeap CreateHeap(int MaxSize)
{ /* 创建容量为MaxSize的空的最大堆 */MaxHeap H = (MaxHeap)malloc(sizeof(struct HNode));H->Data = (ElementType*)malloc((MaxSize + 1) * sizeof(ElementType));H->Size = 0;H->Capacity = MaxSize;H->Data[0] = MAXDATA; /* 定义"哨兵"为大于堆中所有可能元素的值*/return H;
}

参数MaxSize表示创建的最大堆的最大容量。

首先,使用malloc申请了HNode结构体类型的内存空间。

接下来,使用malloc申请了(MaxSize+1)个ElementType类型的元素的内存空间,并将申请的指针赋值给H->Data,这个Data数组就是用来存储最大堆中的元素的。

而其中,要申请的内存空间不是MaxSize而是MaxSize+1,是因为:

堆的下标是从1开始的,而不是从0开始的。这样设计的原因是为了方便定位节点和父子节点之间的关系。

下标为0的元素我们定义为“哨兵”,其值应该大于堆中所有可能元素的值,哨兵的作用在后面会详细阐述。

堆的插入

堆的插入的三种情况

代码实现

bool Insert( MaxHeap H, ElementType X )
{ /* 将元素X插入最大堆H,其中H->Data[0]已经定义为哨兵 */int i;if ( IsFull(H) ) { printf("最大堆已满");return false;}i = ++H->Size; /* i指向插入后堆中的最后一个元素的位置 */for ( ; H->Data[i/2] < X; i/=2 )H->Data[i] = H->Data[i/2]; /* 上滤X */H->Data[i] = X; /* 将X插入 */return true;
}

首先判断最大堆是否已满,如果已满则返回false。

如果不满,则将堆的大小加1,i指向插入后堆中的最后一个元素的位置。

然后从i开始向上遍历,如果父结点的值小于X,则将父结点的值下移,直到找到X的插入位置。

这其中有一个关键知识点:

H->Data[0]是哨兵元素,它不小于堆中的最大元素,控制循环结束。

哨兵元素

假定没有哨兵元素或哨兵元素的值为0,而最大堆中的第一个元素是里面的最大值。

那我们看个例子:(关注数组下标i的变化)

插入操作的时间复杂度为: T(N) = O({log_{2}}^{N})


end 


学习自:MOOC——陈越、何钦铭

http://www.zhongyajixie.com/news/3699.html

相关文章:

  • 做影视网站赚钱百度竞价排名公司
  • 做视频的网站跨境电商平台推广
  • 登封seo推广通州优化公司
  • 辽宁响应式网站建设长清区seo网络优化软件
  • 做论坛网站如何赚钱的自助建站seo
  • 网页游戏网址推荐武汉seo群
  • 给人做代工的网站最近的新闻热点
  • 电子工厂网站建设什么是seo文章
  • 山东做网站建设公司网站关键词上首页
  • 山东疫情最严重的地方是哪里杭州百度首页优化
  • 宿州网站建设费用西安关键词优化平台
  • 高级web程序设计:jsp网站开发公司网站模版
  • asp网站建设实例花炮软文广告经典案例100字
  • 手机网站开发兼容性软文范例100字以内
  • 怎么创建个人的网站网络推广推广培训
  • 网站cps后台怎么做网络推广方法的分类
  • 用网站做淘宝客怎么样个人如何建立免费网站
  • 网站开发与编程如何用模板做网站
  • 南昌做网站开发的公司有哪些网页制作接单
  • 湖北黄冈疫情最新情况seo网站优化培训怎么样
  • 青岛网站建设有哪些公司优化快速排序
  • 杭州做小程序软件的公司长沙优化科技有限公司
  • 2017两学一做网站广告宣传语
  • 抽奖机网站怎么做搜索引擎大全排行
  • 不建网站网络营销怎么做北京培训学校
  • 交做网站视频百度云免费网站推广网站在线
  • 网站设置点赞杭州seo网站排名
  • 网站后台查询软件seo咨询师
  • 长春市住房城乡建设委官方网站外贸推广平台哪个好
  • 网站标题改不了seo排名优化推荐