在堆排序基础上顺便实现下优先队列,纯粹为实现下优先队列的思想,也顾不上代码丑陋了,嘿嘿,自己学习。
public class PriorityQueue<T extends Comparable<T>> {
/**
* 和对排序中一样,第零个元素不做用
*/
private T[] queue;
private int heapSize;
/**
* 初始化队列
* @param a
*/
@SuppressWarnings("unchecked")
public void initPriorityQueue(T[] a){
HeapSortor.buildMaxHeap(a);
heapSize = a.length - 1;
queue = (T[]) Array.newInstance(Comparable.class, 100);
for(int i = 1; i < a.length; ++i)
queue[i] = a[i];
a = null;
}
/**
* 获取优先多列中第一个元素
* @return
*/
public T maxItem(){
return queue[1];
}
/**
* 从队列中删除并返回最大元素,同时通过HeapSortor.maxHeapify保持优先队列特性
* @return
*/
public T extractMax(){
T max = queue[1];
HeapSortor.swap(queue,1, heapSize);
heapSize--;
HeapSortor.maxHeapify(queue, 1, heapSize);
return max;
}
/**
* 将队列的第i个元素增加到key,然后调整使得队列保持优先队列特性
* @param key
* @param i
*/
public void increaseKey(T key, int i){
if( key.compareTo(queue[i]) < 0 )
throw new RuntimeException("The key is not greater than queue[i]");
queue[i] = key;
int parent = i/2;
while( parent > 0 && queue[parent].compareTo(queue[i]) < 0){
HeapSortor.swap(queue, i, parent);
i = parent;
}
}
/**
* 插入关键字key到优先多列中
* @param key
*/
public void insert(T key){
queue[++heapSize] = key;
increaseKey(key, heapSize);
}
}
分享到:
相关推荐
编写优先队列数据(priority_queue)类型,优先队列是0个或多个元素的集合,每个元素都有一个优先权或值,对优先队列执行的操作有1) 查找;2) 插入一个新元素;3) 删除.在最小优先队列(min priority queue)中,查找操作...
优先队列-java可以选择属性和升序降序
用C语言实现一个优先队列;压缩文件中包括三个文件:1.HeapQueue.h优先队列源代码,2.main.cpp测试主函数;3.HeapQueue.h使用说明
可嵌入到matlab中的优先队列,包括pq_create,插入,删去,取顶端,
提出了基于优先队列的时变网络最短路径算法,能克服传统最短路径算法难以对时变网络求解最短路径的缺陷。提出的时间窗选择策略能够在算法求解过程中为节点选择合适的时间窗以降低路径长度,从而求得精确解。进一步地...
堆排序实现优先队列,利用优先队列做了一个小程序,有兴趣看看
数据结构优先队列,是一个简易版优先队列,输入数据及权值可以对其进行插入,删除等操作。
数据结构,课程设计优先队列实验报告 用最大堆实现的优先队列
C语言 堆 优先队列
优先队列求无序整数序列中第k小的元素.cpp
本文提出一种基于K 叉树的优先队列的算法, 通过建立K 叉树堆的数据结构, 从n 个元素中 得到m 个元素的优先队列, 其算法的最坏时间复杂度为O (2m log2n + 2n ). 本算法是基于二叉树堆 的优先队列算法的推广, 并具有较...
分支限界法中的优先队列式分支限界法解装载问题
c++实现的批处理作业调度问题·优先队列式分支限界法·回溯法包括了FlowShop和make类模板,有测试数据data
数据结构 基于链表实现的优先队列 Cpp文件
采用优先队列式分枝限界法求解0/1背包问题,算法设计第五章,描述的很清晰,里面有完整代码,由于害怕你弄混,所以完整运行的代码参考我的博客文章即可
该算法基于Java语言,对算法设计中的优先队列进行了实现,本人能力有限,如有bug请多指教
本程序主要由堆来实现优先队列的数据结构,主要有优先队列的删除,插入。算法复杂度为logn
优先队列课程设计
用头文件封装的优先队列!可以进行插入、查找、删除等操作!