欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【左神算法】数组实现队列

程序员文章站 2024-03-15 22:30:54
...

数组实现队列

思路

实现思路:队列的结构是先进先出、last->队尾  fast->队头 size->已有元素 arr->数组
     *     add() 添加元素  先判断是否超过存储长度 否则size++ last++ 如果last长度超过size 从新开始
     *     peek()->查看队列头元素 先判断队列是否为空 然后直接arr[fast]
     *     poll()->查看队列尾元素 先判断队列是否为空 然后返回arr[fast] fast++ 如果fast超过了数组长度 重置为0
     *

code

package com.ncst.base.two;

/**
 * @author i
 * @create 2020/5/10 17:13
 * @Description 数组实现队列
 *
 *     实现思路:队列的结构是先进先出、last->队尾  fast->队头 size->已有元素 arr->数组
 *     add() 添加元素  先判断是否超过存储长度 否则size++ last++ 如果last长度超过size 从新开始
 *     peek()->查看队列头元素 先判断队列是否为空 然后直接arr[fast]
 *     poll()->查看队列尾元素 先判断队列是否为空 然后返回arr[fast] fast++ 如果fast超过了数组长度 重置为0
 *
 */
public class ArrayQueue <T>{
    private int last;
    private int first;
    private T [] arr;
    private int size;

    public ArrayQueue(int size){
        arr = (T[])new Object[size];
        last = 0;
        first = 0;
        size = 0;
    }

    //add
    public void add(T data){
        if (size == arr.length){
            throw  new IllegalArgumentException("queue is full!");
        }
        arr[last] = data;
        size++;
        last = last == arr.length-1 ? 0 : last+1;
    }
    //peek
    public T peek(){
        if (size == 0){
            throw  new IllegalArgumentException("queue is empty()");
        }
        return arr[first];
    }

    //poll
    public T poll(){
        if (size == 0){
            throw  new IllegalArgumentException("queue is empty()");
        }
        T data = arr[first];
        size--;
        first = first == arr.length-1?0:first+1;
        return data;
    }

    public static void main(String[] args) {
        ArrayQueue arrayQueue = new ArrayQueue(3);
        arrayQueue.add(1);
        arrayQueue.add(2);
        arrayQueue.poll();
        arrayQueue.add(3);
        arrayQueue.add(4);
        System.out.println(arrayQueue.peek());
    }

}