文章目录
- 有效的括号
- 用队列实现栈
- 两个队列实现栈
- 一个队列实现栈
- 用栈实现队列
- 设计循环队列
- 最小栈
- 栈的压入&弹出序列
- 逆波兰表达式
队列:先进先出 栈:后进先出
有效的括号
https://leetcode.cn/problems/valid-parentheses/
class Solution {
public:bool isValid(string s) {stack<char> st;//遍历字符串,碰到左括号:进栈 碰到右括号:出栈顶元素判断是否和该右括号匹配for(auto& ch:s){if(ch == '(' || ch == '[' || ch == '{') {st.push(ch);}else {//如果栈为空,说明括号是不匹配的if(st.empty()) return false;//出栈顶元素和当前右括号匹配char top = st.top();st.pop();if( ch ==')' && top != '(' || ch == ']' && top != '[' ||ch == '}' && top != '{')return false; }}return st.empty(); //如果最后栈为空,说明括号是匹配的}
};
用队列实现栈
https://leetcode-cn.com/problems/implement-stack-using-queues/
两个队列实现栈
class MyStack {
public:MyStack() {}void push(int x) {NonEmptyQueue.push(x);//往不为空的队列插入数据}int pop() {//将不空队列的数据放到空队列当中,直到不空队列只有一个元素while(NonEmptyQueue.size() > 1){EmptyQueue.push(NonEmptyQueue.front());NonEmptyQueue.pop();}int front = NonEmptyQueue.front();NonEmptyQueue.pop();NonEmptyQueue.swap(EmptyQueue);//交换两个队列,保证EmptyQueue为空队列return front;}int top() {return NonEmptyQueue.back();}bool empty</