使用單向鏈表來(lái)實(shí)現(xiàn)隊(duì)列;
把鏈表的頭部作為隊(duì)首, 把鏈表的尾部作為隊(duì)尾。
package com.wkcto.chapter02.queue;
/**
* 隊(duì)列的鏈?zhǔn)酱鎯?chǔ)
* @author 蛙課網(wǎng)
*
*/
public class MyLinkQueue {
private Node front; //隊(duì)首
private Node rear; //隊(duì)尾
private int size; //元素的個(gè)數(shù)
//返回元素的個(gè)數(shù)
public int getSize() {
return size;
}
//判斷隊(duì)列是否為空
public boolean isEmpty() {
return size == 0;
}
//入隊(duì)
public void enQueue(Object e) {
//根據(jù)添加的元素生成一個(gè)結(jié)點(diǎn)
Node newNode = new Node(e, null);
//把結(jié)點(diǎn)連接到隊(duì)列中
if ( rear == null ) {
//這是添加的第一個(gè)元素,即是頭結(jié)點(diǎn)也是尾結(jié)點(diǎn)
rear = newNode;
front = newNode;
}else {
//把結(jié)點(diǎn)鏈拉到隊(duì)列的尾部
rear.next = newNode;
rear = newNode ; //rear指針指向新添加的元素
}
size++; //元素個(gè)數(shù)加1
}
//出隊(duì)
public Object deQueue() {
//判斷隊(duì)列是否為空
if (size <= 0 ) {
throw new QueueEmptyException("隊(duì)列為空");
}
Object old = front.element ;
front = front.next ; //調(diào)整隊(duì)首指針
//如果出隊(duì)后,隊(duì)列為空, 調(diào)整尾指針
if (front == null) {
rear = null;
}
size--;
return old;
}
//返回隊(duì)首元素
public Object peek() {
if (size <= 0 ) {
throw new QueueEmptyException("隊(duì)列為空");
}
return front.element;
}
//通過(guò)內(nèi)部類表示單向鏈表的結(jié)點(diǎn)
private class Node{
Object element;
Node next;
public Node(Object element, Node next) {
super();
this.element = element;
this.next = next;
}
}
}