使用單向鏈表來實現隊列;
把鏈表的頭部作為隊首, 把鏈表的尾部作為隊尾。
package com.wkcto.chapter02.queue;
/**
* 隊列的鏈式存儲
* @author 蛙課網
*
*/
public class MyLinkQueue {
private Node front; //隊首
private Node rear; //隊尾
private int size; //元素的個數
//返回元素的個數
public int getSize() {
return size;
}
//判斷隊列是否為空
public boolean isEmpty() {
return size == 0;
}
//入隊
public void enQueue(Object e) {
//根據添加的元素生成一個結點
Node newNode = new Node(e, null);
//把結點連接到隊列中
if ( rear == null ) {
//這是添加的第一個元素,即是頭結點也是尾結點
rear = newNode;
front = newNode;
}else {
//把結點鏈拉到隊列的尾部
rear.next = newNode;
rear = newNode ; //rear指針指向新添加的元素
}
size++; //元素個數加1
}
//出隊
public Object deQueue() {
//判斷隊列是否為空
if (size <= 0 ) {
throw new QueueEmptyException("隊列為空");
}
Object old = front.element ;
front = front.next ; //調整隊首指針
//如果出隊后,隊列為空, 調整尾指針
if (front == null) {
rear = null;
}
size--;
return old;
}
//返回隊首元素
public Object peek() {
if (size <= 0 ) {
throw new QueueEmptyException("隊列為空");
}
return front.element;
}
//通過內部類表示單向鏈表的結點
private class Node{
Object element;
Node next;
public Node(Object element, Node next) {
super();
this.element = element;
this.next = next;
}
}
}