class PriorityQueue{
private Comparable[] array;
private int index;
public PriorityQueue(){
array=new Comparable[16];
index=0;
}
public boolean isEmpty(){
return index==0;
}
public void add(Comparable item){
if(index==array.length){
resize();
}
array[index]=item;
index++;
}
private void resize(){
Comparable[] newArray=new Comparable[array.length*2];
//we assume that the old array if full
for(int i=0;i<array.length;i++){
newArray[i]=array[i];
}
array=newArray;
}
public Comparable remove(){
if(index==0) return null;
int maxIndex=0;
//find the index of the item with the highest priority
for(int i=1;i<index;i++){
if(array[i].compareTo(array[maxIndex])>0){
maxIndex=i;
}
}
Comparable result=array[maxIndex];
//move the last item into the empty slot
index--;
array[maxIndex]=array[index];
return result;
}
//无法掩饰对remove()的喜爱
}
//优先队列的数组实施
//高尔夫球手记分类
public class Golfer implements Comparable
{
String name;
int score;
public Golfer(String name,int score){
this.name=name;
this.score=score;
}
public int compareTo(Object obj){
Golfer that=(Golfer)obj;
int a=this.score;
int b=that.score;
//for golfers,low is good!
if(a<b) return 1;
if(a>b) return -1;
return 0;
}
public static void main(String args[]){
PriorityQueue pq=new PriorityQueue();
Integer item1=new Integer(2);
pq.add(item1);
Integer item2=new Integer(1);
pq.add(item2);
Integer item3=new Integer(3);
pq.add(item3);
while(!pq.isEmpty()){
Integer item=(Integer)pq.remove();
System.out.println(item);
}
Golfer tiger=new Golfer("Tiger Woods",61);
Golfer phil=new Golfer("Phil Mickelson",72);
Golfer hal=new Golfer("Hal Sutton",69);
pq.add(tiger);
pq.add(phil);
pq.add(hal);
while(!pq.isEmpty()){
Golfer golfer=(Golfer)pq.remove();
System.out.println(golfer.name+"\t"+golfer.score);
}
}
}
分享到:
相关推荐
对于这个数据结构队列的作业,很可能是要求学生自定义一个队列类,以便更好地理解其内部工作原理。 自定义队列通常涉及以下关键组件和操作: 1. **初始化**:创建队列时,需要设置一个初始容量或默认为空。 2. **...
这个程序很可能是为了教学或演示目的,通过创建、发送和接收消息来展示消息队列的工作原理。 消息队列的主要操作包括创建、绑定、发送和接收消息。在Linux中,这些操作通常通过系统调用来完成,比如`msgget`用于...
在这个名为“很好很强大的算法资料”的压缩包里,包含了丰富的算法知识,主要涵盖了Java和C两种编程语言。这个资源以HTML格式呈现,使得学习和理解算法变得更加直观和便捷。接下来,我们将深入探讨其中可能涉及的...
堆是一种特殊的树形数据结构,满足最大堆或最小堆的性质,常用于实现优先队列。在da09.htm或da10.htm中可能会有建立堆、调整堆、堆排序等相关习题。 通过对这些习题的练习,你可以巩固对数据结构的理解,提升算法...
本资料包“java版数据结构 很好很强大”显然专注于讲解如何在Java中有效地实现和使用各种数据结构。 首先,我们来看看Java提供的基础数据结构: 1. **数组**:是最基本的数据结构,用于存储固定数量的同类型元素。...
在编程领域,树是一种非常重要的数据结构,广泛应用于各种算法和数据存储中。在C#中,处理树结构时,我们经常会遇到遍历的问题...队列和栈作为基础数据结构,其灵活运用能够解决许多实际问题,为程序设计提供强大支持。
同时,高级数据结构如堆、树和图的组合——例如优先队列、自平衡二叉搜索树和图的最短路径算法(Dijkstra、Floyd-Warshall)等,为解决复杂问题提供了强大工具。 总的来说,数据结构的学习不仅仅涉及基本概念,还...
数据结构是计算机科学中的核心概念,它涉及到如何高效地存储和操作数据。在这个"数据结构之图的表示、...通过这个压缩包的学习,你将能够更好地理解和操作图这一强大的数据结构,从而在实际问题中找到更优的解决方案。
总的来说,FreeRTOS的动态内存管理和消息队列是其强大功能的核心部分,理解并熟练掌握这些机制对于开发高效、可靠的嵌入式系统至关重要。通过实践和学习,开发者可以充分利用这些工具,解决资源有限的嵌入式环境中的...
C++是一种通用的、面向对象的编程语言,以其强大的性能和灵活性在系统编程、游戏开发、图形界面以及算法实现等领域广泛应用。在这里,我们可能有一个包含源代码的压缩包,用于教授初学者如何使用C++实现BFS算法。 ...
总的来说,"迷宫游戏 VC++ 很好的初学资料"是一个很好的实践项目,它将理论知识与实际应用相结合,帮助初学者快速入门VC++编程,并且加深对C++语言和面向对象编程的理解。通过学习和实践,你不仅能掌握编程技能,还...
总的来说,这个压缩包提供了一个很好的学习资源,让学习者能够通过实际的MATLAB代码了解和掌握广度优先搜索算法。通过分析和运行这些代码,你可以加深对BFS的理解,并将其应用于解决实际问题,比如在图数据结构中...
在计算机操作系统中,进程调度是核心功能之一,它负责决定哪个进程在何时获得CPU执行权。...C++作为强大的编程工具,能够很好地支持这种调度算法的实现和测试,帮助我们理解和改进操作系统的进程管理。
### 强大的POJ分类解析 #### 一、引言 POJ(Peking Online Judge)作为中国最早的一批在线编程评测系统之一,为广大学习算法与数据结构的同学提供了丰富的资源。它不仅包含了各类经典的算法题目,还通过详细的分类...
"一个很好的JAVA题库" 提供的可能是一系列用于学习和测试Java编程技能的问题集合。这些题目通常涵盖基础语法、面向对象编程、集合框架、多线程、异常处理、输入输出流、网络编程、算法与数据结构等多个方面。 1. **...
然而,由于其简单的实现和易于理解的性质,BFS仍然是一个很好的教学和研究工具。 在提供的源码中,你可以期待看到以下部分: 1. 地形数据的读取与处理:这部分可能包括读取地图数据,将障碍物转化为MATLAB可以处理...
《八数码问题与双向广度优先搜索算法在C++中的实现》 八数码问题,又称滑动拼图游戏,是一个经典的计算机科学问题,它源于19世纪由Ernesto ...对于想要深入学习算法和数据结构的程序员,这是一个很好的锻炼机会。
**广度优先搜索(BFS)算法** 广度优先搜索(BFS)是一种在图或树数据结构中寻找路径的算法。...同时,了解如何在MATLAB中表示图(如邻接矩阵或邻接表)也是很重要的,这有助于你更好地运用BFS算法解决实际问题。
7. **堆**:堆是一种特殊的树形数据结构,通常用于实现优先队列。最大堆和最小堆的操作如调整、插入和删除是重点内容。 8. **排序算法**:如冒泡排序、选择排序、插入排序、快速排序、归并排序等,它们在实际问题中...
总的来说,这个Qt迷宫程序是一个很好的实践项目,它涵盖了多种算法的实现,有助于提升对搜索算法的理解和实际应用能力。开发者可以通过调整不同的搜索策略,观察其在不同迷宫结构中的表现,深入理解这些算法的优缺点...