zoukankan      html  css  js  c++  java
  • 链表队列

    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
  • 相关阅读:
    maven的groupId和artifactId的区别
    二级域名和一级域名的区别
    单点登陆系统
    公有链,私有链,联盟链
    比特币与区块链是父与子关系吗
    比特币钱包:核心钱包与轻钱包
    区块链到底是什么
    打造信任机器——区块链技术及其应用
    区块广播
    区块链技术理念
  • 原文地址:https://www.cnblogs.com/youzoulalala/p/11090180.html
Copyright © 2011-2022 走看看