java链式队列

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


链队列的定义:

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


链队列的数据存储形式:

java链式队列_第1张图片


 链队列基本运算的实现:


/**
 * 
 */
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); 
	}
	
}


你可能感兴趣的:(java链式队列)