Princedon 的 「Algorithms」公开课中讲到写一个存放字符串的栈,有一种实现是栈的大小随着元素的增加不断变大,采取的策略和 C++ 的 STL 一样,让栈以现在大小的 2 倍增长。
public class ResizingStackOfStrings
{
private String[] s;
private int N = 0;
public ResizingStackOfStrings()
{ s = new String[1]; }
public boolean isEmpty()
{ return N == 0; }
public void push(String item)
{
if ( N == s.length) resize(2 * s.length);
s[N++] = item;
}
public String pop()
{
String item = s[--N];
s[N] = null;
if (N > 0 && N == s.length/4) resize(s.length/2);
return item;
}
public void resize(int capacity)
{
String [] copy = new String[capacity];
for (int i = 0; i < N; i++)
copy[i] = s[i];
s = copy;
}
public static void main(String[] args)
{
ResizingStackOfStrings stack = new ResizingStackOfStrings();
stack.push("lindaiyu");
stack.push("hongloumeng");
stack.push("jiabaoyu");
System.out.println(stack.pop());
}
}
参考
https://class.coursera.org/algs4partI-010/lecture/19