数据结构——队列——优先级队列

package jxau.lyx.pQueue;
/**
 * 
 * @author liyixiang
 * @2014-9-21
 * @DataStrutureType: 队列——优先级队列
 * @TODO:
 * 		优先级队列
 * 		在优先级队列中,数据按关键字的值有序,这样关键字最小的数据项(或者最大)
 * 总是在队头
 * 		本以为会有一个数据项来表示优先级的大小,其实不用,insert到队列中时,就已经
 * 比较后排序!
 * 		优先级队列不需要front rear 因为front总是nItems-1,rear==0
 */
public class PriorityQueue {

	private int maxSize;                      //队列最大空间
	private long[] queueArray;                //队列空间(此处我们申请的是可比较的整数型数组)
	private int nItems;                        //队中含有的元素个数
	
	/**
	 * 初始化
	 * @param s:队空间大小
	 */
	public PriorityQueue(int s){
		maxSize = s;
		queueArray = new long[maxSize];
		nItems = 0;
	}
	
	/**
	 * 
	 *@liyixiang
	 *@2014-9-20
	 *@param:obj 入队元素
	 *@return:void
	 *@TODO:
	 *		入队:
	 *		先检查队列是否有数据项,如果没有,就插入到下标为0的单元中,否则,从数组
	 *顶部开始上移存在的数据项,直到找到新数据项应当插入的位置,然后,插入数据项,
	 *并把nItems+1,优先级队列可能出现队满情况,应当在insert之前判断isFull
	 *
	 */
	public void insert(long item){
		int j;
		
		if(nItems == 0){
			queueArray[nItems++] = item;
		}else {
			//比较元素大小,使队列中的元素有序
			for(j=nItems-1;j>=0;j--){
				
				if(item > queueArray[j]){
					queueArray[j+1] = queueArray[j];
				}else {
					break;
				}
			}
			
			queueArray[j+1] = item;
			nItems++;
		}
	}
	
	/**
	 * 
	 *@liyixiang
	 *@2014-9-21
	 *@param
	 *@return:Object:移除元素
	 *@TODO:
	 *		出队
	 *		由于优先级队列,元素有序,所以只有最大或者最小元素出队
	 */
	public long remove(){
		return queueArray[--nItems];	                                                                                                                                   
	}
						
	/**
	 * 
	 *@liyixiang
	 *@2014-9-21
	 *@param
	 *@return:Object
	 *@TODO:
	 *		获取优先级最小元素
	 */
	public Object peekMin(){
		 return queueArray[nItems-1];
	}
	
	/**
	 * 
	 *@liyixiang
	 *@2014-9-21
	 *@param
	 *@return:boolean
	 *@TODO:
	 *		判断队列是否为空
	 */
	public boolean isEmpty(){
		return (nItems == 0);
	}
	
	/**
	 * 
	 *@liyixiang
	 *@2014-9-21
	 *@param
	 *@return:boolean
	 *@TODO:
	 *		判断队列是否为满
	 *
	 */
	public boolean isFull(){
		return nItems == maxSize;
	}
	
	/**
	 * 
	 *@liyixiang
	 *@2014-9-21
	 *@param
	 *@return:int
	 *@TODO:
	 *		获取当前队列元素个数
	 */
	public int size(){
		return nItems;
	}
}


你可能感兴趣的:(数据结构——队列——优先级队列)