栈的特点是先进先出,只能在队尾添加元素,只能在队头删除元素
我们实现的接口是
package Queue;
public interface Queue<E> {
int getSize();
boolean isEmpty();
void enqueue(E e);
E dequeue();
E getFront();
}
package Queue;
public class ArrayQueue<E> implements Queue<E> {
private Array<E> array;
public ArrayQueue(int capacity) {
array = new Array<>(capacity);
}
public ArrayQueue() {
array = new Array<>();
}
@Override
public int getSize() {
// TODO Auto-generated method stub
return 0;
}
public int getCapcity() {
return array.getCapacity();
}
@Override
public boolean isEmpty() {
// TODO Auto-generated method stub
return array.isEmpty();
}
@Override
public void enqueue(E e) {
// TODO Auto-generated method stub
array.addLast(e);
}
@Override
public E dequeue() {
// TODO Auto-generated method stub
return array.removeFirst();
}
@Override
public E getFront() {
// TODO Auto-generated method stub
return array.getFirst();
}
@Override
//重写tostring方法让System.out.println()能直接输出我们指定的类型
public String toString() {
StringBuilder res = new StringBuilder();
res.append("Queue: front [");
for(int i = 0 ; i <array.getSize() ;i++) {
res.append(array.get(i));
if(i!=array.getSize()-1)
res.append(',');
else
res.append("] tail");
}
return res.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 == 2) {
queue.dequeue();
System.out.println(queue);
}
}
}
}
对于时间复杂度的分析:
void enqueue(E) O(1)均摊之后
E dequeue() O(n)//出队后每个元素移一位
E front() O(1)
int getSize() O(1)
boolean isEmpty() O(1)