Java基于堆结构实现优先队列功能示例
短信预约 -IT技能 免费直播动态提醒
本文实例讲述了Java基于堆结构实现优先队列功能。分享给大家供大家参考,具体如下:
package Demo;import java.util.NoSuchElementException;public class JPriorityQueue<E> { @SuppressWarnings("hiding") class QueueNode<E> { int capacity; int size; E[] queue; QueueNode(int capacity) { this.capacity = capacity; } } QueueNode<E> node; public void print() { E[] objs=this.node.queue; for(int i=0;i<this.node.size;i++) { System.out.print(objs[i]+" "); } System.out.println(); } @SuppressWarnings("unchecked") public JPriorityQueue(int capacity) { node = new QueueNode<E>(capacity); node.size = 0; node.queue = (E[]) new Object[capacity + 1]; } public void add(E x) { int k = node.size; while (k > 0) { int parent = (k - 1) / 2; E data = node.queue[parent]; @SuppressWarnings({ "unchecked", "rawtypes" }) Comparable<E> key = (Comparable) x; if (key.compareTo(data) >= 0) break; node.queue[k] = data; k = parent; } node.queue[k] = x; node.size++; } public E remove() { int parent = 0; if (node.size == 0) { throw new NoSuchElementException("queue is null"); } E min = node.queue[0];// top E last = node.queue[node.size - 1];// last node.queue[0] = last;// add the last to top node.queue[node.size - 1] = null; node.size--; @SuppressWarnings("unchecked") Comparable<? super E> complast = (Comparable<? super E>) last; if (node.size == 2 && complast.compareTo(node.queue[1]) > 0) { // 只剩下最后两个结点,进行比较 node.queue[0] = node.queue[1]; node.queue[1] = last; } if (node.size > 2) { // 大于三个结点的,向下旋转 while (parent < node.size / 2) { int left = 2 * parent + 1;// left child int right = left + 1;// right child E root = node.queue[parent]; @SuppressWarnings("unchecked") Comparable<? super E> comproot = (Comparable<? super E>) root; if (comproot.compareTo(node.queue[left]) < 0 && comproot.compareTo(node.queue[right]) < 0) break; @SuppressWarnings("unchecked") Comparable<? super E> compleft = (Comparable<? super E>) node.queue[left]; if (compleft.compareTo(node.queue[right]) <= 0) { node.queue[parent] = node.queue[left]; node.queue[left] = root; parent = left; } else { node.queue[parent] = node.queue[right]; node.queue[right] = root; parent = right; } if (right * 2 >= node.size) break; } } return min; } public static void main(String[] args) { System.out.println("编程网测试结果:"); JPriorityQueue<String> queue = new JPriorityQueue<String>(10); queue.add("Z"); queue.add("B"); queue.add("QZA"); queue.add("QBA"); queue.add("EAA"); queue.add("A"); queue.print(); // queue.remove(); // queue.remove(); // queue.remove(); // queue.remove(); // queue.remove(); System.out.println(queue.remove()); System.out.println(queue.remove()); System.out.println(queue.remove()); System.out.println(queue.remove()); System.out.println(queue.remove()); System.out.println(queue.remove()); }}
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
Java基于堆结构实现优先队列功能示例
下载Word文档到电脑,方便收藏和打印~
下载Word文档
猜你喜欢
Java基于堆结构实现优先队列功能示例
本文实例讲述了Java基于堆结构实现优先队列功能。分享给大家供大家参考,具体如下:package Demo;import java.util.NoSuchElementException;/* * 小顶堆 java使用堆结构实现优先队列 *
2023-05-30
2024-04-02
2024-04-02
Java数据结构之优先级队列实例分析
本文小编为大家详细介绍“Java数据结构之优先级队列实例分析”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java数据结构之优先级队列实例分析”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一、堆的概念堆的定义:
2023-06-29
PHP数据结构:堆数据结构的奥妙,实现高效的排序与优先级队列
php 中的堆数据结构是一种满足完全二叉树和堆性质(父结点值大于/小于子结点值)的树状结构,使用数组实现。堆支持两种操作:排序(从小到大提取最大元素)和优先级队列(根据优先级提取最大元素),分别通过 heapifyup 和 heapifyd
2024-05-14
Python实现基本数据结构中队列的操作方法示例
本文实例讲述了Python实现基本数据结构中队列的操作方法。分享给大家供大家参考,具体如下:#! /usr/bin/env python
#coding=utf-8
class Queue(object):def __init__(self
2022-06-04
2024-04-02