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

数据结构之队列

作者: 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