有序链表实现的优先级队列

package day1_29;

public class Link {

	public long dDate;
	public Link next;

	public Link(long dDate){
		this.dDate = dDate;
	}

	//打印链结点的方法
	public void displayLink(){

		System.out.println("["+dDate+"]");

	}

}
==================================================
package day1_29;

public class SortedList {

	private Link first;

	public SortedList(){
		first = null;
	}

	//判断链表是不是为空
	public boolean isEmpty(){
		if(first == null){
			return true;
		}else{
			return false;
		}
	}

	//插入一个元素的实现
	public void insert(long key){
		Link newLink = new Link(key);
		Link current = first;
		Link previous = null;
		while(current != null && key >current.dDate){
			previous = current;
			current = current.next;

		}
		if(previous == null){//在头节点的时候
			first = newLink;
		}else
			previous.next = newLink;

		newLink.next = current;

	}

	//删除节点的实现
	public Link remove(){//删除头结点的方法,只能删除头节点,为了符合队列的性质
		Link temp = first;
		first = first.next;
		return temp;

	}

	//打印链表的实现
	public void displayList(){

		Link current = first;
		while(current != null){

			current.displayLink();
			current = current.next;

		}
		System.out.println();

	}

}
================================================
package day1_29;

public class PriorityQ {

	private SortedList sortedList;

	public PriorityQ(){
		sortedList = new SortedList();

	}

	//队列的插入方法
	public void insert(long item){
		sortedList.insert(item);
	}

	//删除的方法
	public long remove(){

		return sortedList.remove().dDate;
	}

	//判断是不是为空
	public boolean isEmpty(){
		return sortedList.isEmpty();
	}

	//打印的方法
	public void display(){
		sortedList.displayList();
	}

}
==========================================
package day1_29;

public class Practice5_1 {

	/**
	 * 实现一个基于有序链表的优先级队列,队列的删除操作应该删除具有最小关键字
	 * 的链结点
	 */
	public static void main(String[] args) {
		PriorityQ priorityQ = new PriorityQ();
		priorityQ.insert(11);
		priorityQ.insert(33);
		priorityQ.insert(22);
		priorityQ.insert(55);
		priorityQ.insert(44);

		priorityQ.display();

	}

}

  

时间: 2024-11-08 19:41:19

有序链表实现的优先级队列的相关文章

优先级队列与堆排序

转自:http://www.cnblogs.com/yangecnu/p/Introduce-Priority-Queue-And-Heap-Sort.html 在很多应用中,我们通常需要按照优先级情况对待处理对象进行处理,比如首先处理优先级最高的对象,然后处理次高的对象.最简单的一个例子就是,在手机上玩游戏的时候,如果有来电,那么系统应该优先处理打进来的电话. 在这种情况下,我们的数据结构应该提供两个最基本的操作,一个是返回最高优先级对象,一个是添加新的对象.这种数据结构就是优先级队列(Pri

浅谈算法和数据结构: 五 优先级队列与堆排序

转载自:http://www.cnblogs.com/yangecnu/p/Introduce-Priority-Queue-And-Heap-Sort.html 浅谈算法和数据结构: 五 优先级队列与堆排序 在很多应用中,我们通常需要按照优先级情况对待处理对象进行处理,比如首先处理优先级最高的对象,然后处理次高的对象.最简单的一个例子就是,在手机上玩游戏的时候,如果有来电,那么系统应该优先处理打进来的电话. 在这种情况下,我们的数据结构应该提供两个最基本的操作,一个是返回最高优先级对象,一个是

Java 实现有序链表

有序链表: 按关键值排序. 删除链头时,就删除最小(/最大)的值,插入时,搜索插入的位置. 插入时须要比較O(N),平均O(N/2),删除最小(/最大)的在链头的数据时效率为O(1), 假设一个应用须要频繁的存取(插入/查找/删除)最小(/最大)的数据项,那么有序链表是一个不错的选择 优先级队列 能够使用有序链表来实现 有序链表的插入排序: 对一个无序数组,用有序链表来排序,比較的时间级还是O(N^2) 复制时间级为O(2*N),由于复制的次数较少,第一次放进链表数据移动N次,再从链表拷贝到数组

java面向对象的栈 队列 优先级队列的比较

栈 队列 有序队列数据结构的生命周期比那些数据库类型的结构(比如链表,树)要短得多.在程序操作执行期间他们才被创建,通常用他们去执行某项特殊的任务:当完成任务之后,他们就会被销毁.这三个数据结构还有一个特点就是访问是受到限制的,即在特定时刻只有一个数据项可以被读取或者被删除,但是所谓的移除并不是真的删除,数据项依然在这些数据结构中,只不过因为指针已经指向其他数据项,没有办法访问到,当添加新的数据项时,当初移除的数据项被替代从而永远消失. 栈 队列 优先级队列的模拟思想 1.栈:栈遵循先进后出(F

Java单链表、双端链表、有序链表实现

Java单链表.双端链表.有序链表实现 原创 2014年03月31日 23:45:35 标签: Java / 单链表 / 双端链表 / 有序链表 65040 单链表: insertFirst:在表头插入一个新的链接点,时间复杂度为O(1) deleteFirst:删除表头的链接点,时间复杂度为O(1) 有了这两个方法,就可以用单链表来实现一个栈了,见http://blog.csdn.net/a19881029/article/details/22579759 find:查找包含指定关键字的链接点

关于优先级队列的实现

1.为何要实现优先级队列这种数据结构 考虑实际中的问题,某个夜间门诊只有一个接诊医生,在接诊病人时的次序自然是按照队列的FIFO(先进先出)的原则进行实行.但是这是有一个伤口出血的病人自然是要比平常感冒的病人要先被接诊,而相对于一个心脏病突发的病人更是需要把他放置在更高的优先级. 在计算机系统中,运行程序也是遵循某个优先级关系.在一批待处理的进程中,系统总是将优先级更高的进程优先传递给CPU进行处理. 这些问题都需要运用到优先级队列这种数据结构. 2.优先级队列所要实现的基本接口 根据以上接口,

JAVA优先级队列测试

package code.test; import java.util.Comparator; import java.util.Iterator; import java.util.PriorityQueue; import java.util.Queue; /** * 实验表明,在java中: * 1.优先级队列打印或者迭代,得到的输出顺序为堆结构数组的顺序,大致有序但不完全保证顺序 * 2.由于堆排序是不稳定排序,在优先级相同的情况下,元素不会保持原来的顺序输出 * Created by

Java 模拟队列(一般队列、双端队列、优先级队列)

队列: 先进先出,处理类似排队的问题,先排的.先处理,后排的等前面的处理完了,再处理 对于插入和移除操作的时间复杂度都为O(1).从后面插入,从前面移除 双端队列: 即在队列两端都能够insert和remove:insertLeft.insertRight.removeLeft.removeRight 含有栈和队列的功能,如去掉insertLeft.removeLeft,那就跟栈一样了.如去掉insertLeft.removeRight.那就跟队列一样了 一般使用频率较低,时间复杂度 O(1)

java数据结构与算法值优先级队列

一.优先级队列 什么是优先级队列:优先级队列是一种比栈和队列更加常用的一种数据结构.在优先级队列中,数据项按照关键字的值有序.数据项插入到队列中时,会按照顺序插入到合适的位置,用来保证队列的顺序. 生活中的例子,假设你有若干封件,你最急需要处理的文件就放在所有邮件的 顶部,如果不急需处理的文件就放放在下面. 参考代码: package edu.structure.queue; public class PriorityQ { private int maxSize; private int[]