• 链表队列


    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
  • 相关阅读:
    hdu1285 确定比赛名次(拓扑排序多种方法)
    软件配置管理中的SVN
    Maven实战(插件管理)
    oracle 数据库中,应用程序里的连接探測语句的正确使用
    2014百度之星资格赛第四题
    android制作闪动的红心
    程序猿生存定律-借势的价值与力量
    [SPOJ VLATTICE]Visible Lattice Points 数论 莫比乌斯反演
    机器学习:神经网络之表达
    【JavaScript】在同一个网页中实现多个JavaScript特效
  • 原文地址:https://www.cnblogs.com/youzoulalala/p/11090180.html
Copyright © 2020-2023  润新知