`
keating
  • 浏览: 170018 次
  • 性别: Icon_minigender_1
  • 来自: weihai
社区版块
存档分类
最新评论

很好很强大的优先队列

 
阅读更多
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);
		}  

	}
}

分享到:
评论

相关推荐

    数据结构队列C++

    对于这个数据结构队列的作业,很可能是要求学生自定义一个队列类,以便更好地理解其内部工作原理。 自定义队列通常涉及以下关键组件和操作: 1. **初始化**:创建队列时,需要设置一个初始容量或默认为空。 2. **...

    Linux下的消息队列测试程序,helloworld MessageTest

    这个程序很可能是为了教学或演示目的,通过创建、发送和接收消息来展示消息队列的工作原理。 消息队列的主要操作包括创建、绑定、发送和接收消息。在Linux中,这些操作通常通过系统调用来完成,比如`msgget`用于...

    很好很强大的算法资料

    在这个名为“很好很强大的算法资料”的压缩包里,包含了丰富的算法知识,主要涵盖了Java和C两种编程语言。这个资源以HTML格式呈现,使得学习和理解算法变得更加直观和便捷。接下来,我们将深入探讨其中可能涉及的...

    数据结构各种习题 很好很强大

    堆是一种特殊的树形数据结构,满足最大堆或最小堆的性质,常用于实现优先队列。在da09.htm或da10.htm中可能会有建立堆、调整堆、堆排序等相关习题。 通过对这些习题的练习,你可以巩固对数据结构的理解,提升算法...

    java版数据结构 很好很强大

    本资料包“java版数据结构 很好很强大”显然专注于讲解如何在Java中有效地实现和使用各种数据结构。 首先,我们来看看Java提供的基础数据结构: 1. **数组**:是最基本的数据结构,用于存储固定数量的同类型元素。...

    C#编写的树的非递归层次和广度优先遍历

    在编程领域,树是一种非常重要的数据结构,广泛应用于各种算法和数据存储中。在C#中,处理树结构时,我们经常会遇到遍历的问题...队列和栈作为基础数据结构,其灵活运用能够解决许多实际问题,为程序设计提供强大支持。

    数据结构很好

    同时,高级数据结构如堆、树和图的组合——例如优先队列、自平衡二叉搜索树和图的最短路径算法(Dijkstra、Floyd-Warshall)等,为解决复杂问题提供了强大工具。 总的来说,数据结构的学习不仅仅涉及基本概念,还...

    数据结构之图的表示、深度优先和广度优先遍历.zip

    数据结构是计算机科学中的核心概念,它涉及到如何高效地存储和操作数据。在这个"数据结构之图的表示、...通过这个压缩包的学习,你将能够更好地理解和操作图这一强大的数据结构,从而在实际问题中找到更优的解决方案。

    FreeRTOS动态内存管理.zip_freertos_内存管理_消息队列

    总的来说,FreeRTOS的动态内存管理和消息队列是其强大功能的核心部分,理解并熟练掌握这些机制对于开发高效、可靠的嵌入式系统至关重要。通过实践和学习,开发者可以充分利用这些工具,解决资源有限的嵌入式环境中的...

    广度优先C++.rar

    C++是一种通用的、面向对象的编程语言,以其强大的性能和灵活性在系统编程、游戏开发、图形界面以及算法实现等领域广泛应用。在这里,我们可能有一个包含源代码的压缩包,用于教授初学者如何使用C++实现BFS算法。 ...

    迷宫游戏 VC++ 很好的初学资料

    总的来说,"迷宫游戏 VC++ 很好的初学资料"是一个很好的实践项目,它将理论知识与实际应用相结合,帮助初学者快速入门VC++编程,并且加深对C++语言和面向对象编程的理解。通过学习和实践,你不仅能掌握编程技能,还...

    matlab源码-广度优先搜索.zip

    总的来说,这个压缩包提供了一个很好的学习资源,让学习者能够通过实际的MATLAB代码了解和掌握广度优先搜索算法。通过分析和运行这些代码,你可以加深对BFS的理解,并将其应用于解决实际问题,比如在图数据结构中...

    进程调度(动态优先)

    在计算机操作系统中,进程调度是核心功能之一,它负责决定哪个进程在何时获得CPU执行权。...C++作为强大的编程工具,能够很好地支持这种调度算法的实现和测试,帮助我们理解和改进操作系统的进程管理。

    强大的poj分类

    ### 强大的POJ分类解析 #### 一、引言 POJ(Peking Online Judge)作为中国最早的一批在线编程评测系统之一,为广大学习算法与数据结构的同学提供了丰富的资源。它不仅包含了各类经典的算法题目,还通过详细的分类...

    一个很好的JAVA题库

    "一个很好的JAVA题库" 提供的可能是一系列用于学习和测试Java编程技能的问题集合。这些题目通常涵盖基础语法、面向对象编程、集合框架、多线程、异常处理、输入输出流、网络编程、算法与数据结构等多个方面。 1. **...

    【三维路径规划】基于matlab广度优先搜索算法无人机三维路径规划【含Matlab源码 270期】.zip

    然而,由于其简单的实现和易于理解的性质,BFS仍然是一个很好的教学和研究工具。 在提供的源码中,你可以期待看到以下部分: 1. 地形数据的读取与处理:这部分可能包括读取地图数据,将障碍物转化为MATLAB可以处理...

    八数码问题以及双向广度优先算法.zip_C++ 八数码_八数码_八数码 广度_八数码问题_广度优先

    《八数码问题与双向广度优先搜索算法在C++中的实现》 八数码问题,又称滑动拼图游戏,是一个经典的计算机科学问题,它源于19世纪由Ernesto ...对于想要深入学习算法和数据结构的程序员,这是一个很好的锻炼机会。

    基于BFS广度优先搜索算法代码.zip

    **广度优先搜索(BFS)算法** 广度优先搜索(BFS)是一种在图或树数据结构中寻找路径的算法。...同时,了解如何在MATLAB中表示图(如邻接矩阵或邻接表)也是很重要的,这有助于你更好地运用BFS算法解决实际问题。

    很好的数据结构课件 西北大学

    7. **堆**:堆是一种特殊的树形数据结构,通常用于实现优先队列。最大堆和最小堆的操作如调整、插入和删除是重点内容。 8. **排序算法**:如冒泡排序、选择排序、插入排序、快速排序、归并排序等,它们在实际问题中...

    利用Qt编写的走迷宫程序,主要是关于路径搜索 此程序的搜索方法有宽度优先,深度优先,A*算法,贪婪算法

    总的来说,这个Qt迷宫程序是一个很好的实践项目,它涵盖了多种算法的实现,有助于提升对搜索算法的理解和实际应用能力。开发者可以通过调整不同的搜索策略,观察其在不同迷宫结构中的表现,深入理解这些算法的优缺点...

Global site tag (gtag.js) - Google Analytics