网站先做移动站在做pc站可行吗常用的建站软件有哪些

张小明 2025/12/28 20:40:23
网站先做移动站在做pc站可行吗,常用的建站软件有哪些,网站的稳定性,百度网盟推广怎样关闭https://blog.csdn.net/qscftqwe/article/details/155913644 这是上节课的链接#xff0c;大家可以点进去看一下#xff01; 一.堆的实现 关于堆这部分#xff0c;其实只需要搞明白向上建堆和向下建堆动即可#xff0c;这两部分是堆的重难点#xff0c;至于其它的我就不和…https://blog.csdn.net/qscftqwe/article/details/155913644这是上节课的链接大家可以点进去看一下一.堆的实现关于堆这部分其实只需要搞明白向上建堆和向下建堆动即可这两部分是堆的重难点至于其它的我就不和大家讲解了。typedef int HPDataType; class Heap { private: size_t _size;//堆的有效数据 size_t _capacity;//堆的容量 HPDataType* _array;//数组指针 static size_t _npos;//防止溢出 }; size_t Heap::_npos -1;这是相关的成员变量大家看一下即可。二.向上建堆// 堆的插入 void HeapPush(HPDataType x) { if (_size ! _capacity) { _array[_size] x; AdjustUp(); } else { std::cout 堆已满需要先删除数据 std::endl; } } // 向上建堆 void AdjustUp() { size_t child _size - 1;//子节点位置 size_t parent (child - 1) / 2;//父节点位置 while (child 0) { if (_array[child] _array[parent])//孩子大于父节点 { std::swap(_array[parent], _array[child]);//交换孩子和父节点 child parent; parent (child - 1) / 2;//往上浮和上面继续比较 } else { break; } } }向上建堆是堆插入的重要实现函数下面我将讲解向上建堆的相关知识。我们向上建堆的时候我们要插入的地方是已经符合堆的规则的也就是说我们要新插入这个元素是需要继续维护堆的性质的我们拿大堆举例。现在我们要插入一个9那么该这么处理呢首先图中9这个元素就是我们要插入的新元素首先我们知道大堆的性质就是父大于子那么如果我们插入的这个元素比父亲大那么是不是需要更换一下呀size_t child _size - 1;//当前位置 size_t parent (child - 1) / 2;//父节点位置 if (_array[child] _array[parent])//孩子大于父节点 { std::swap(_array[parent], _array[child]);//交换孩子和父节点 }那么代码的实现就应该是这样首先我们要找到父节点的位置然后拿父节点和子节点比较。至于新插入的节点是child-1是因为我是先执行这个代码_array[_size] x然后再向上建堆因此要-1至于为什么parent的位置是child-1/ 2这就关于完全二叉树的相关知识。执行完代码的结果是这样的你发现还是不符合堆的性质因为9孩子 8父亲那我们是不是需要继续和父亲进行比较那么是不是就需要用到循环。while (child 0) { if (_array[child] _array[parent])//孩子大于父节点 { std::swap(_array[parent], _array[child]);//交换孩子和父节点 pos parent; parent (child - 1) / 2;//往上浮和上面继续比较 } }那么相关代码就是 child parent; parent (child - 1) / 2;这两行分别是更新孩子节点和父节点。那么至于循环条件为什么是child0呢其实很简单因为如果孩子是根节点那么它是没有父节点既然没有父节点还这么进行比较呢因此child0就是我们循环条件终止。其实大家看完这个代码发现是没有扩容的至于我为什么没有加扩容其实我是这么想的堆的重点是向上建堆和向下建堆这两个是堆的核心至于其他核心操作其实就是根据这两个进行的因此我们重点是学习这两个核心。说到底还是我想偷懒了不好意思哈三.向下建堆说完了向上建堆我们又来认识一下向下建堆。首先如果说向上建堆是子去和父比即子为主动父为被动那么向下建堆就是父去和子比即父为主动子为被动// 堆的删除 void HeapPop() { assert(!HeapEmpty());//不能为空 std::swap(_array[0], _array[_size - 1]);//交换第一个和最后一个元素 _size--; AdjustDown(0); } // 向下建堆 void AdjustDown(size_t parent) { size_t child parent * 2 1;//左孩子 while (child _size) { if (child 1 _size _array[child 1] _array[child]) { child;//右孩子更大 } if (_array[parent] _array[child])//父节点小于最大孩子 { std::swap(_array[parent], _array[child]);//交换大孩子和父节点 parent child; child parent * 2 1;//往下浮和下面继续比较 } else { break;//已满足堆的性质 } } }在解释向下建堆之前我们先了解一下什么情况我们会用到向下建堆那么必然是删除了那堆的删除是这么删的呢通过图片我们可以知道堆的删除是把根节点和最后一个节点进行调换然后只需要把最后一个节点删除即可此时最后一个节点指的是根节点在做完这个动作后我们发现该堆不符合大堆因此我们是不是需要用到向下建堆呀首先我们先获取左孩子然后拿它去和有效字符个数去比确保它不越界。然后下一步就是我们要去比较左孩子和右孩子那一个大注意这个步骤是需要判断右孩子是否为空的避免越界错误然后我们拿父节点和较大子节点比如果父节点较大的子节点那么是不是要交换位置交换完你发现还是不符合堆的性质那是不是就和向上建堆遇到的情况因此我们是不是需要继续更新父节点和子节点的位置。其实向上建堆和向下建堆的最大区别就是在更新父节点和子节点的顺序下向上就是先更新子节点然后再更新父节点向下建堆就是反过来的四.堆的初始化什么叫堆的初始化呢就是我们直接把一个数组转换成堆那么该如何转换呢首先我们需要找到最后一个带有左孩子的父节点这个很简单就是求数组最后一个节点的父亲即可然后从该节点一直到根节点都采取向下建堆即可// 堆的初始化 size_t pos (n - 1) / 2;//找到最后一个非叶子节点且它至少有左孩子 for (size_t i pos; i ! _npos; i--) { AdjustDown(i); }为什么要这样弄呢是因为之所以一个数组不符合堆的性质必然是因为有一颗小树不符合堆的性质那如果这样分析一颗小树不符合堆的性质其必然是父节点和子节点的关系有问题因此我们只要改变父节点和子节点的关系即可那为什么要从最后一个带有左孩子的父节点开始找起直至根节点。不能反过来吗因为如果从根节点开始向下调整可能破坏已调整好的子树然后就是堆的初始化我们为什么要用向下建堆不可以用向上建堆吗关于这个问题我们后面的章节再给大家带来为什么五.堆的完整实现代码#pragma once #includeiostream #includeassert.h typedef int HPDataType; //创建大堆 class Heap { public: Heap() :_size(0) ,_capacity(10) ,_array(new HPDataType[_capacity]) {} // 堆的构建 Heap(HPDataType* a, size_t n) :_size(n) , _capacity(n 0 ? n * 2 : 10)//相当于开双倍容量 ,_array(new HPDataType[_capacity]) { if (n 0)//避免为空 { for (size_t i 0; i n; i)//拷贝数据 { _array[i] a[i]; } // 堆的初始化 size_t pos (n - 1) / 2;//找到最后一个非叶子节点且它至少有左孩子 for (size_t i pos; i ! _npos; i--) { AdjustDown(i); } } } // 堆的销毁 ~Heap() { delete[] _array; _array nullptr; _size _capacity 0; } // 向下建堆 void AdjustDown(size_t parent) { size_t child parent * 2 1;//左孩子 while (child _size) { if (child 1 _size _array[child 1] _array[child]) { child;//右孩子更大 } if (_array[parent] _array[child])//父节点小于最大孩子 { std::swap(_array[parent], _array[child]);//交换大孩子和父节点 parent child; child parent * 2 1;//往下浮和下面继续比较 } else { break;//已满足堆的性质 } } } // 向上建堆 void AdjustUp() { size_t child _size - 1;//当前位置 size_t parent (child - 1) / 2;//父节点位置 while (child 0) { if (_array[child] _array[parent])//孩子大于父节点 { std::swap(_array[parent], _array[child]);//交换孩子和父节点 child parent; parent (child - 1) / 2;//往上浮和上面继续比较 } else { break; } } } // 堆的插入 void HeapPush(HPDataType x) { if (_size ! _capacity) { _array[_size] x; AdjustUp(); } else { std::cout 堆已满需要先删除数据 std::endl; } } // 堆的删除 void HeapPop() { assert(!HeapEmpty());//不能为空 std::swap(_array[0], _array[_size - 1]);//交换第一个和最后一个元素 _size--; AdjustDown(0); } // 取堆顶的数据 HPDataType HeapTop()const { assert(!HeapEmpty());//不能为空 return _array[0]; } // 堆的数据个数 size_t HeapSize()const { return _size; } // 堆的判空 bool HeapEmpty()const { return _size 0; } private: size_t _size;//堆的有效数据 size_t _capacity;//堆的容量 HPDataType* _array;//数组指针 static size_t _npos;//防止溢出 }; size_t Heap::_npos -1;好了今天的内容就讲到这里吧我们今天的重点是讲解用完全二叉树的思想实现的一种数据结构类型堆而堆的实现重点其实是再向上建堆和向下建堆这两个概念关于堆还有一个重难点的知识就是为什么堆的初始化我们用的是向下建堆
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

万网网站空间服务范围做高大上分析的网站

Linly-Talker开源协议说明:可商用范围与限制条款 在人工智能技术加速落地的今天,数字人已经不再是科幻电影里的概念,而是逐渐成为教育、客服、直播、企业服务等场景中的实际生产力工具。过去,打造一个能说会动的数字人需要专业的3…

张小明 2025/12/28 10:16:12 网站建设

单位网站建设服务网站开发公司安心加盟

Dify平台如何用“零代码”实现精准实体识别 在企业每天处理成千上万条客户反馈的今天,如何从一段杂乱无章的对话中快速提取出“谁、遇到了什么问题、什么时候发生的”这些关键信息?传统做法是让客服手动填写工单,或者写一堆正则表达式去匹配电…

张小明 2025/12/28 10:16:09 网站建设

北方外贸网站建设猎奇网站源码

Obsidian性能优化终极指南:让你的知识库运行如飞 【免费下载链接】awesome-obsidian 🕶️ Awesome stuff for Obsidian 项目地址: https://gitcode.com/gh_mirrors/aw/awesome-obsidian 还在为Obsidian启动缓慢、编辑卡顿而烦恼吗?当你…

张小明 2025/12/28 10:16:05 网站建设

认证空间官方网站旧房改造室内装修设计公司

李跳跳自定义规则:3分钟告别手机弹窗烦恼 【免费下载链接】LiTiaoTiao_Custom_Rules 李跳跳自定义规则 项目地址: https://gitcode.com/gh_mirrors/li/LiTiaoTiao_Custom_Rules 还在为手机应用中不断弹出的广告、更新提示和权限请求而烦恼吗?李跳…

张小明 2025/12/28 10:16:02 网站建设

在淘宝做网站可以退货退款么wordpress关闭裁剪缩略图

接上一篇文章继续: Android —【经验篇】项目上线前工序:CentOS 服务器环境搭建(一) 文章目录一、部署 SpringBoot 项目1.1 打包 SpringBoot jar 包1.2 导入数据库文件,以.sql结尾的文件1.3 执行 SpringBoot Jar 包1.4…

张小明 2025/12/28 10:16:00 网站建设

网站404怎么做大气好看的网站

Qt 编程中的文件、流与 XML 处理 1. 跨平台文件处理的挑战 在开发跨平台应用程序时,处理文件是一个复杂的问题。不同平台在文件系统的基本特性上存在差异,例如 Unix 系统使用斜杠 / 作为路径分隔符,而 Windows 平台使用反斜杠 \ 。此外,还有不同的行尾符和编码方式等…

张小明 2025/12/28 10:15:57 网站建设