A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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

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
版权声明:本文为博主原创文章,转载请附上博文链接!

1 个回复

倒序浏览
奈斯,感谢分享
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马