栈是什么:
栈的定义
栈是我们经常使用的一种线性数据结构,它是只能通过一端操作的线性表。我们可以操作的一端称之为栈顶,另一端则称之为栈底。
特点
栈通常和队列作比较,队列的特点是先进先出,栈的特点则是先进后出。举一个例子:比如说我们生活中洗碗,总是将第一个洗的放在最下面,然后依次叠上去,当我们要取出碗二次冲洗的时候,我们总是从最上面取,而我们第一次洗的第一个碗往往在第二次洗的最后拿到
操作
栈最主要的操作有入栈,出栈,取栈顶元素和判断栈是否为空
入栈:即将栈从顶部压入
出栈:取出并删除出栈顶的元素
取栈顶:看一眼栈顶的元素是什么,不执行删除操作
java中的栈:
java中设计好了一个栈供我们使用,他就是java.util.Stack
这个类中只有如下五个方法,对应的是栈的五个操作
-
-
Modifier and Type Method and Description boolean
empty()
测试此堆栈是否为空。E
peek()
查看此堆栈顶部的对象,而不从堆栈中删除它。E
pop()
删除此堆栈顶部的对象,并将该对象作为此函数的值返回。E
push(E item)
将项目推送到此堆栈的顶部。int
search(Object o)
返回一个对象在此堆栈上的基于1的位置。
-
经典使用案例:
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/valid-parentheses
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
本题的解题思路也十分简单:
我们遍历这个字符串,先入栈一个,然后判断下一个是否与栈顶的元素匹配,如果匹配则删除栈顶元素,接着遍历下一个。如果不匹配则直接将其入栈。直到所有元素都遍历完成,如果栈空则说明所有的元素都匹配,如果栈不为空则表示存在不匹配的括号。
class Solution {
public boolean isValid(String s) {
int length = s.length();
//判断参数
if(s == null || length == 0){
return true;
}
Stack<Character> stack = new Stack();
int index = 0;
stack.push(s.charAt(index++));
while(index < length){
if(stack.empty()){
stack.push(s.charAt(index++));
continue;
}
if((s.charAt(index) == '}' && stack.peek() == '{') || (s.charAt(index) == ')' && stack.peek() == '(') || s.charAt(index) == ']' && stack.peek() == '['){
stack.pop();
index++;
}
else{
stack.push(s.charAt(index++));
}
}
if(stack.empty()){
return true;
}else{
return false;
}
}
}