DAY1. 用两个栈实现队列
剑指 Offer 09. 用两个栈实现队列 - 力扣(LeetCode) (leetcode-cn.com)
用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail
和 deleteHead
,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead
操作返回 -1 )
/*
* 想法:栈只能将栈顶的元素删除,为了实现队列的先进先出功能,可以使用两个栈
* 队尾功能插入栈addStack,队列头部删除栈delStack
* 例如,此时有一个队列L=[1,2,3]
* 那么此时 队列尾部插入栈 队列头部删除栈
* 3 1
* 2 2
* 1 3
* 为队列添加队尾元素只需要将元素入栈addStack,删除队头元素只需要将delStack栈元素出栈
* 思路: 入队只需要将元素入addStack栈,出栈时,需要先考虑delStack栈是否为空,如果为空,那么将addStack栈
* 所有的元素注入到delStack栈,如果注入后还为空,就表示没有要删除的元素了,否则,就出栈顶元素。
*/
class CQueue {
public:
stack<int> in,out;
CQueue() {
while(!in.empty())
in.pop();
while(!out.empty())
out.pop();
}
void appendTail(int value) {
in.push(value);
}
int deleteHead() {
if(out.empty())
{
while(!in.empty())
{
int top=in.top();
in.pop();
out.push(top);
}
}
if(out.empty())
{
return -1;
}
else
{
int deleteItem=out.top();
out.pop();
return deleteItem;
}
}
};
/**
* Your CQueue object will be instantiated and called as such:
* CQueue* obj = new CQueue();
* obj->appendTail(value);
* int param_2 = obj->deleteHead();
*/