队列
- 用数组实现一个顺序队列
public class ArrayQueue<Item>{
private Item[] a = (Item[]) new Object[1];
private int N = 0;
public boolean isEmpty(){
return N == 0;
}
public int size(){
return N;
}
private void resize(int max){
Item[] temp = (Item[]) new Object[max];
for(int i = 0; i < N; i++)
temp[i] = a[i];
a = temp;
}
public void enqueue(Item item){
if(N == a.length)
resize(2*a.length);
a[N++] = item;
}
public Item dequeue(){
Item item = a[0];
for( int i = 1; i < N; i++)
a[i-1] = a[i]
a[N] = null;
if(N > 0 && N == a.length/4)
resize(a.length/2);
return item;
}
}
- 用链表实现一个链式队列
public class ListQueue<Item>{
private Node first;
private Node last;
private int N;
private class Node{
Item item;
Node next;
}
public boolean isEmpty(){
return first == null;
}
public int size(){
return N;
}
public void enqueue(Item item){
Node oldlast = last;
last = new Node();
last.item = item;
last.next = null;
if(isEmpty())
first = last;
else
oldlast.next = last;
N++;
}
public Item dequeue(){
Item item = first.item;
first = first.next;
if(isEmpty)
last = null;
N--;
return item;
}
}
- 实现一个循环队列
LeetCode 641. Design Circular Deque
LeetCode 239. Sliding Window Maximum