zoukankan      html  css  js  c++  java
  • 数组队列

    前言

    队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。


    具体实现

    • 接口
    public interface Queue<T> {
    
        /**
         * 添加元素
         * @param t
         */
        void enqueue(T t);
    
        /**
         * 元素出队
         * @return
         */
        T dequeue();
    
        /**
         * 获取队首元素
         * @return
         */
        T getFront();
    
        /**
         * 获取队列长度
         * @return
         */
        int getSize();
    
        /**
         * 是否为空
         * @return
         */
        boolean isEmpty();
    
    }
    
    • 实现类
    public class ArrayQueue<T> implements Queue<T> {
    
        Array<T> data;
    
        /**
         * 构造方法
         * @param capacity
         */
        public ArrayQueue(int capacity) {
            data = new Array<>(10);
        }
    
        /**
         * 构造方法
         */
        public ArrayQueue() {
            data = new Array<>();
        }
    
        /**
         * 添加元素
         * @param t
         */
        @Override
        public void enqueue(T t) {
            data.addLast(t);
        }
    
        /**
         * 元素出队
         * @return
         */
        @Override
        public T dequeue() {
            return data.removeFirst();
        }
    
        /**
         * 获取队首元素
         * @return
         */
        @Override
        public T getFront() {
            return data.getFirst();
        }
    
        /**
         * 获取队列长度
         * @return
         */
        @Override
        public int getSize() {
            return data.getSize();
        }
    
        /**
         * 是否为空
         * @return
         */
        @Override
        public boolean isEmpty() {
            return false;
        }
    
        /**
         * 获取队列容量
         * @return
         */
        public int getCapacity() {
            return data.getCapacity();
        }
    
        /**
         * 重写toString方法
         * @return
         */
        @Override
        public String toString() {
            StringBuilder resp = new StringBuilder();
            resp.append("Queue: front [");
            for (int i = 0; i < data.getSize(); i ++) {
                resp.append(data.get(i));
    
                if (i != data.getSize() - 1) {
                    resp.append(",");
                }
    
            }
    
            resp.append("] tail");
    
            return resp.toString();
        }
    
        public static void main(String[] args) {
            ArrayQueue<Integer> arrayQueue = new ArrayQueue<>();
            for (int i = 0; i < 10; i++) {
                arrayQueue.enqueue(i);
                System.out.println(arrayQueue);
    
                if (i % 3 == 2) {
                    arrayQueue.dequeue();
                    System.out.println(arrayQueue);
                }
            }
        }
    
    }
    
    - End -
    一个努力中的公众号
    关注一下吧
    以上为本篇文章的主要内容,希望大家多提意见,如果喜欢记得点个推荐哦
    作者:95.8℃
    本文版权归作者和博客园共有,欢迎转载,转载时保留原作者和文章地址即可。
  • 相关阅读:
    异常介绍
    docker 命令
    acm
    Openfiler能把标准x86/64架构的系统变成一个强大的NAS、SAN存储和IP存储网关
    docker 图解学习
    基于Docker的TensorFlow机器学习框架搭建和实例源码解读
    菜鸟打印控件
    Oracle 12c on Solaris 10 安装文档
    内存对齐小解
    安装oracle 11gr2 rac on solaris
  • 原文地址:https://www.cnblogs.com/maggieq8324/p/14878486.html
Copyright © 2011-2022 走看看