文章目录
- 有效的括号
- 用队列实现栈
-
- 两个队列实现栈
- 一个队列实现栈
- 用栈实现队列
- 设计循环队列
- 最小栈
- 栈的压入&弹出序列
- 逆波兰表达式
队列:先进先出 栈:后进先出
有效的括号
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</