我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Java基于堆结构实现优先队列功能示例

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Java基于堆结构实现优先队列功能示例

本文实例讲述了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

Java数据结构之优先级队列实例分析

本文小编为大家详细介绍“Java数据结构之优先级队列实例分析”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java数据结构之优先级队列实例分析”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一、堆的概念堆的定义:
2023-06-29

PHP数据结构:堆数据结构的奥妙,实现高效的排序与优先级队列

php 中的堆数据结构是一种满足完全二叉树和堆性质(父结点值大于/小于子结点值)的树状结构,使用数组实现。堆支持两种操作:排序(从小到大提取最大元素)和优先级队列(根据优先级提取最大元素),分别通过 heapifyup 和 heapifyd
PHP数据结构:堆数据结构的奥妙,实现高效的排序与优先级队列
2024-05-14

Python实现基本数据结构中队列的操作方法示例

本文实例讲述了Python实现基本数据结构中队列的操作方法。分享给大家供大家参考,具体如下:#! /usr/bin/env python #coding=utf-8 class Queue(object):def __init__(self
2022-06-04

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录