1、栈
举个例子,函数叠套,堆起来的函数,先调用的函数被后调用的函数压着,只有等到后调用的函数有返回值了,然后一层一层返回。
栈是一个先进后出的存储结构,常用的接口包含push(ele)、pop()等
栈的实现可以采用LinkedList、数组来实现。
2、队列
队列和我们平时排队是一个道理,先进先出的存储结构。
队列的实现也可以采用LinkedList、数组来实现。
常用的接口如下
3、两个栈实现一个队列
负负得正,用一个栈来放数据,用一个栈来取数据。
public class Solution {
Stack<Integer> stack1 = new Stack<Integer>();
Stack<Integer> stack2 = new Stack<Integer>();
public void push(int node) {
stack1.push(node);
}
public int pop() {
if(!stack2.empty()){
return stack2.pop();
}
while(!stack1.empty()){
stack2.push(stack1.pop());
}
return stack2.pop();
}
}
4、括号匹配问题
给出一个仅包含字符’(’,’)’,’{’,’}’,’[‘和’]’,的字符串,判断给出的字符串是否是合法的括号序列。括号必须以正确的顺序关闭,"()“和”()[]{}“都是合法的括号序列,但”(]“和”([)]"不合法。
public boolean isValid (String s) {
Stack<Character> left = new Stack<>();
for(char c : s.toCharArray()){
if(c == '(' || c== '{' || c == '['){
left.push(c);
}else{
if(!left.empty() && leftof(c) == left.peek()){
left.pop();
}else{
return false;
}
}
}
return left.empty();
}
//注意在java中单引号表示字符,双引号表示字符串。在这道题目中采用单引号
char leftof(char c){
if(c== ')') return '(';
if(c== '}') return '{';
return '[';
}