队列Queue
*队列也是一种线性结构
*相比于数组,队列对应的操作是数组的子集
*只能从一端(队尾)添加元素,从另一端(队首)取出元素
*队列是一种先进先出的数据结构(先到先得 First In First Out)
基于数组的队列实现的源码如下:
package queue;
public interface Queue<E> {
public void enqueue(E e);
public E dequeue();
public E getFront();
public int getSize();
public boolean isEmpty();
}
package queue;
import array.Array;
/**
* 基于数组实现的队列
*
* @author zhangtianci
*/
public class ArrayQueue<E> implements Queue<E>{
private Array<E> array;
/**
* 构造方法
*
* @param capacity
* 队列的容量
*/
public ArrayQueue(int capacity){
array = new Array<>(capacity);
}
/**
* 无参构方法,默认容量大小为10
*/
public ArrayQueue(){
array = new Array<>();
}
/**
* 获取队列中元素的个数
*/
@Override
public int getSize() {
return array.getSize();
}
/**
* 判断队列是否为空,为空则返回true,反之false
*/
@Override
public boolean isEmpty() {
return array.isEmpty();
}
/**
* 返回队列的容量
* @return
*/
public int getCapacity(){
return array.getCapacity();
}
/**
* 向队尾添加一个 元素
*/
@Override
public void enqueue(E e) {
array.addLast(e);
}
/**
* 移出队首的元素并返回
*/
@Override
public E dequeue() {
return array.removeFirst();
}
/**
* 瞧一眼队首的元素
*/
@Override
public E getFront() {
return array.getFirst();
}
@Override
public String toString(){
StringBuilder res = new StringBuilder();
res.append(String.format("capacity = %d size = %d\n", getCapacity(),getSize()));
res.append("Front: ");
res.append('[');
for (int i = 0; i < getSize(); i++) {
res.append(array.get(i));
if (i != getSize() - 1) {
res.append(", ");
}
}
res.append(']');
res.append("tail");
return res.toString();
}
}
简单的时间复杂度分析:
* void enqueue(E e) : O(1) 均摊
*E dequeue() : O(n)
*E getFront() : O(1)
*int getSize() : O(1)
*boolean isEmpty() : O(1)