• 队列的一种实现:循环队列


    队列的一种实现,循环队列,通过使用固定长度数组及首尾指针实现队列的入队、出队等:

    class CircularQueue<T> {
        
        private Object[] data; //数据存储数组
        private int head; //队列头指针
        private int tail; //队列尾指针
        private int size; //队列长度
    
        /**
         * 初始化
         *
         * @param k
         */
        public CircularQueue(int k) {
            data = new Object[k]; //数组初始化
            head = -1;
            tail = -1;
            size = k;
        }
    
        /**
         * 元素入队,成功则返回true,否则false
         *
         * @param value
         * @return
         */
        public boolean put(T value) {
            if (isFull() == true) { //入队,判断队满
                return false;
            }
            if (isEmpty() == true) { //入队,队空,则head置0
                head = 0;
            }
            tail = (tail + 1) % size; //循环队列,队尾循环移动,所以使用取余的方式移动队尾
            data[tail] = value; //将入队元素放入队列
            return true;
        }
    
        /**
         * 出队
         *
         * @return
         */
        public T remove() {
            T result = null;
            if (isEmpty() == true) { //出队、判断队空
                return result;
            }
            if (head == tail) { //队首 队尾重合,则当前队列只剩唯一元素
                result = (T) data[tail];
                head = -1;
                tail = -1;
                return result;
            }
            result = (T) data[head];
            data[head] = null;
            head = (head + 1) % size;
            return result;
        }
    
        /**
         * 获取队首元素
         *
         * @return
         */
        public T head() {
            if (isEmpty() == true) {
                return null;
            }
            return (T) data[head];
        }
    
        /**
         * 获取队尾元素
         *
         * @return
         */
        public T tail() {
            if (isEmpty() == true) {
                return null;
            }
            return (T) data[tail];
        }
    
        /** 对空判断
         *
         * @return
         */
        public boolean isEmpty() {
            return head == -1;
        }
    
        /** 对满判断
         *
         * @return
         */
        public boolean isFull() {
            return ((tail + 1) % size) == head; //尾指针再移动一位则与头指针重合
        }
    
        public String toString(){
            StringBuilder str = new StringBuilder();
            for (Object datum : data) {
                if (datum != null) {
                    str.append(datum);
                }
            }
            return str.toString();
        }
    
        public static void main(String[] args) {
            CircularQueue queue = new CircularQueue<Integer>(5);
            queue.put(5);
            queue.put(3);
            queue.put(1);
            System.out.println(queue);
            System.out.println(queue.head());
            System.out.println(queue.tail());
            queue.remove();
            System.out.println(queue);
            System.out.println(queue.head());
            System.out.println(queue.tail());
        }
    }
  • 相关阅读:
    python while循环语句 结合 if else pass temp语句求触发的余数 的练习题
    IF函数多个条件判断及嵌套
    Python 字符串 加减乘除
    Python条件语句 -- if ,else ( 如果 ,那么)
    input 变量名命名规则
    Python解释器的头部编码用途
    switch留个爪,之后还需要再研究下
    面向对象+JAVA基础
    爱因斯坦台阶
    成功的拆开了SELECT里JOIN个SELECT是啥
  • 原文地址:https://www.cnblogs.com/niejunlei/p/13021278.html
Copyright © 2020-2023  润新知