美文网首页
数据结构之队列

数据结构之队列

作者: good_dev | 来源:发表于2018-04-09 16:51 被阅读7次

    数据结构之队列

    定义

    队列,是一种先进先出(FIFO, firt in first out)的线性表。队列的特性是只允许在一端进行插入操作,而在另一端进行删除操作。允许插入的一端称为队尾,允许删除的一端称为队头。类似于火车站排队买票的队列。

    队列分为普通队列和循环队列,一般使用循环队列,因为循环队列有更高的时间和空间效率。


    具体实现

    
    /**
     * 循环队列实现
     */
    public class MyQueue {
    
        private int[] mData; //队列存储内容
        private int mQueueCapacity;  //队列容量
        private int mQueueLength; //队列长度
        private int mFront;  //队头
        private int mRear;   //队尾
    
        public MyQueue(int capacity) {
            this.mQueueCapacity = capacity;
            mData = new int[capacity];
            mQueueLength = 0;
            mFront = 0;
            mRear = 0;
        }
    
        /**
         * 清空队列
         */
        public void clearQueue() {
            mQueueLength = 0;
            mFront = 0;
            mRear = 0;
        }
    
        /**
         * 获取队列长度
         * @return
         */
        public int getQueueLength() {
            return mQueueLength;
        }
    
        /**
         * 队列是否已满
         * @return
         */
        public boolean isQueueFull() {
            return mQueueLength == mQueueCapacity;
        }
    
        /**
         * 队列是否为空
         * @return
         */
        public boolean isQueueEmpty() {
            return mQueueLength == 0;
        }
    
        /**
         * 入队
         * @param element
         * @return
         */
        public boolean enQueue(int element) {
            if (isQueueFull()) {
                return false;
            }
            mData[mRear] = element;
            mRear = (mRear + 1) % mQueueCapacity;
            mQueueLength++;
            return true;
        }
    
        /**
         * 出队
         * @return
         */
        public boolean deQueue() {
            if (isQueueEmpty()) {
                return false;
            }
            mFront = (mFront + 1) % mQueueCapacity;
            mQueueLength--;
            return true;
        }
    
        /**
         * 遍历队列
         */
        public void queueTraverse() {
            for (int i = mFront; i < mFront + mQueueLength; i++) {
                int temp = mData[i % mQueueCapacity];
                System.out.println(temp);
            }
        }
    
        /**
         * 测试
         * @param args
         */
        public static void main(String[] args) {
            MyQueue q = new MyQueue(5);
    
            q.enQueue(1);
            q.enQueue(2);
            q.enQueue(33);
    
            q.deQueue();
            q.deQueue();
    
            q.queueTraverse();
    
            System.out.println("size = " + q.getQueueLength());
    
            q.enQueue(4);
            q.enQueue(5);
            q.enQueue(6);
    
            q.enQueue(7);
            q.enQueue(7);
            q.enQueue(7);
    
            q.queueTraverse();
    
            System.out.println("size = " + q.getQueueLength());
    
            q.clearQueue();
            q.enQueue(666);
            q.queueTraverse();
    
        }
    }
    
    

    视频课程:[慕课网]数据结构探险—队列篇

    相关文章

      网友评论

          本文标题:数据结构之队列

          本文链接:https://www.haomeiwen.com/subject/epvphftx.html