栈:
栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。
百度百科的解释。
第一次接触的人肯定会看得头大。我用大白话来解释一下栈。
就跟手枪压子弹,发射子弹一样。
如上图,子弹只能从弹夹上边一次压进去,同时也只能从弹夹上边出来。最先进去的子弹,被压在最底下。最后进去的子弹,在最上边。射出时,最上边(最后进去的)的先出去,最下边的(最先进去的)后出来。
类似这种操作,放到计算机上,就是栈。
对一个数组,操作时,放元素,只放在最后,取元素,只取最后一个。就是栈。(运算受限的线性表)
栈的用处:
用电脑写文档或者文字的时候,就是把文字压到栈里边(入栈),然后可以进行撤销操作,(出栈)
Java栈:
声明:
Stack<type> stack = new Stack<>();
方法摘要:
方法摘要 | |
---|---|
boolean |
empty() 测试堆栈是否为空。 |
E |
peek() 查看堆栈顶部的对象,但不从堆栈中移除它。 |
E |
pop() 移除堆栈顶部的对象,并作为此函数的值返回该对象。 |
E |
push(E item) 把项压入堆栈顶部。 |
int |
search(Object o) 返回对象在堆栈中的位置,以 1 为基数。 |
例题:
力扣-题号-20-https://leetcode-cn.com/problems/valid-parentheses/
20. 有效的括号
给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
示例 1:
输入: "()"
输出: true
示例 2:
输入: "()[]{}"
输出: true
示例 3:
输入: "(]"
输出: false
示例 4:
输入: "([)]"
输出: false
示例 5:
输入: "{[]}"
输出: true
class Solution {
public boolean isValid(String s) {
Stack<Character> st = new Stack<>();
char c ;
char a;
for (int i = 0; i < s.length(); i++) {
c = s.charAt(i);
if (c == '(' || c == '[' || c == '{') st.push(c);
else {
if (st.isEmpty()) return false;
a = st.pop();
if((c == ')' && a != '(') ||(c == ']' && a != '[') ||(c == '}' && a != '{')) return false;
}
}
return st.isEmpty();
}
}