数据结构之--优先级队列(Java代码)

本文介绍了一种基于数组实现的优先级队列数据结构,该队列按关键字大小降序排列,关键字最大的元素始终位于队列头部。文章提供了完整的Java代码实现,并通过实例展示了优先级队列的基本操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

优先级队列是比栈和队列更加有用的数据结构。

跟普通的队列一样,优先级队列也有队头和队尾,并且也是从一端进,一端出。

但是不一样的地方是,优先级队列的值是有序的。

如此一来,关键字最小的数据项(或最大的)总是队列的一端。

在数据项很少或者不太关系速度的情况下,用数组实现优先队列还可以满足。

如果数据项很多,或者速度很快,采用堆是更好的选择。

这次代码以最大的关键字放在队头。

package DataStructure;

/**
 * Created by Hubbert on 2017/11/14.
 */

/*
优先级队列
   从大到小排列.
   [0....n]
   [max...min]
 */
public class PriorityQ {
    private int [] arr;
    private int maxSize;
    private int nItems;

    public PriorityQ( int maxSize ){
        this.maxSize = maxSize ;
        arr = new int[maxSize];
        nItems = 0 ;
    }

    //insert
    public void insert( int number ){
        //当队列还是为空时
        if( nItems == 0 ){
            arr[nItems++] = number ;
        } else {
            int i;
            
            for ( i = nItems - 1; i >= 0  ; i-- ) {
                if( number > arr[i] ){ //如果插入的数据比前一个大
                    arr[i+1] = arr[i]; //把前一个赋值到当前位置
                }else {
                    break;//如果当前值比前一个值大,则直接break;防止继续i--
                }
            }
            arr[i+1] = number ;
            //每次增加,记得加nItems++;
            nItems++;
        }
    }

    //remove
    public int remove () {
        //每次移除,记得加nItems--;
        return arr[--nItems];
    }

    public boolean isFull(){
        return (nItems == maxSize);
    }

    public boolean isEmpty(){
        return (nItems == 0) ;
    }

    public static void main(String [] args){
        PriorityQ pq = new PriorityQ(5);
        pq.insert(22);
        pq.insert(88);
        pq.insert(99);
        pq.insert(20);
        pq.insert(11);

        while (! pq.isEmpty()) {
            System.out.print(pq.remove() + " ");
        }
    }
}

结果如图所示:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值