用栈实现队列
用栈实现队列,需要两个栈,一个定义为stackIn,另一个定义为stackOut
牛客NC76 用两个栈实现队列
1、队列的push()操作
这个直接将数据压入stcakIn,就行
void push(int node) {
stackIn.push(node);
}
2、队列的pop()操作
这里有两种解法
解法一:#
当stcakOut为空时再将stackIn中的数据全部压入stackOut,当stackOut不为空时,直接stackOut.pop()就行
int pop() {
// 只有当stOut为空的时候,再从stIn里导入数据(导入stIn全部数据)
if (stOut.empty()) {
// 从stIn导入数据直到stIn为空
while(!stIn.empty()) {
stOut.push(stIn.top());
stIn.pop();
}
}
int result = stOut.top();
stOut.pop();
return result;
}
解法二:#
每次出栈后直接将stack.Out数据全部压回stack.In
int pop() {
//将第一个栈中内容弹出放入第二个栈中
while (!stack1.empty()) {
stack2.push(stack1.top());
stack1.pop();
}
//第二个栈栈顶就是最先进来的元素,即队首
int res = stack2.top();
stack2.pop();
//再将第二个栈的元素放回第一个栈
while (!stack2.empty()) {
stack1.push(stack2.top());
stack2.pop();
}
return res;
}
之所以这样操作是因为队列不是一次性全部输入再全部输出,也就是说pop()后会接push()也会接pop()。
完整代码:#
class Solution {
stack<int> stackIn;
stack<int> stackOut;
public:
void push(int node) {
stackIn.push(node);
}
//解法一:
int pop() {
if (stackOut.empty()) {
while (!stackIn.empty()) {
stackOut.push(stackIn.top());
stackIn.pop();
}
}
int result = stackOut.top();
stackOut.pop();
return result;
}
//解法二:
int pop() {
//将第一个栈中内容弹出放入第二个栈中
while (!stack1.empty()) {
stack2.push(stack1.top());
stack1.pop();
}
//第二个栈栈顶就是最先进来的元素,即队首
int res = stack2.top();
stack2.pop();
//再将第二个栈的元素放回第一个栈
while (!stack2.empty()) {
stack1.push(stack2.top());
stack2.pop();
}
return res;
}
private:
stack<int> stack1;
stack<int> stack2;
};
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性