/**
* 先进先出队列的实现
* @param <Item>
*/
public class QueueDemo<Item> {
private class Node{
Node next;
Item item;
}
private Node first;
private Node last;
private int N;
public boolean isEmpty(){
return N==0;
}
public int size(){
return N;
}
/**
* 将数据插入到最后面
* 1.先找到最后一个元素oldlast
* 2.用Node去关联新加的数据并设为last
* 3.last.next = null(目的是去除游离的元素)
* 4.如果该链表长度为空则first = item(第一个也是最后一个) 如果不是则oldlast.next = last
*/
public void enqueue(Item item){
Node oldlast = last;
last = new Node();
last.item = item;
last.next = null;
if (isEmpty()){
first = last;
}
else
oldlast.next = last;
N++;
}
/**
* 删除队列第一个元素
* 1.找到第一个元素
* 2.将第一个元素的下一个设为newfirst
* 3.如果链表为空则last = null
* 4.将长度减1
*/
public Item dequeue(){
Item item = first.item;
first = first.next;
if (isEmpty())
last = null;
N--;
return item;
}
}