/**
 * @desc: 队列--单链表实现
 * @author: 毛会懂
 * @create: 2020-12-30 10:55:00
 **/
public class MyQueue<T> implements Iterable<T>{
    private Node head;
    private Node last; //尾节点
    private Integer count;

    MyQueue(){
        head = new Node(null,null);
        last = null;
        count = 0;
    }

    //进队列
    public void enter(T t){
        Node newNode = new Node(t,null);
        if(isEmpty()){
            head.next = newNode;
        }else {
            last.next = newNode;
        }
        last = newNode;
        count++;
    }

    //出队列
    public T del(){
        if(isEmpty()){
            return null;
        }
        Node node = head.next;
        head.next = node.next;
        count--;
        //只有一个元素出队列
        if(isEmpty()){
            last = null;
        }
        return node.t;
    }


    //队列是否为空
    public Boolean isEmpty(){
        return count == 0;
    }

    //队列的大小
    public Integer size(){
        return count;
    }

    @Override
    public Iterator<T> iterator() {
        return new MyIterator();
    }

    private class MyIterator implements Iterator{
        private Node node;

        public MyIterator(){
            node = head;
        }

        @Override
        public boolean hasNext() {
            return node.next != null;
        }

        @Override
        public T next() {
            node = node.next;

            return node.t;
        }
    }


    private class Node{
        private T t;
        private Node next;

        public Node(T t, Node next) {
            this.t = t;
            this.next = next;
        }
    }
}

测试:

public static void main(String[] args) {
MyQueue<String> myQueue = new MyQueue<>();
myQueue.enter("abc");
myQueue.enter("bddd");
for (String s : myQueue) {
System.out.println(s);
}
System.out.println("--------");
System.out.println("是否为空:" + myQueue.isEmpty());
System.out.println("队列大小:" + myQueue.size());
System.out.println(myQueue.del());
System.out.println(myQueue.del());
System.out.println("------");
myQueue.enter("sss");
myQueue.enter("bb");
myQueue.enter("cc");
myQueue.forEach(System.out::println);
System.out.println(myQueue.del());
}
posted on 2020-12-31 13:44  毛会懂  阅读(90)  评论(0编辑  收藏  举报