zoukankan      html  css  js  c++  java
  • 队列的一种实现:循环队列

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

    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());
        }
    }
  • 相关阅读:
    常用汇编指令大全
    Qt信号槽-连接方式
    QtAssiant-QComboBox
    解决Qt-至少需要一个有效且已启用的储存库 问题
    qt插件化开发
    qml----定位信息
    多媒体(音乐、视频播放器,相机)
    qml----Model/View入门(九)Repeater
    qml----Model/View入门(八)PathView
    qml----Model/View入门(七)GridView
  • 原文地址:https://www.cnblogs.com/niejunlei/p/13021278.html
Copyright © 2011-2022 走看看