栈
用数组实现一个顺序栈
public class ArrayStack<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 push(Item item){
if(N == a.length)
resize(2*a.length);
a[N++] = item;
}
public Item pop(){
Item item = a[--N];
a[N] = null;
if(N > 0 && N == a.length/4)
resize(a.length/2);
return item;
}
}
用链表实现一个链式栈
public class ListStack<Item>{
private Node first;
private int N;
private class Node{
Item item;
Node next;
}
public boolean isEmpty(){
return first == null;
}
public int size(){
return N;
}
public void push(Item item){
Node oldfirst = first;
first = New Node();
first.item = item;
first.next = oldfirst;
N++;
}
public Item pop(){
Item item = first.item;
first = first.next;
N--;
return item;
}
}
编程模拟实现一个浏览器的前进、后退功能
LeetCode 20. Valid Parentheses
LeetCode 150. Evaluate Reverse Polish Notation