优先级队列
在优先级队列中,数据项按关键字的值有序,关键字最小的数据项(或者关键字最大的数据项)总是在队头。数据插入时需要按照顺序插入到合适的位置以确保队列的顺序。像普通队列一样,优先级队列也有队头队尾,从队头移除数据项。队头数据项优先级最高,优先级依次向队尾递减。优先级队列通常用堆来实现。数组实现的优先级队列,插入数据项比较慢。
数组实现优先级队列
package com.dstructure.queue;
/**
* @ClassName PriorityQueue
* @Author gg_girl
* @Date 2020/9/5
* @Description 优先级队列
* 优先级高的可以插队,达到先出的目的。值有序的队列。
* 设:优先级大的元素,数值也大。
* 有maxSize,nItems计数指针/下标,存放数据项的数组
* 数组 7 6 5 队列 7 6 5
* 插入一个数据项时,需要选择恰当的位置插入。
*
*
* 依次插入数据项 5 7 8 1
* 插入5,队列5,数组 array[0]=5,nItems=1
* 插入7,j=0;7>array[0]?true,交换j+1位置,array[0+1]=array[0],j--,j=-1,跳出for循环,j+1=0,array[j+1]=7,
* 数组array[0]=7,array[1]=5,队列7 5 nItems++,nItems=2
* 插入8,j=nItems-1=2-1=1,8>array[1]?true,array[j+1]=array[j],array[2]=5,array[1]=5,array[0]=7,j--,
* j=0,8>array[0] true,array[j+1]=array[j],array[0]=7,array[1]=7,array[2]=5,j--,
* j>0 false,退出循环
* array[j+1]=8,插入数据项,array[0]=8,array[1]=7,array[2]=5,nItems++,nItems=3,队列 8 7 5
* 插入1,j=nItems-1=3-1=2,1>array[2]?false,break跳出for循环,array[j+1]=1,nItems++,nItems=4
* 数组:{8,7,5,1}
* 队列:8 7 5 1
*
*
*
* @Version 1.0
*/
public class PriorityQueue {
public int[] array;
public int maxSize;
public int nItems;// 计数也是下标
public PriorityQueue(int size){
this