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℃
    本文版权归作者和博客园共有,欢迎转载,转载时保留原作者和文章地址即可。
  • 相关阅读:
    树形结构基础
    最长公共子序列
    四 过滤模式 map Only
    三 概要模式 2) MR倒排索引、性能分析、搜索干扰词。
    三 概要模式 1)数值概要 (单词计数记录计数最大值/最小值/计数平均值、中位数、标准差)
    一 梳理 从 HDFS 到 MR。
    个人学习源码的 HBase误区的总结 与 架构图
    15 hbase 学习(十五)缓存机制以及可以利用SSD作为存储的BucketCache
    13 hbase源码系列(十三)缓存机制MemStore与Block Cache
    HBase 系统架构
  • 原文地址:https://www.cnblogs.com/maggieq8324/p/14878486.html
Copyright © 2011-2022 走看看