双栈实现队列
维护两个栈 stack1 和 stack2,其中 stack1 支持插入操作,stack2 支持删除操作
初始化: stack1 和 stack2 为空
插入元素:插入元素对应方法 appendTail,stack1 直接插入元素
删除元素:删除元素对应方法 deleteHead
如果 stack2 为空,则将 stack1 里的所有元素弹出插入到 stack2 里
如果 stack2 仍为空,则返回 -1,否则从 stack2 弹出一个元素并返回
class CQueue {
stack<int> stack1,stack2;
public:
CQueue() {
while (!stack1.empty()) {stack1.pop();}
while (!stack2.empty()) {stack2.pop();}
}
void appendTail(int value) {stack1.push(value);}
int deleteHead() {
if (stack2.empty()) {
while (!stack1.empty()) {
stack2.push(stack1.top());
stack1.pop();
}
}
if (stack2.empty()) {
return -1;
} else {
int deleteItem = stack2.top();
stack2.pop();
return deleteItem;
}
}
};
双队列实现栈