欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java栈的实现

程序员文章站 2022-07-10 20:29:47
...

以前写过一篇有关栈的源码分析,这里就不多说,https://www.jianshu.com/p/34c14f9fba15,栈实际也是操作数组进行出栈,入栈等操作,所以我直接拿上篇文章自己打造的ArrayList

Stack类接口

public interface Stack<E> {
    //获得大小
    int getSize();

    //是否为空
    boolean isEmpty();

    //入栈
    void push(E e);

    //出栈
    E pop();

    //栈顶元素
    E peek();
}

ArrayStack实现类

public class ArrayStack<E> implements Stack<E> {
    Array<E> array;

    public ArrayStack(int capacity) {
        array = new Array<>(capacity);
    }

    public ArrayStack() {
        array = new Array<>();
    }

    @Override
    public int getSize() {
        return array.getSize();
    }

    @Override
    public boolean isEmpty() {
        return array.isEmpty();
    }

    public int getCapacity() {
        return array.getCapacity();
    }

    /**
     * 入栈
     */
    @Override
    public void push(E e) {
        array.addLast(e);
    }

    /**
     * 返回栈顶元素并出栈
     */
    @Override
    public E pop() {
        return array.removeLast();
    }

    /**
     * 栈顶的元素
     *
     * @return
     */
    @Override
    public E peek() {
        return array.getLast();
    }

    @Override
    public String toString() {
        StringBuilder res = new StringBuilder();
        res.append("Statck:").append('[');
        for (int i = 0; i < array.getSize(); i++) {
            res.append(array.get(i));
            if (i != array.getSize()) {
                res.append(",");
            }
        }
        res.append("] top");
        return res.toString();
    }
}

使用栈解决LeetCode中的第20的问题:有效的括号

class Solution {
    public boolean isValid(String s) {
        Stack<Character> stack = new Stack<>();
        for (int i = 0; i < s.length(); i++) {
            char c=s.charAt(i);
            if(c=='('||c=='['||c=='{'){
                stack.push(c);
            }else{
                if(stack.empty()){
                    return false;
                }
                char top=stack.pop();//返回栈顶并删除栈顶元素
                if(c == ')' && top != '(')
                    return false;
                if(c == ']' && top != '[')
                    return false;
                if(c == '}' && top != '{')
                    return false;
            }
        }
        return stack.isEmpty();
    }
    public static void main(String[] args) {

        System.out.println((new Solution()).isValid("()[]{}"));
        System.out.println((new Solution()).isValid("([)]"));
    }
}