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