欢迎移步博主CSDN:[CSDN博客](https://blog.csdn.net/weixin_42327790/article/details/102903014) # 数据结构之二叉堆与优先队列的学习 ## 简介 二叉堆本质上是一种完全二叉树,采用顺序结构进行存储,它分为两种类型 * 最大堆 * 最小堆 最大堆的任何一个节点都大于或等于它的左右孩子节点 最小堆的任何一个节点都小于或等于它的孩子节点 --- ## 二叉堆的用途与基本操作的实现 二叉堆是实现堆排序和优先队列的基础。 下面我们将用代码实现最小堆的上浮,下沉操作 **完整java代码** 二叉堆Heap类基本操作代码实现: ```java package com.dataStructure.Heap; import java.lang.reflect.Array; import java.util.Arrays; /** * author zbl * * datetime 2019.11.4 * */ //二叉堆 public class Heap { //采用数组存储二叉堆 private int [] array; @Override public String toString() { return "Heap{" + "array=" + Arrays.toString(array) + '}'; } //构造函数 public Heap(int [] array , int length){ this.array = Arrays.copyOf(array,length); } //上浮调整 public void upAdjust(){ int childIndex = array.length - 1; int parentIndex = (childIndex - 1) / 2; //暂存最后一个节点数据 int tmp = array[childIndex]; //小顶堆 while(childIndex > 0 && tmp 0 && tmp= this.array.length){ resize(); } this.array[this.size++] = key; upAdjust(); } //扩容 public void resize(){ //容量翻倍 int newSize = this.size * 2; this.array = Arrays.copyOf(this.array,newSize); } } ``` 主函数: ```java package com.dataStructure; import com.dataStructure.Heap.Heap; import com.dataStructure.Heap.PriorityQueue; /** * author zbl * * datetime 2019.11.5 * */ public class Main { public static void main(String[] args) throws Exception{ PriorityQueue priorityQueue = new PriorityQueue(); priorityQueue.enQueue(3); System.out.println(priorityQueue.toString()); priorityQueue.enQueue(5); System.out.println(priorityQueue.toString()); priorityQueue.enQueue(10); System.out.println(priorityQueue.toString()); priorityQueue.enQueue(2); System.out.println(priorityQueue.toString()); priorityQueue.enQueue(7); System.out.println(priorityQueue.toString()); System.out.println(priorityQueue.deQueue()); System.out.println(priorityQueue.deQueue()); } } ``` ## 参考文献 * 魏梦舒(@程序员小灰)著. 漫画算法--小灰的算法之旅 [M]. 电子工业出版社. 最后修改:2020 年 03 月 14 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 如果觉得我的文章对你有用,请随意赞赏