package ch03; /** * 队列实现底层代码 * 队列的特性是先进先出 * 用front来标记需要被移除的时候数组下标 * 删除的时候 * 队列没有数据 不再删除 * 如果队列扔有数据 * 当队头没有达到临界值得时候 正常通过 front++ 来进行删除 * 当队头达到了临界值 需要先通过front拿出数据 然后对front进行格式化操作 再进行front++; * 用end来表示需要添加的时候表示队尾所在数组下标 * 如果队列数组已满 停止添加 * 如果队列数据没有满 * 当队尾没有达到临界值 正常通过 ++end 来进行添加 * 如果队列达到了临界值 需要先把end进行格式化 然后再进行++end添加 * 如果是压入数据 可默认视为 先进性删除 然后进行添加 * 添加的时候 * 队列如果 * Created by duyizhen on 2018/3/31. */ public class MyQueue { private long[] arr; // 基本容器 private int elements;// 有效数据的大小 private int front; // 队头所在位置 数组的下标 负责移除 private int end; // 队尾所在位置 数组的下标 负责添加 /** * 默认构造方法 */ public MyQueue(){ arr = new long[10]; elements = 0; front = 0; end = -1; } /** * 带参数的构造方法 指定大小 * @param maxSize */ public MyQueue(int maxSize){ arr = new long[maxSize]; elements = 0; front = 0; end = -1; } /** * 插入一个数据 * @param value */ public void insert(Long value){ // 只有内部还有空余的时候可以添加 if(elements != arr.length){ if(end == arr.length-1){ end = -1; } arr[++end] = value; elements++; } } /** * 压入一个数据 如果队列已满 挤出队头 * @param value */ public void push(long value){ if(elements == arr.length){ remove(); } insert(value); } /** * 移除一个数据 * @return */ public long remove(){ // 只有有数据的时候才可以移除 if(elements > 0){ // 首先总数减一 elements--; // 拿出队头位置的数据 long value = arr[front++]; // 判断队头是否超出了临界值 front最大为arr.length-1 if(front == arr.length){ front = 0; } return value; }else{ return 0; } } /** * 查看最顶部的数据 * @return */ public long peek(){ // 首先判断内部是否有元素 if(elements > 0){ return arr[end]; }else{ return 0; } } /** * 查看是否为空 * @return */ public boolean isEmpty(){ return elements == 0; } /** * 查看是否满了 * @return */ public boolean isFull(){ return elements == arr.length; } }
Queue 实现代码
最新推荐文章于 2023-07-29 21:18:50 发布