空间复杂度是指除了原本的数据存储空间外,算法运行还需要的额外存储空间
基于数组实现,可以自动扩容
分析入栈操作
public class MyArrayStack
{
    Object[] baseArray;
    int count;//元素个数
    int depth;//数组大小
    public MyArrayStack(int depth)
    {
        this.depth = depth;
        baseArray = new Object[depth];
    }
    /**
     * 入栈,自动扩容
     *
     * @param o
     * @return
     */
    public boolean push(Object o)
    {
        if (count == depth)
        {//扩容
            depth *= 2;
            Object[] tempArray = new Object[depth];
            System.arraycopy(baseArray, 0, tempArray, 0, count);
            baseArray = tempArray;
        }
        baseArray[count] = o;
        count++;
        return true;
    }
    /**
     * 出栈
     *
     * @return
     */
    public Object pop()
    {
        if (count == 0)
        {
            return null;
        }
        Object o = baseArray[count - 1];
        count--;
        return o;
    }
}
用链表实现,基于 java LinkedList 类
public class StackByLinkedList
{
    LinkedList baseList = new LinkedList();
    public void push(Object o)
    {
        baseList.addLast(o);
    }
    public Object pop()
    {
        return baseList.removeLast();
    }
}
表达式包含三种括号,可以相互嵌套,两两对应为合法形式,类似{[}()]这种是不合法形式,使用栈来判断是否合法
用栈来保存未匹配的的左括号,从左到右扫描,遇到右括号,与栈顶左括号比较,如果不匹配则不合法,如果匹配则继续
public boolean isValid(String s)
{
    Stack stack = new Stack();
    HashMap map = new HashMap();
    map.put(')', '(');
    map.put(']', '[');
    map.put('}', '{'); 
    Set left = map.keySet();
    Collection right = map.values();
    char[] chars = s.toCharArray();
    for (char c : chars)
    {
        if (stack.empty() && left.contains(c))
        {
            return false;
        }
        else if (!stack.empty() && left.contains(c))
        {
            if ((char) map.get(c) == (char) stack.peek())
            {
                stack.pop();
            }
            else
            {
                return false;
            }
        }
        else
        {
            stack.push(c);
        }
    }
    if (!stack.empty())
    {
        return false;
    }
    else
    {
        return true;
    }
}