Java数据结构与算法之优先级队列

同样,直接上代码

package com.wayne.example.MyPriorityQueue.PriorityQ;
/*
 * 1,   队列特性:数据项按关键字的值有序,关键值最小的数据项总在队头。
 * 2,   优先级队列通常是使用堆的数据结构来存储。
 * 3,   优先级队列的效率:
 *      a)  插入操作需要O(N)的时间;
 *      b)  删除操作需要O(1)的时间。
 */
public class MyPriorityQueue {
    /*
     * 优先级队列的三个要素
     * 队列预计长度 maxSize
     * 队列的类型 int[] queArray
     * 队列的个数 nItems
     */
    private int maxSize;
    private int[] queArray;
    private int nItems;

    /**
     * 初始化长度为length的空的优先级队列
     * @param length 队列的长度
     */
    MyPriorityQueue(int length){
        maxSize = length;
        queArray = new int[maxSize];
        nItems = 0;
    }

    /**
     * 向该队列中插入元素
     * @param i 待插入的元素
     */
    public void insert(int i){
        if(nItems == 0){
            queArray[nItems] = i;
        }
        else{
            int index;
            for(index = nItems-1;index>=0;index--){
                if(i>queArray[index]){
                    queArray[index+1] = queArray[index];
                }
                else
                    break;
            }
            queArray[index+1] = i;
        }
        nItems++;
    }

    /**
     * 删除优先级队列的元素
     * @return 返回删除的值
     */
    public int remove(){
        return queArray[--nItems];
    }

    /**
     * 判断优先级队列是否为空
     * @return 如果为空,则返回true;如果不为空,则返回false;
     */
    public boolean isEmpty(){
        return nItems == 0;
    }

    /**
     * 判断优先级队列是否满
     * @return 如果满,则返回true;如果不满,则返回false
     */
    public boolean isFull(){
        return nItems == maxSize-1;
    }
}

测试用例

package com.wayne.example.MyPriorityQueue.PriorityQ;

public class MyPriorityQueueApp {

    public static void main(String[] args) {
        MyPriorityQueue myPriorityQueue = new MyPriorityQueue(5);

        myPriorityQueue.insert(3);
        myPriorityQueue.insert(6);
        myPriorityQueue.insert(1);
        myPriorityQueue.insert(7);
        myPriorityQueue.insert(2);

        while(!myPriorityQueue.isEmpty())
            System.out.println(myPriorityQueue.remove());
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值