文章详情

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

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2023-05-30 21:38

关注

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

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 资料下载
  • 历年真题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯