题目232. 用栈实现队列 - 力扣(LeetCode)
class MyQueue {
public:
MyQueue() {}
void push(int x) { // 出栈
input.push(x);
}
int pop() {
// 如果出栈为空,把入栈元素全都转移到出栈
if (output.empty()) {
while (!input.empty()) {
int itop = input.top();
output.push(itop);
input.pop();
}
}
// pop出栈
int top = output.top();
output.pop();
return top;
}
int peek() {
// 把出栈元素转移到入栈
if (output.empty()) {
while (!input.empty()) {
int itop = input.top();
output.push(itop);
input.pop();
}
}
return output.top();
}
bool empty() { return input.empty() && output.empty(); }
private:
stack<int> input; // 入栈5
stack<int> output;
};
/**
* Your MyQueue object will be instantiated and called as such:
* MyQueue* obj = new MyQueue();
* obj->push(x);
* int param_2 = obj->pop();
* int param_3 = obj->peek();
* bool param_4 = obj->empty();
*/
题目225. 用队列实现栈 - 力扣(LeetCode)
class MyStack {
public:
MyStack() {
}
void push(int x) {
mainq.push(x);
}
int pop() {
//把除了最新的那个元素以外,全都放到备份队列中
while(mainq.size()>1)
{
backupq.push(mainq.front());
mainq.pop();
}
int pop=mainq.front();
mainq.pop();
//把备份队列放回主序列
while(!backupq.empty())
{
mainq.push(backupq.front());
backupq.pop();
}
return pop;
}
int top() {
//把除了最新的那个元素以外,全都放到备份队列中
while(mainq.size()>1)
{
backupq.push(mainq.front());
mainq.pop();
}
int top=mainq.front();
backupq.push(mainq.front());
mainq.pop();
//把备份队列放回主序列
while(!backupq.empty())
{
mainq.push(backupq.front());
backupq.pop();
}
return top;
}
bool empty() {
return mainq.empty();
}
private:
queue<int> mainq;//主队列
queue<int> backupq;//备份队列
};
/**
* Your MyStack object will be instantiated and called as such:
* MyStack* obj = new MyStack();
* obj->push(x);
* int param_2 = obj->pop();
* int param_3 = obj->top();
* bool param_4 = obj->empty();
*/
题目20. 有效的括号 - 力扣(LeetCode)
class Solution {
public:
bool isValid(string s) {
//用栈来解答
stack<char> st;
int i=0;
while(i<s.size())
{
if(s[i]=='('||s[i]=='['||s[i]=='{')
{
if(s[i]=='(')
{
st.push(')');
}
if(s[i]=='[')
{
st.push(']');
}
if(s[i]=='{')
{
st.push('}');
}
}else
{
if(i==0||st.empty())
{
return false;
}
char top=st.top();
if(top!=s[i])
{
return false;
}else
{
st.pop();
}
}
i++;
}
if(st.empty())
{
return true;
}else
{
return false;
}
}
};
题目1047. 删除字符串中的所有相邻重复项 - 力扣(LeetCode)
class Solution {
public:
string removeDuplicates(string s) {
stack<char> st;
int i=0;
while(i<s.size())
{
if(st.empty())
{
st.push(s[i]);
}else
{
int top=st.top();
if(top==s[i])
{
st.pop();
}else
{
st.push(s[i]);
}
}
i++;
}
int size=st.size();
string res(size,0);
for(int i=size-1;i>=0;i--)
{
res[i]=st.top();
st.pop();
}
return res;
}
};
最后
栈实现队列,一个出栈一个入栈
队列实现栈,一个主队列一个辅助队列
有效括号,和删除字符串相邻重复项,适合用栈来解决,栈适合解决判断前一个元素是否满足条件