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

德阳百度网站建设wordpress站长统计插件

德阳百度网站建设,wordpress站长统计插件,常州新北区网站建设,深圳网站建设索q.479185700什么是堆? 堆都能用树来表示,一般树的实现都是利用链表。而 二叉堆 是一种特殊的堆,它用完全二叉树来表示,却可以利用数组实现。平时使用最多的是二叉堆。二叉堆易于存储,并且便于索引。堆数据结构像树,但…

什么是堆?

  • 堆都能用树来表示,一般树的实现都是利用链表。
  • 二叉堆 是一种特殊的堆,它用完全二叉树来表示,却可以利用数组实现。平时使用最多的是二叉堆。
  • 二叉堆易于存储,并且便于索引。
  • 堆数据结构像树,但是,是通过数组来实现的(不是通过链表是通过二叉堆)。
  • 最小堆就是从小到达排序,最大堆相反。

实现堆

  • 因为是数组,所以父子节点的关系就不需要特殊的结构去维护,索引之间通过计算就可以得到,省掉了很多麻烦。如果是链表结构,就会复杂很多。
  • 完全二叉树要求叶子节点从左往右填满,才能开始填充下一层,这就保证了不需要对数组整体进行大片的移动。这也是随机存储结构(数组)的短板,即删除一个元素之后,整体往前移是比较费时的。这个特性也导致堆在删除元素的时候,要把最后一个叶子节点补充到树根节点的缘由。
  • 二叉堆像树的样子我可以理解,但将他们安排在数组里的话,通过当前下标怎么就能找到父节点和子节点呢?(父节点、左子树和右子树)
    • 左子树:index * 2 + 1
    • 右子树:index * 2 + 2
    • 父节点:( index - 1 )/ 2

实现最小堆

class MinHeap {constructor() {this.heap = []}// 换位置swap(i1, i2) {let temp = this.heap[i1]this.heap[i1] = this.heap[i2]this.heap[i2] = temp}// 找到父节点getParentIndex(index) {return Math.floor((index - 1) / 2)}// 上(前)移操作up(index) {if (index === 0) returnconst parentIndex = this.getParentIndex(index)if (this.heap[parentIndex] > this.heap[index] ) {this.swap( parentIndex, index )this.up(parentIndex)}}// 找到左侧子节点getLeftIndex(index) {return index * 2 + 1}// 找到右侧子节点getRigthIndex(index) {return index * 2 + 2}// 下(后)移操作down(index) {const leftIndex = this.getLeftIndex(index)const rightIndex = this.getRigthIndex(index)if (this.heap[leftIndex] < this.heap[index]) {this.swap(leftIndex, index)this.down(leftIndex)}if (this.heap[rightIndex] < this.heap[index]) {this.swap(rightIndex, index)this.down(rightIndex)}}// 添加元素insert( value ) {this.heap.push(value)this.up( this.heap.length-1 )}// 删除堆顶pop() {this.heap[0] = this.heap.pop()this.down(0)}// 获取堆顶peek() {return this.heap[0]}// 获取堆长度size() {return this.heap.length}
}let arr = new MinHeap()
arr.insert(5)
arr.insert(4)
arr.insert(6)
arr.insert(1)
arr.pop()
console.log(arr)
console.log(arr.size())
console.log(arr.peek())

leetcode 习题

堆习题

http://www.yayakq.cn/news/913117/

相关文章:

  • 做网站需要提供哪些信息哪公司建设网站
  • 养老院网站建设的好处制作公众号的软件
  • 网站建设文字教程规划和布局营销型网站的四大重点
  • 网站编辑的工作职能有哪些临河 网站建设
  • 余姚公司建设网站北京兼职网站建设
  • 建网站的基本步骤小程序商店制作教程
  • 企业模板网站建设深圳seo优化seo优化
  • 塘沽网站建设公司ps6做网站点哪里保存
  • 韩国的小游戏网站网站制作排版注意事项
  • 案例学 网页设计与网站建设建设银行网站优点
  • 黄冈网站推广软件免费下载微商城app
  • 网站优化协议中国建设银行网站个人客户
  • 怎么看一个网站什么程序做的工程类招聘网站哪个好
  • 展示用网站模板免费下载怎么做才能设计出好的网站
  • 成都建设网站制作如何做网站首页
  • 企业名录网站 优帮云简约风格网站
  • 广元市利州区建设局网站常州网站建设 最易
  • vue cms 网站开发网站开发工具 晴天娃娃
  • 现在网站开发用什么网站吸引用户
  • 南京营销网站建设建一个网站素材哪里来
  • 做环球资源网站有没有效果网站建设存在的问题及建议
  • 网站开发要用什么语言网站制作的关键技术
  • 专业的环保行业网站开发ps做 网站教程
  • 网站建设 甘肃专业的网站建设流程
  • 涿州做网站的公司wordpress批量修改标题
  • 松江做网站企业网站模板建设
  • 网站建设管理 优帮云成都设计公司哪家好
  • 响应式网站编码怎吗设置五一ppt模板免费下载
  • 游戏推广是做什么的seo全称英文怎么说
  • 网站建设课程的感想建站大师排名表2021