栈的特点是后进先出,队列的特点是先进先出,可以使用两个栈来实现队列的入队和出队操作。
1,入队的元素均存储在stack1中;
2,出队操作时,首先检查备用栈stack2是否为空,若为空则将stack1中的所有元素依次弹出,并按序压入stack2中,此时stack2的栈顶元素即为当前“队列”的队首元素,弹出即可;若stack2不为空,则stack2的栈顶元素即为当前“队列”队首元素,直接弹出即可。
stack<int> stack1;
stack<int> stack2;
void appendToQueue(int value) {
stack1.push(value);
cout<<"append a new val : "<<value<<endl;
}
void deleteFromQueue() {
int res;
// 若备用栈不为空,直接弹出该栈栈顶元素
if (!stack2.empty()) {
res = stack2.top();
stack2.pop();
}
else {
if (stack1.empty()) {
cout<<"no element to delete"<<endl;
}
while (!stack1.empty()) {
int val = stack1.top();
stack1.pop();
stack2.push(val);
}
res = stack2.top();
stack2.pop();
}
cout<<"delete a val : "<<res<<endl;
}