一、队列的定义
队列是只允许在一端进行插入操作,而在另一端进行删除操作的线性表
我们把允许删除的一端称为队首(front),插入的一端称为队尾(rear)
不含任何数据元素的队列称为空队列
队列是一种先进先出(First In Last Out)的线性表,简称FIFO
队列本身是一个线性表,其数据元素具有线性关系,只不过它是一种特殊的线性表而已
队列的插入操作,叫作入队
队列的删除操作,叫作出队
二、Queue队列接口的定义
同样队列可以顺序存储实现也可以链表存储实现
所以将共性抽取定义出Queue接口
public interface Queue<E> extends Iterable<E> {
public int size();
public boolean isEmpty();
public void offer(E element);
public E poll();
public E peek();
public void clear();
}
package p1.接口;
public interface Queue<E> extends Iterable<E> {
public void offer(E element);//入队
public E poll();//出队
public E peek();//查看队首元素
public boolean isEmpty();
public void clear();
public int size();
}
三、ArrayQueue类
该类为队列的顺序存储具体实现
因为队列本身就是一种特殊的线性表
所以我们可以借用之前完成的ArrayList来实现我们的ArrayQueue
package p2.线性结构;
import p1.接口.Queue;
//队列实现栈
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Objects;
public class ArrayQueue <E> implements Queue<E> {
private ArrayList<E> list;
public ArrayQueue(){
list=new ArrayList<>();
}
@Override
public void offer(E element) {
list.add(list.size(), element);
}
@Override
public E poll() {
return list.remove(0);
}
@Override
public E peek() {
return list.get(0);
}
@Override
public boolean isEmpty() {
return list.isEmpty();
}
@Override
public void clear() {
list.clear();
}
@Override
public int size() {
return list.size();
}
@Override
public Iterator<E> iterator() {
return list.iterator();
}
@Override
public String toString() {
return list.toString();
}
@Override
public boolean equals(Object o) {
if(o==null){
return false;
}
if(this==o){
return true;
}
if(o instanceof ArrayQueue){
ArrayQueue other= (ArrayQueue) o;
return list.equals(other.list);
}
return false;
}
}