前几次我给大家分享了顺序表和栈,这次给大家分享队列。
何为队列:
由前几次的经验,我们书写一个Queue接口:定义如下
public interface Queue<E> extends Iterable<E>{
//获取队列中元素的个数
int getSize();
//判断队列是否为空
boolean isEmpty();
//入队一个元素
void enqueue(E e);
//出队一个元素
E dequeue();
//获取队头
E getFront();
//获取队尾
E getRear();
//清空队列
void clear();
}
我们发现,队列其实与线性表相似,只不过将顺序表的两端固定为队列的的头和尾。那么我们同样可以使用顺序表来实现队列:
有了前几次的经验,这次我们直接实现:
import java.util.Iterator;
public class ArrayQueue<E> implements Queue<E> {
private ArrayList<E> list;
public ArrayQueue(){
list=new ArrayList<>();
}
@Override
public int getSize() {
return list.getSize();
}
@Override
public boolean isEmpty() {
return list.isEmpty();
}
@Override
public void enqueue(E e) {
list.addLast(e);
}
@Override
public E dequeue() {
return list.removeFirst();
}
@Override
public E getFront() {
return list.getFirst();
}
@Override
public E getRear() {
return list.getLast();
}
@Override
public void clear() {
list.clear();
}
@Override
public Iterator<E> iterator() {
return list.iterator();
}
@Override
public String toString() {
StringBuilder sb=new StringBuilder();
sb.append(String.format("ArrayQueue: %d/%d\n",getSize(),list.getCapacity()));
sb.append('[');
if(isEmpty()){
sb.append(']');
}else{
for(int i=0;i<list.getSize();i++){
sb.append(list.get(i));
if(i==list.getSize()-1){
sb.append(']');
}else{
sb.append(',');
}
}