java链式队列

来源:互联网 发布:交通数据百度百科 编辑:程序博客网 时间:2024/04/26 06:16

下面来讨论队列的链式存储,即链队列。


链队列的定义:

队列的链式存储结构简称为链队列。它是限制仅在表头删除和表尾插入的单链表。


链队列的数据存储形式:


 链队列基本运算的实现:


/** *  */package unit5Queue.linked;/** * 链式队列 * <p>Title: LinkedQueue</p> * <p>Description: </p> * <p>Company: </p> * @author 夏 杰 * @param <T> * @date 2015年12月16日 下午11:12:31 * @vesion 1.0*/public class LinkedQueue<T> {//队列头指针public QueueNode<T> font;//队列头指针public QueueNode<T> rear;//队列数据长度public int size = 0;/** * 初始化队列 * @param rear */public LinkedQueue() {QueueNode<T> node = new QueueNode<T>(null,null);node.next = null;font=rear=node;}/** * 入队列 * @param data */public  void push(T data){//创建一个新的节点QueueNode<T> node = new QueueNode<T>(data,null);//将新的节点插入队尾(通过rear.next=node 这样连起来)rear.next = node;rear = node;size++;}/** * 出队列 */public T pop(){if(rear == font){try {throw new Exception("队列为空");} catch (Exception e) {e.printStackTrace();}return null;}else{//node是将要出队列的节点//注意font节点是不存储数据的QueueNode<T> node = font.next;T data = node.data;font.next = node.next;//将要出队列的节点删除掉node = null;size--;return data;}}public boolean isEmpty(){if(font==rear){return true;}return false;}  /**      * 队列长队      * @return      * @author WWX      */      public int size(){          return size;      }  public String toString(){if(isEmpty()){return "[]";}else{StringBuilder sb = new StringBuilder("["); for(QueueNode<T> current = font.next;current!=null;current = current.next){sb.append(current.data.toString() + ",");}int len = sb.length();return sb.delete(len - 2, len).append("]").toString();}}public static void main(String[] args) {LinkedQueue<Integer> queue = new LinkedQueue<Integer>();queue.push(1);queue.push(7);queue.push(6);queue.push(34);queue.push(4);queue.push(33);System.out.println(queue);     System.out.println("出队:"+queue.pop());      System.out.println("队列长度="+queue.size());      System.out.println(queue); }}


0 0
原创粉丝点击