多平台统一管理软件接口,如何实现多平台统一管理软件接口
299
2023-03-15
Java基于堆结构实现优先队列功能示例
本文实例讲述了java基于堆结构实现优先队列功能。分享给大家供大家参考,具体如下:
package Demo;
import java.util.NoSuchElementException;
/*
* 小顶堆 java使用堆结构实现优先队列
*/
public clashttp://s JPriorityQueue
@SuppressWarnings("hiding")
class QueueNode
int capacity;
int size;
E[] queue;
QueueNode(int capacity) {
this.capacity = capacity;
}
}
QueueNode
public void print()
{
E[] objs=this.node.queue;
for(int i=0;i { System.out.print(objs[i]+" "); } System.out.println(); } @SuppressWarnings("unchecked") public JPriorityQueue(int capacity) { node = new QueueNode node.size = 0; BGFnBX 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 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 queue.add("Z"); queue.add("B"); queue.add("QZA"); queue.add("QBA"); queue.add("EAA"); queue.add("A"); http:// 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程序设计有所帮助。
{
System.out.print(objs[i]+" ");
}
System.out.println();
}
@SuppressWarnings("unchecked")
public JPriorityQueue(int capacity) {
node = new QueueNode
node.size = 0;
BGFnBX 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
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
queue.add("Z");
queue.add("B");
queue.add("QZA");
queue.add("QBA");
queue.add("EAA");
queue.add("A");
http:// 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程序设计有所帮助。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~