解题思路
- 利用两个栈实现队列,即一个为主栈stack1,另一个栈stack2作为中介进行转置。
- 当要在队列尾部添加元素时,即在栈顶添加元素,故只需要在stack1的基础上再添加新元素即可。
- 当要删除队列头部的元素时,即实际上是删除栈底的元素,而因为栈只有一个出口,故便要利用中介栈stack2来对栈的元素进行倒置,再删除倒置后的栈顶元素,即为所求元素。
提示
- stackstack1:利用C++的stack容器定义一个元素为int类型的栈。
- 将删除的元素值赋给变量时,要记得在stack2栈顶上删除该元素,否则会再次回到stack1中,则最终只是查找,无法实现删除。
代码如下
class CQueue {
public:
stack<int>stack1;
stack<int>stack2;
CQueue() {
}
void appendTail(int value) {
stack1.push(value);
}
int deleteHead() {
if(stack1.empty()) return -1;
while(!(stack1.empty()))
{
int temp = stack1.top();
stack1.pop();
stack2.push(temp);
}
int a = stack2.top();
stack2.pop();
while(!(stack2.empty()))
{
int temp = stack2.top();
stack2.pop();
stack1.push(temp);
}
return a;
}
};