用java实现队列结构,java实现栈和队列数据结构

  用java实现队列结构,java实现栈和队列数据结构

  Heap(优先级队列)是一种典型的数据结构,其形状是一棵完全二叉树,一般用于解决topk问题。根据父节点是大于等于子节点还是小于等于子节点,可以分为大顶堆和小顶堆。本文实现了大堆顶。

  根据大顶堆的定义,大顶堆的父节点大于等于其子节点,顶元素最大。对于每个子树,它是一个大的顶部堆。然后,可以从最后一个父节点调整到根节点,建立一个大的顶堆。

  这里我们用数组来存储,以heap={3,2,1,5,6,4}为例。我们需要一个init(int[] heap)初始化方法,从最后一个父节点开始逐步将堆调整为大顶堆,其中需要用到adjust(int[] heap,int i,int end)方法。

  调整过程:从最后一个父节点开始,如果当前父节点所扎根的树不符合大顶堆,则进行调整。

  代码实现如下:

  Public void init(int[] heap) {//从最后一个父节点开始调整//逐渐向上调整for(int I=heap.length/2; I 0;i - ) { this.adjust(heap,I,heap . length);} } public void adjust(int[] heap,int i,int end){ int j=I 1;While (j=end) {//在两个子节点Z { j=j 1;中找出较大的节点if(j end heap[j-1]heap[j]);}//如果较大的节点仍然小于根节点,那么以当前节点为根节点的//二叉树已经是一个大顶堆,不需要调整If(heap[I-1]heap[j-1]){ break;}//Adjust,将当前节点换到更大的位置,然后从当前位置开始调整int temp=heap[I-1];heap[I-1]=heap[j-1];heap[j-1]=temp;I=j;j=I ^ 1;}}}大顶堆建好之后,怎么才能得到topk呢?这个时候堆的顶元素是top1,我们只需要取top1元素,把剩下的元素调整到大顶堆,K次之后就可以得到topk了。

  具体流程:我们把最上面的元素和最后一个元素交换,然后把最上面的调整到倒数第二个元素,以此类推。

  以leetcode215数组中第k个最大元素为例:

  给定一个整数数组nums和一个整数k,请返回数组中第k个最大的元素。

  请注意,你需要在数组排序后找到k个最大的元素,而不是k个不同的元素。

  public int findKthLargest(int[]nums,int k){ this . init(nums);//求第k个最大数int end=nums.lengthWhile (k 1) {//将当前堆顶元素放在最后,进行堆调整int temp=nums[0];nums[0]=nums[end-1];nums[end-1]=temp;end=end-1;-k;this.adjust(nums,1,end);} return nums[0];}

  另外,Java本身提供了优先级队列集合类,但效率不如自己实现。

  public int findKthLargest(int[]nums,int k){ PriorityQueueInteger priority queue=new priority queue(k);for(int num : nums){ if(priority queue . size()==k){ if(num priority queue . peek()){ priority queue . poll();priorityQueue.add(数字);}继续;} priority queue . add(num);} return priority queue . poll();}

  关于Java数据结构堆(优先级队列)的实现,本文到此为止。更多相关Java堆内容,请搜索热门IT以前的文章或者继续浏览下面的相关文章。我希望你以后能更多地支持流行音乐!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • mysql复合索引和组合索引,mysql组合索引数据结构
  • mysql复合索引和组合索引,mysql组合索引数据结构,Mysql之组合索引方法详解
  • mysql复合索引和组合索引,mysql复合索引数据结构
  • mysql复合索引和组合索引,mysql复合索引数据结构,MySQL的复合索引总结
  • b+树 多路搜索树,数据结构中树的分类
  • b+树 多路搜索树,数据结构中树的分类,数据结构-树(三):多路搜索树B树、B+树
  • avl树的构造,avl树特性,数据结构之AVL树详解
  • 数据结构c语言哈夫曼树,c语言哈夫曼树的构造,使用C语言详解霍夫曼树数据结构
  • c语言数据结构算法编程库,数据结构 c语言中文网
  • c语言数据结构算法编程库,数据结构 c语言中文网,C语言编程数据结构基础详解小白篇
  • c++纸牌游戏,数据结构纸牌游戏c语言
  • c++纸牌游戏,数据结构纸牌游戏c语言,C语言实战之纸牌游戏
  • ,,c#解析jobject的数据结构
  • ,,javascript数据结构之多叉树经典操作示例【创建、添加、遍历、移除等】
  • ,,Java 数据结构与算法系列精讲之背包问题
  • 留言与评论(共有 条评论)
       
    验证码: