• 队列


    一、队列定义

          1.队列是先进献出的数据结构,是一种只能在一端插入一端删除的线性表

           2.基本实现

             1)判断队列是否为空

             2)输出队列长度

             3)进队、出队

    public class Queue<T> implements Iterable<T> {
        //头结点
        private Node head;
        //尾结点
        private Node last;
        //队列长度
        private int N;
    
    
    
        //节点类
        public class Node{
            public T item;
            public Node next;
            public Node(T item, Node next) {
                this.item = item;
                this.next = next;
            }
        }
        //初始化队列
        public Queue() {
            this.head = new Node(null,null);
            this.last=null;
            this.N=0;
        }
        //判断队列是否为空
        public boolean isEmpty(){
            return N==0;
        }
        //返回队列的长度
        public int size() {
            return N;
        }
    
        //向队列中插入元素
        public void insert(T t){
            //判断尾结点是否为null
            if(last==null){
                //尾结点为空,创建一个结点设为尾结点
                last=new Node(t,null);
                //都节点指向尾结点
                head.next=last;
            }else{
                //尾结点不为空,创建一个新结点
                Node oldLast=last;
                last= new Node(t, null);
                //让尾结点指向新的结点,让新的结点为尾结点
                oldLast.next=last;
            }
            N++;
        }
        //从队列中拿出一个元素
        public T remove(){
            if (isEmpty()){
                return null;
            }
            //得到首结点
            Node n = head.next;
            //头结点指向当前结点的下一个结点
            head.next=n.next;
            N--;
            //判断删除之后队列是否为空,若为空,则将尾结点置为空
            if (isEmpty()){
                last=null;
            }
            return n.item;
        }
        //遍历
        @Override
        public Iterator<T> iterator() {
            return new SIterator();
        }
        public class SIterator implements Iterator{
            private Node n;
    
            public SIterator() {
                this.n = head;
            }
    
            @Override
            public boolean hasNext() {
                return n.next!=null;
            }
    
            @Override
            public Object next() {
                n=n.next;
                return n.item;
            }
        }
    }
  • 相关阅读:
    Linux文件误删除恢复操作【转】
    segment fault异常及常见定位手段【转】
    Linux AUFS 文件系统【转】
    Linux MTD系统剖析【转】
    Linux UBI子系统设计初探【转】
    python笔记54-re正则匹配替换字符串(sub和subn)
    python笔记53-Leetcode面试题:请实现一个函数,把字符串 s 中的每个空格替换成"%20"
    咏南中间件支持客户端控制数据库事务
    mormot2 tbsonwriter
    firedac获取自增长字段值
  • 原文地址:https://www.cnblogs.com/cqyp/p/12576340.html
Copyright © 2020-2023  润新知