package test.stack;
import test.linear.LinkList;
import java.util.Iterator;
public class Quene <T> implements Iterable<T>{
//记录首结点
private Node head;
//记录尾结点
private Node last;
//记录队列中元素的个数
private int N;
private class Node{
public T item;
public Node next;
public Node(T item,Node next){
this.item = item;
this.next = next;
}
}
public Quene(){
this.head = new Node(null,null);
this.last = null;
this.N = 0;
}
//判断队列是否为空
public boolean isEmpty(){
return N==0;
}
//返回队列中元素的个数
public int size(){
return N;
}
public void enquence(T t){
//当前尾结点为null
if(last==null){
last = new Node(t,null);
head.next=last;
}else{
Node newnode = new Node(t,null);
Node oldNode = this.last;
oldNode.next = newnode;
this.last=newnode;
}
N++;
}
public T dequence(){
if(isEmpty()){
return null;
}
Node oldfirst = this.head;
this.head.next = oldfirst.next;
N--;
//因为出队列其实是在删除元素,因此如果队列中的元素被删除完了,需要重置last=null;
if(isEmpty()){
this.last = null;
}
return oldfirst.item;
}
@Override
public Iterator<T> iterator() {
return new Literator();
}
private class Literator implements Iterator {
private Node n;
public Literator(){
this.n = head ;
}
@Override
public boolean hasNext() {
return n.next!=null;
}
@Override
public Object next() {
n = n.next;
return n.item;
}
@Override
public void remove() {
}
}
}