java 栈(stack)

stack介绍

Stack继承自Vector。底层是通过数组实现的,栈是线程安全的。
栈只能从一端添加元素,也只能从一端取出元素,这一端称为栈顶
栈的操作:
push() 入栈
pop() 出栈
peek() 查看栈顶元素,不弹出栈
search() 栈顶到该元素首次出现的位置的距离
empty() 栈是否为空

private static void testStack() {
    Stack<Integer> stack = new Stack<>();
    stack.push(1);
    stack.push(2);
    stack.push(1);
    stack.push(4);
    stack.push(5);
    System.out.println("===============> stack: " + stack);
    stack.pop();
    System.out.println("===============> stack: " + stack);
    System.out.println("===============> top: " + stack.peek());
    System.out.println("===============> stack isEmpty: " + stack.isEmpty());
    System.out.println("===============> stack search 1: " + stack.search(1));
}

栈的应用

1. undo(撤销)操作
比如我们编辑文档,发现输入错误的时候,这时会回退,实际上对输入的内容进行入栈和出栈的操作
2. 程序调用系统栈
平时写的代码方法,在方法里面又调用了其他方法,当程序执行这些方法的时候,首先会把当前执行的方法信息记录在一个栈中,等到调用方法执行完成之后,再从栈中弹出上个方法的相关信息,然后返回原来的地方继续运行。
3. 括号匹配
给定一个字符串,只包含(, [, {, ), ], },判定字符串中的括号匹配是否合法。
如"( )”,“( ) [ ] { }"是合法的
如“( ]”,"( [ ) ]” 是非法的

public static 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.isEmpty())
                return false;

            char topChar = stack.pop();
            if(c == ')' && topChar != '(')
                return false;
            if(c == ']' && topChar != '[')
                return false;
            if(c == '}' && topChar != '{')
                return false;
        }
    }
    return stack.isEmpty();
}




 

发布了70 篇原创文章 · 获赞 16 · 访问量 13万+

猜你喜欢

转载自blog.csdn.net/qq282330332/article/details/105720947