提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
队列是先进先出,栈是先进后出。
提示:以下是本篇文章正文内容,下面案例可供参考
一、栈
1、创建栈:
Stack<Integer> stack=new Stack<>();
2、基础操作:
push()、pop()、peek()
二、队列
(1)Queue(接口)
Queue<Integer> queue=new LinkedList<>();
基础操作:offer()、peek()、poll()。
(2)Deque(双向队列)
Deque<String> deque=new ArrayDeque<String>();
Deque<String> deque=new LinkedList<String>();
基础操作:
双端队列一般有三种用途:
- 作为普通队列(先进先出)
Queue queue = new LinkedList()或Deque deque = new LinkedList()
- 作为堆栈(先进后出)
Deque deque = new LinkedList()
- 作为双端队列(两端可进出)
Deque deque = new LinkedList()
值得注意的是,Java堆栈Stack类已经过时,Java官方推荐使用Deque替代Stack使用。只需要调用以下三种Deque堆栈操作方法:push()、pop()、peek()。
(3)PriorityQueue(优先队列)
默认情况下,优先级由对象的自然顺序决定。
大顶堆:从队头到队尾按从大到小排。
PriorityQueue<Integer> q=new PriorityQueue<>((pair1, pair2)->pair2[1]-pair1[1]);
小顶堆:从队头到队尾按从小到大排。
PriorityQueue<Integer> q=new PriorityQueue<>((pair1, pair2)->pair1[1]-pair2[1]);
基础操作:offer()、peek()、poll()。
三、经典问题之有效的括号
基本思想:在匹配左括号的时候,右括号先入栈,就只需要比较当前元素和栈顶相不相等就可以了。
分析情况:
第一种情况:已经遍历完了字符串,但是栈不为空,说明有相应的左括号没有右括号来匹配,所以return false
第二种情况:遍历字符串匹配的过程中,发现栈里没有要匹配的字符。所以return false
第三种情况:遍历字符串匹配的过程中,栈已经为空了,没有匹配的字符了,说明右括号没有找到对应的左括号return false
那么什么时候说明左括号和右括号全都匹配了呢,就是字符串遍历完之后,栈是空的,就说明全都匹配了。
class Solution {
public boolean isValid(String s) {
Stack<Character> stack=new Stack<>();
for(int i=0;i<s.length();i++)
{
char ch=s.charAt(i);
if(ch=='(') stack.push(')');
else if(ch=='{') stack.push('}');
else if(ch=='[') stack.push(']');
else if(stack.isEmpty() || stack.peek()!=ch) return false;
else stack.pop();
}
return stack.isEmpty();
}
}
总结
提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。