链表队列

 

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

 

posted @ 2019-06-26 15:34  由走啦啦啦  阅读(115)  评论(0编辑  收藏  举报