栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

本文实例讲述了Java基于堆结构实现优先队列功能。分享给大家供大家参考,具体如下:

package Demo;
import java.util.NoSuchElementException;

public class JPriorityQueue {
  @SuppressWarnings("hiding")
    class QueueNode {
    int capacity;
    int size;
    E[] queue;
    QueueNode(int capacity) {
      this.capacity = capacity;
    }
  }
  QueueNode node;
  public void print()
  {
    E[] objs=this.node.queue;
    for(int i=0;i(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 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 complast = (Comparable) 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 comproot = (Comparable) root;
 if (comproot.compareTo(node.queue[left]) < 0
   && comproot.compareTo(node.queue[right]) < 0)
   break;
 @SuppressWarnings("unchecked")
 Comparable compleft = (Comparable) 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 queue = new JPriorityQueue(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());
  }
}

运行结果:

更多关于java算法相关内容感兴趣的读者可查看本站专题:《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》

希望本文所述对大家java程序设计有所帮助。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/143089.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号