import java.util.Iterator;
/**
* @ClassName LinkedQueue
* @Author wangyudi
* @Date 2019/7/20 13:47
* @Version 1.0
* @Description
* 链表是实现队列 FIFO
* 成员变量:队头引用 first、队尾引用 last、大小 count、节点内部类 Node
* 私有方法:
* 公开方法:入队列 enqueue、出队列 enqueue、大小 size、是否为空 isEmpty、
* 要求:实现泛型、迭代器
*/
public class LinkedQueue<Item> implements Iterable<Item> {
private Node first ;
private Node last;
private int count;
public LinkedQueue() {
this.first = null;
this.last = null;
this.count = 0;
}
private class Node{ //匿名内部类
private Item value;
private Node next;
public Node() {
value = null;
next=null;
}
public Node(Item value, Node next) {
this.value = value;
this.next = next;
}
}
/**
* 节点入队列
* 注意点:空队列时入队列;
* @param e
*/
public void enqueue(Item e){
Node newNode = new Node(e,null);
count++;
if(last==null){
first=last=newNode;
return;
}
last.next = newNode;
last = newNode;
return;
}
/**
* 节点出队列
* 注意点:空队列出队列的情况; 只有一个节点出队列的情况
* @return
*/
public Item dequeue(){
if(count==0) return null;//空队列
Item temp = first.value;
first=first.next;
if(first==null) last=null;//出队列后为空
count--;
return temp;
}
public int size(){
return count;
}
public boolean isEmpty(){
if(count==0) return true;
return false;
}
@Override
public Iterator<Item> iterator() {
return new Iterator<Item>(){
Node i = first;
@Override
public boolean hasNext() {
if(i!=null) return true;
return false;
}
@Override
public Item next() {
Item temp = i.value;
i=i.next;
return temp;
}
};
}
}
/**
* 测试案例
*/
public class TestCase {
public static void main(String[] args) {
LinkedQueue<Integer> integers = new LinkedQueue<>();
integers.enqueue(1);
integers.enqueue(2);
integers.enqueue(3);
integers.enqueue(4);
integers.enqueue(5);
System.out.println(integers.dequeue());
System.out.println(integers.isEmpty());
System.out.println(integers.size());
System.out.println("===================");
for(Integer e : integers){
System.out.println(e);
}
}
}
//结果
1
false
4
===================
2
3
4
5