【左神算法】数组实现队列
程序员文章站
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());
}
}
上一篇: 在数组中找到出现次数大于n/k的数
下一篇: 求无序数组中第k大的数