数据结构-队列
与栈后进先出不同,队列是一种先进先出的数据结构,FIFO(First In First Out)。
基于数组实现栈
队列的操作也是数组操作的一个子集。因此我们将之前博客(https://blog.csdn.net/weixin_43400170/article/details/103931221)中实现的动态数组复用,包装一个队列。
定义一个队列接口
将队列的基本操作定义在接口中,实现类去具体实现。
话不多说,上代码
/*
定义queue数据结构的操作
*/
public interface Queue<E> {
/*
* 入队
* */
public abstract void enqueue(E element);
/*
* 出队
* */
public abstract E dequeue();
/*
* 查看队首元素
* */
public abstract E getFront();
public abstract int getSize();
public abstract boolean isEmpty();
}
import array.MyArray;
/*
* 基于动态数组实现数据结构-队列
* */
public class ArrayQueue<E> implements Queue<E> {
/*
* 代理一个之前实现的动态数组MyArray
* */
private MyArray<E> array;
public ArrayQueue(int capacity){
this.array=new MyArray<>(capacity);
}
public ArrayQueue() {
this(10);
}
@Override
public void enqueue(E element) {
array.addLast(element);
}
@Override
public E dequeue() {
return array.removeFirst();
}
@Override
public E getFront() {
return array.getLast();
}
@Override
public int getSize() {
return array.getSize();
}
@Override
public boolean isEmpty() {
return array.isEmpty();
}
@Override
public String toString(){
StringBuilder sb=new StringBuilder();
sb.append("queue:");
sb.append("front[");
for (int i = 0; i < array.getSize(); i++) {
sb.append(array.get(i));
if(i!=array.getSize()-1){
sb.append(",");
}
}
sb.append("]tail");
return sb.toString();
}
public static void main(String[] args) {
ArrayQueue<Integer> queue=new ArrayQueue<>();
for (int i = 0; i < 10; i++) {
// 入队
queue.enqueue(i);
System.out.println(queue);
// 出队
if(i%3==0){
queue.dequeue();
System.out.println(queue);
}
}
}
}