题目描述:
用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )
class CQueue {
public:
stack<int> s1; //s1作为原始栈,存储录入的数据
stack<int> s2; //s2作为辅助栈,倒插法实现队列
CQueue() {
/*之前我把栈定义在这个CQueue()函数里面了,结果因为是局部变量,
不能被其他函数识别!后来瞄了一眼题解,才发现这里什么也不用实现。*/
}
void appendTail(int value) {
s1.push(value);
}
int deleteHead() {
if(s2.empty()) //s2不为空时,说明栈s1中的元素已经转移到s2中了。
//此时s1是空的!
//如果缺失这个判断,会有部分返回结果被错误地记作-1
{
if(s1.empty())
{
return -1;
}else{
while(!s1.empty())
{ s2.push(s1.top());
s1.pop(); //s1中的元素转移之后记得删除
}
}
}
int head;
head = s2.top();
s2.pop();
return head;
}
};
/**
* Your CQueue object will be instantiated and called as such:
* CQueue* obj = new CQueue();
* obj->appendTail(value);
* int param_2 = obj->deleteHead();
*/