一个简单的基于数组优先级队列的Java代码
2015-12-01 11:13
756 查看
优先级队列与普通的队列相比,区别在于他的数据项按关键字的值有序排列,数据项在插入的时候会按照顺序插入到合适的位置以确保队列的顺序。
像普通的队列一样,优先级队列在某些计算机系统中也有很多应用。优先级队列通常使用堆来实现,下列代码是基于数组的一个简单优先级队列的实现。
import java.io.*;
class PriorityQueue{
private int maxSize;
private long[] queArray;
private int nItems;
public PriorityQueue(int s){
maxSize=s;
queArray=new long[maxSize];
nItems=0;
}
public void insert(long item)
{
int j;
if(nItems==0)
queArray[nItems++]=item;
else
{
for(j=nItems-1;j>=0;j--)
{
if(item>queArray[j])
queArray[j+1]=queArray[j];
else
break;
}
queArray[j+1]=item;
nItems++;
}
}
public long remove()
{
return queArray[--nItems];
}
public long peekMin(){
return queArray[nItems-1];
}
public boolean isEmpty()
{
return (nItems==0);
}
public boolean isFull()
{
return (nItems==maxSize);
}
}
class PriorityQueueApp{
public static void main(String[] args) throws IOException{
PriorityQueue thePQ=new PriorityQueue(5);
thePQ.insert(33);
thePQ.insert(30);
thePQ.insert(32);
thePQ.insert(31);
while(!thePQ.isEmpty())
{
long item=thePQ.remove();
System.out.println(item+"");
}
System.out.println(" ");
}
}
像普通的队列一样,优先级队列在某些计算机系统中也有很多应用。优先级队列通常使用堆来实现,下列代码是基于数组的一个简单优先级队列的实现。
import java.io.*;
class PriorityQueue{
private int maxSize;
private long[] queArray;
private int nItems;
public PriorityQueue(int s){
maxSize=s;
queArray=new long[maxSize];
nItems=0;
}
public void insert(long item)
{
int j;
if(nItems==0)
queArray[nItems++]=item;
else
{
for(j=nItems-1;j>=0;j--)
{
if(item>queArray[j])
queArray[j+1]=queArray[j];
else
break;
}
queArray[j+1]=item;
nItems++;
}
}
public long remove()
{
return queArray[--nItems];
}
public long peekMin(){
return queArray[nItems-1];
}
public boolean isEmpty()
{
return (nItems==0);
}
public boolean isFull()
{
return (nItems==maxSize);
}
}
class PriorityQueueApp{
public static void main(String[] args) throws IOException{
PriorityQueue thePQ=new PriorityQueue(5);
thePQ.insert(33);
thePQ.insert(30);
thePQ.insert(32);
thePQ.insert(31);
while(!thePQ.isEmpty())
{
long item=thePQ.remove();
System.out.println(item+"");
}
System.out.println(" ");
}
}
相关文章推荐
- AES —— JAVA中对称加密和解密
- AES —— JAVA中对称加密和解密
- 关于 Spring 中使用 context:property-placeholder 属性占位符设置配置文件
- Java的getClass()
- AES —— JAVA中对称加密和解密
- spring mvc 事务配置,spring 事务配置说明
- Spring事务管理的三种方式
- Java基础01 从HelloWorld到面向对象
- spring中注解的实现原理
- SpringMVC 拦截器实现原理和登录实现
- springMVC重定向
- Java streamtool
- Eclipse Rap开发 异步刷新UI处理
- Java图形化界面设计——布局管理器之null布局(空布局)
- Java图形化界面设计——布局管理器之CardLayout(卡片布局)
- Java图形化界面设计——布局管理器之GridLayout(网格布局)
- Java图形化界面设计——布局管理器之BorderLayout(边界布局)
- Java图形化界面设计——布局管理器之FlowLayout(流式布局)
- Java图形化界面设计——中间容器(Jpanel)
- Java图形化界面设计——容器(JFrame)