优先队列

  优先队列是一种强调顺序的队列,和普通队列一样,遵循先入先出的规则,不同是在放入元素时,就已经按照某种方案进行了优先级的排序,通常是在添加的数据项中给定一套关键字,依照重要程度将关键字小的放在队尾或者队头。剩下的查看,移除操作都和普通队列一样。

  

  这次的java代码实现,规定升序排列元素,并且取队尾的形式展示。

package com.test;

public class Test {

    public static void main(String[] args) {
        priorityQ q = new priorityQ(10);
        q.insert(1);
        q.insert(2);
        q.insert(3);
        q.insert(4);
        
        q.remove();
        
        long m = q.peekMin();
        System.out.println("min:"+m);
        
    }
    
    
}

/**
 * 优先队列
 * @author jingxin
 *
 */
class priorityQ{
    private int maxSize;  // 队列大小
    private long[] queArray;  // 基于数组
    private int nElems;  // 元素下标
    
    public priorityQ(int s){
        maxSize = s;
        queArray = new long[maxSize];
        nElems = 0;
    }
    
    // 添加元素(元素值小的在上)
    public void insert(long item){
        int j;
        if(nElems == 0){
            queArray[nElems++] = item;
        }else{
            // 添加的元素与之前加的元素比较,升序排
            for (j = nElems-1; j >=0; j--) {
                if(item>queArray[j]){
                    queArray[j+1] = queArray[j];
                }else{
                    break;
                }
            }
            // 此时的j是上面最后一次交换的位置
            queArray[j+1] = item;
            nElems++;
        }
    }
    
    // 移除元素
    public long remove(){
        return queArray[--nElems];
    }
    
    // 查看元素
    public long peekMin(){
        return queArray[nElems-1];
    }
    
    public boolean isEmpty(){
        return nElems==0 ;
    }
    
    public boolean isFull(){
        return nElems==maxSize;
    }
            
    
}

 

posted @ 2017-05-11 15:37  x_jingxin  阅读(308)  评论(0编辑  收藏  举报