数据结构之队列

数据结构之队列

定义

队列,是一种先进先出(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();

    }
}

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 什么是队列结构: 队列是允许在一端进行插入操作,而在另一端进行删除操作的的线性表。队列是一种先进先出的(First...
    雨飞飞雨阅读 3,599评论 0 1
  • 定义 队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进...
    理想是一盏灯阅读 4,237评论 0 1
  • 队列是一种先进先出的线性表,(FIFO) 限定性的数据结构 双瑞队列 双瑞队列是限定插入和删除操作在表的两端进行的...
    冰鑫925阅读 2,812评论 0 0
  • 之前写了队列的顺序存储结构,队列的定义及操作见 数据结构之队列的顺序存储结构 队列的链式存储结构与操作实现 队列接...
    理想是一盏灯阅读 3,541评论 0 2
  • 祝贺!今天14时,我国自主研制的新一代喷气式大型客机C919在上海浦东机场起飞。经过一个多小时的飞行,15点19分...
    三才民俗阅读 1,765评论 0 1

友情链接更多精彩内容