优先级队列是比栈和队列更专用的数据结构。优先级队列与上面普通的队列相比,主要区别在于队列中的元素是有序的,关键字最小(或者最大)的数据项总在队头。数据项插入的时候会按照顺序插入到合适的位置以确保队列的顺序。优先级队列的内部实现可以用数组或者一种特别的树——堆来实现。
package com.cn.test.queue;
public class PriorityQueue {
private long a[];
private int size; //数组大小
private int nItems;//元素个数
public PriorityQueue(int maxSize){
size=maxSize;
a=new long[size];
nItems=0;
}
//判断队列是否为空
public boolean isEmpty(){
return (nItems==0);
}
//判断队列是否已满
public boolean isFull(){
return (nItems==size);
}
public long peekMin(){
return a[nItems-1];
}
//队列实际存储数量大小
public int size(){
return nItems;
}
//往队列添加数据
public void insert(long value){
if(isFull()){
System.out.println("队列已满!");
return;
}
int j;
if(nItems==0){//空队列直接添加
a[nItems++]= value;
}else{
for(j=nItems-1;j>=0;j--){
if(value>a[j]){
a[j+1] =a[j];
}else{
break;
}
}
a[j+1]=value;
nItems++;
}
}
public long remove(){
if(isEmpty()){
System.out.println("队列为空!");
return 0;
}
return a[--nItems];
}
//打印 队列
public void display(){
for(int i=nItems-1;i>=0;i--){
System.out.println(a+" ");
}
System.out.println(" ");
}
//测试
public static void main(String[] args) throws Exception
{
PriorityQueue priorityQueue=new PriorityQueue(30);
priorityQueue.insert(9);
priorityQueue.insert(6);
priorityQueue.insert(15);
System.out.println("打印输出: ");
priorityQueue.display();
int elem=(int)priorityQueue.remove();
System.out.println("移除队列: "+elem);
System.out.println(" ");
System.out.println("移除队列后打印输出: ");
priorityQueue.display();
}
}
这里实现的优先级队列中,插入操作需要 O(N) 的时间,而删除操作则需要 O(1) 的时间。
参考自:https://mp.weixin.qq.com/s/CEMJV9muvQDoydGHYqogWw
---------------------
【转载,仅作分享,侵删】
作者:小志的博客
原文:https://blog.csdn.net/li1325169021/article/details/87086718
版权声明:本文为博主原创文章,转载请附上博文链接!
|
|