實現簡單的可變長字符串棧

Princedon 的 「Algorithms」公開課中講到寫一個存放字符串的棧,有一種實現是棧的大小隨着元素的增長不斷變大,採起的策略和 C++ 的 STL 同樣,讓棧以如今大小的 2 倍增加。code

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/19ci

相關文章
相關標籤/搜索