欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

基于有序链表实现的优先队列

程序员文章站 2024-03-17 18:54:52
...

博主最近在苦读算法第四版,在第二章第四节的优先队列的实现中,作者提到了可以用有序或无序链表实现优先队列,博主在网上大致查阅了一下,好像没有现成的java代码(泛型的),于是自己根据找到的代码简单修改并实现了一下,特此记录一下。

 /*定义结点的抽象数据类型*/
  class Node<Key extends Comparable<Key>> {
	public Key key;
	public Node next;
	public void displayNode() {
	  System.out.print(key+" ");
	  }
  }
   /*定义了一个有序链表,链表表示的是一列元素*/
  class LinkedList<Key extends Comparable<Key>>  {
    private Node first; //栈顶(最近添加的元素)
	public LinkedList() {
	  first = null;
		}
	/*向链表中添加元素的push方法保证所有元素为逆序*/
	public void push(Key key) {
	   Node newLink = new Node();
	   newLink.key = key;
	   Node previous = null;
	   Node current = first;
	   //得到数据插入的位置
	   while(current != null && less((Key)newLink.key,(Key)current.key)) {
		  previous = current;
	      current = current.next;
		}
	   if(previous == null) {
			first = newLink;
		} 
	   //移动结点到指定位置
	   else {
			previous.next = newLink;
		}
			newLink.next = current;
		}
	private boolean less(Key v, Key w) {
	        return v.compareTo(w) < 0;
	    }
	public Key delete() {
		Key tmp = (Key)first.key;
		first = first.next;
		return tmp;
	}
	public void displayLinList() {
		Node current = first;
		while(current != null) {
			current.displayNode();
			current = current.next;
			}
		}
	}
public class OrderedLinkedlistMaxPQ {
	public static void main(String[] args) {
		LinkedList ll= new LinkedList();
		ll.push("t");
		ll.push("i");
		ll.push("a");
		ll.push("k");
		ll.push("j");
		ll.push("p");
		ll.push("d");
		ll.push("f");
		ll.push("m");
		ll.push("s");
		ll.push("z");
		ll.push("b");
		ll.displayLinList();
		System.out.println();
		ll.delete();
		ll.displayLinList();
	}
		
}