java手写优先级队列

版权声明:本博主小白一个,希望各位大神多多指教,相互学习。 https://blog.csdn.net/li1325169021/article/details/87086718

优先级队列是比栈和队列更专用的数据结构。优先级队列与上面普通的队列相比,主要区别在于队列中的元素是有序的,关键字最小(或者最大)的数据项总在队头。数据项插入的时候会按照顺序插入到合适的位置以确保队列的顺序。优先级队列的内部实现可以用数组或者一种特别的树——堆来实现。

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[i]+" ");
		}
		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

猜你喜欢

转载自blog.csdn.net/li1325169021/article/details/87086718