zoukankan      html  css  js  c++  java
  • 队列

    一、队列定义

          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;
            }
        }
    }
  • 相关阅读:
    OOP3(继承中的类作用域/构造函数与拷贝控制/继承与容器)
    OOP2(虚函数/抽象基类/访问控制与继承)
    OOP1(定义基类和派生类)
    拷贝控制3(对象移动)
    拷贝控制2(拷贝控制和资源管理/交换操作/动态内存管理)
    拷贝控制1(拷贝、赋值与销毁)
    动态内存2(动态数组)
    python--numpy模块、spicy模块、 matplotlib模块
    Java--23种设计模式之decorator模式
    Android开发---开发文档翻译
  • 原文地址:https://www.cnblogs.com/cqyp/p/12576340.html
Copyright © 2011-2022 走看看