数据结构(六)队列

  队列是一种特殊的线性表,是一种先进先出(FIFO)的数据结构。它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。

数组模拟实现队列

用数组模拟队列实现部分方法。

    /**
     * 数组实现队列
     */
    public class MyQueue<E> {

        private E[] datas;

        private int putIndex;//存数据的下标
        private int getIndex;//取数据的下标
        private int numbers;//记录数据的个数

        /**
         * 空参构造
         */
        public MyQueue() {

        }

        /**
         * 构造
         * @param size
         */
        public MyQueue(int size) {
            if (size < 1) {
                throw new RuntimeException();
            }
            datas = (E[]) new Object[size];
        }

        /**
         * 判断队列是否已满
         * @return true 已满
         *          false 未满
         */
        public boolean isFull(){
            return numbers == datas.length;
        }

        /**
         * 获取队列中元素的数量
         */
        public int size() {
            return numbers;
        }

        /**
         * 判断队列是否为空
         */
        public boolean isEmpty() {
            return numbers == 0;
        }


        /**
         * 添加数据
         */
        public boolean add(E e) {
            //判断队列是否满
            if (isFull()) {
                return false;
            }
            //添加数据
            datas[putIndex % datas.length] = e;
            putIndex ++;
            //记录数据个数
            numbers ++;
            return true;
        }

        /**
         * 获取并移除此队列的头元素
         * @return
         */
        public E poll() {
            //移除数据
            E data = datas[getIndex % datas.length];
            numbers --;
            getIndex ++;
            return data;
        }

    }

链表模拟实现队列

用双链表模拟队列实现部分方法。

    /**
     * 链表实现队列
     */
    public class MyQueueLink<E> {
        //自定义双链表,具体实现在数据结构(五)中
        private MyDoubleLink<E> datas = new MyDoubleLink<E>();

        /**
         * 判断队列是否为空
         * @return
         */
        public boolean isEmpty() {
            //返回链表是否为空
            return datas.isEmpty();
        }

        /**
         * 将指定的元素插入此队列
         * @param e
         * @return
         */
        public boolean add(E e) {
            //从链表的尾部添加数据
            datas.add(e);
            return true;
        }

        /**
         * 获取并移除此队列的头元素
         * @return
         */
        public E poll() {
            //获取并移除双链表中的头元素
            E data = datas.removeHead();
            return data;
        }

    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值