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

医院网站管理系统天津西青区离哪个火车站近

医院网站管理系统,天津西青区离哪个火车站近,茶文化网站设计免费,网站建设与管理视频目录 引言 堆的基本概念与特性 堆的插入与向上调整 堆的删除与向下调整 优先队列的设计思路 模板参数设计 比较器的作用 核心接口实现 push pop top 附录(完整代码) 引言 优先队列(Priority Queue)是一种特殊的队列数据结构,其中每…

目录

引言

堆的基本概念与特性

 堆的插入与向上调整

堆的删除与向下调整

优先队列的设计思路

模板参数设计

 比较器的作用 

核心接口实现

push

pop

top

附录(完整代码) 


引言

        优先队列(Priority Queue)是一种特殊的队列数据结构,其中每个元素都有一个优先级。与普通队列不同,优先队列中的元素不是按照先进先出的原则出队,而是按照优先级的高低出队。本文将详细介绍优先队列的实现,包括其底层数据结构——堆的原理,以及完整的C++实现代码。

堆的基本概念与特性

        堆是一种完全二叉树,分为最大堆和最小堆。最大堆中父节点值大于等于子节点,最小堆中父节点值小于等于子节点。这种特性使得堆能高效地维护数据的优先级。

        完全二叉树的数组表示法通过下标关系定位父子节点:

  • 已知子节点下标i:父节点索引:(i - 1) / 2;
  • 已知父节点下标i:左子节点:2*i + 1,右子节点:2*i + 2;

 堆的插入与向上调整

插入操作将新元素置于数组末尾,通过向上调整(adjustUp)维护堆结构:

  1. 比较新节点与父节点的值;
  2. 若违反堆序(最大堆中子节点更大,或最小堆中子节点更小),交换两者;
  3. 重复过程直至根节点或堆序满足。

堆的删除与向下调整

删除堆顶元素时,将末尾元素移至堆顶,通过向下调整(adjustDown)恢复堆结构:

  1. 从根节点开始,比较其与较大(最大堆)或较小(最小堆)子节点的值;
  2. 若违反堆序,交换两者并继续向下检查;
  3. 终止于叶子节点或堆序满足时。

优先队列的设计思路

        优先队列基于堆实现,支持高效获取最高/低优先级元素。关键设计包括:

模板参数设计

  • T:元素类型。
  • Container:默认vector,需支持随机访问和动态扩容。
  • Compare:比较器,默认Less<T>实现最大堆,Greater<T>实现最小堆。

 比较器的作用 

        通过模板参数Compare实现灵活的大小比较策略: 

template <class T>
class Less
{
public:bool operator()(const T& x, const T& y){return x < y;}
};template <class T>
class Greater
{
public:bool operator()(const T& x, const T& y){return x > y;}
};

核心接口实现

push

插入元素并向上调整堆:

public:void push(T data){_con.push_back(data);adjustUp();}
private:void adjustUp(){int child = _con.size() - 1;int parent = (child - 1) / 2;while (parent >= 0){if (com(_con[parent], _con[child])){swap(_con[parent], _con[child]);child = parent;parent = (child - 1) / 2;}else break;}}

pop

移除堆顶元素并向下调整堆:

public:T pop(){T data = _con.front();swap(_con[0], _con[_con.size() - 1]);_con.pop_back();adjustDown();return data;}
private:void adjustDown(){int parent = 0;int child = 1;while (child < size()){if (child + 1 < size()){if (com(_con[child], _con[child + 1])){child = child + 1;}}if (com(_con[parent], _con[child])){swap(_con[parent], _con[child]);parent = child;child = parent * 2 + 1;}else break;}}

top

访问堆顶元素(即数组首元素)

T top() { return _con.front(); }

附录(完整代码) 

#include <vector>
#include <iostream>
#include <cassert>using namespace std;template <class T>
class Less
{
public:bool operator()(const T& x, const T& y){return x < y;}
};template <class T>
class Greater
{
public:bool operator()(const T& x, const T& y){return x > y;}
};template <class T, class Container = vector<T>, class Compare = Less<T>>
class priority_queue
{
public:priority_queue() {}priority_queue(const Container &con) {for (auto& item : con){push(item);}}void push(T data){_con.push_back(data);adjustUp();}T pop(){T data = _con.front();swap(_con[0], _con[_con.size() - 1]);_con.pop_back();adjustDown();return data;}T top() { return _con.front(); }size_t size() { return _con.size(); }bool empty() { return _con.empty(); }private:void adjustUp(){int child = _con.size() - 1;int parent = (child - 1) / 2;while (parent >= 0){if (com(_con[parent], _con[child])){swap(_con[parent], _con[child]);child = parent;parent = (child - 1) / 2;}else break;}}void adjustDown(){int parent = 0;int child = 1;while (child < size()){if (child + 1 < size()){if (com(_con[child], _con[child + 1])){child = child + 1;}}if (com(_con[parent], _con[child])){swap(_con[parent], _con[child]);parent = child;child = parent * 2 + 1;}else break;}}private:Container _con;Compare com;
};


文章转载自:

http://T4lYcKV2.rwmqp.cn
http://ypJe5tOC.rwmqp.cn
http://1QhtZDWf.rwmqp.cn
http://oPGyYKHj.rwmqp.cn
http://aoEaJJRv.rwmqp.cn
http://wpzrI8Tq.rwmqp.cn
http://Ug9MYPmf.rwmqp.cn
http://ZBMDCOgc.rwmqp.cn
http://1LVAz7Dh.rwmqp.cn
http://5MaiLtqF.rwmqp.cn
http://Kk3EGBBb.rwmqp.cn
http://7lQ2AmtI.rwmqp.cn
http://2Mn2pVk4.rwmqp.cn
http://hEDWKhgh.rwmqp.cn
http://EYzTFGHl.rwmqp.cn
http://pruB9NbV.rwmqp.cn
http://npcUIRNb.rwmqp.cn
http://VDLT7U51.rwmqp.cn
http://cNWWuFYY.rwmqp.cn
http://kXjshjfT.rwmqp.cn
http://mDVnJI3P.rwmqp.cn
http://AeZrnGu3.rwmqp.cn
http://6S5yS09b.rwmqp.cn
http://mDnIxpHf.rwmqp.cn
http://Chr8bKBJ.rwmqp.cn
http://ARgoHndR.rwmqp.cn
http://vIrOJE4b.rwmqp.cn
http://UFFOO2xZ.rwmqp.cn
http://Cfi3T3r6.rwmqp.cn
http://7Nfzyrd2.rwmqp.cn
http://www.dtcms.com/wzjs/716090.html

相关文章:

  • 重庆企业网站制作哪家好上海市工程建设咨询监理有限公司
  • 郑州做网站比较专业的机构百度店铺注册
  • 绩效考核表 网站建设搜索引擎优化员简历
  • 全国建设网站免费多用户商城系统源码
  • 线上做笔记的网站网站建设税率
  • 在线药店网站建设上海做网站好的公司
  • 网站空间流量是什么网页制作与网站建设技术大全
  • 网站建设中心联系方式asp旅游网站模板下载
  • 小说网站开发微信购物商城
  • 外贸网站建设培训企业做网站须要注意些什么
  • 陵水网站设计公司网站取源用iapp做软件
  • 苏州公司网站建设报价华文细黑做网站有版权吗
  • 手机网站生成app网站管理平台模板
  • 网站开发难题wordpress最好的编辑器下载
  • wordpress建站Pdf易语言跳到指定网站怎么做
  • 如何制作ppt视频教程网站优化工作内容
  • 湖北强涛建设工程有限公司网站邻水网站建设
  • 小语种网站开发同城推广
  • 怎么制作一个表白网站网站后台改网页底色
  • 怎么用ps做网站首页图片尺寸网站建设和维护合同
  • 网站开发流程详细介绍南阳住房和城乡建设厅网站
  • 非织梦做的网站能仿吗装修公司网站设计
  • 淄博网站建设给力臻动传媒广州建站模板
  • 专业的郑州网站推广成都网站制作东三环
  • 网站开发的总结与展望广告公司手机网站建设
  • 响应式网站模板的特点模版网站开发
  • 做网站那个好海口免费自助建站模板
  • 即墨网站建设在哪优化网站标题和描述的方法
  • 做网站需要什么认证徐州祥云做网站
  • 制作公司网站设建筑企业网站源码