用队列实现栈
class Stack {
public:
// Push element x onto stack.
void push(int x) {
if(empty()){
<span style="white-space:pre"> </span>q1.push(x);
return;
}
if(!q1.empty()){
q1.push(x);
return;
}
if(!q2.empty()){
q2.push(x);
return;
}
}
// Removes the element on top of the stack.
void pop() {
if(empty()){
throw std::out_of_range("top(): empty stack");
}
else{
if(q1.size() >= 1){
while(q1.size()>1){
int temp = q1.front();
q1.pop();
q2.push(temp);
}
q1.pop();
return;
}
if(q2.size() >= 1){
while(q2.size()>1){
int temp = q2.front();
q2.pop();
q1.push(temp);
}
q2.pop();
return;
}
}
}
// Get the top element.
int top() {
if(!empty()){
if(!q1.empty())
return q1.back();
if(!q2.empty())
return q2.back();
}
else{
throw std::out_of_range("top(): empty stack");
}
}
// Return whether the stack is empty.
bool empty() {
if(q1.empty() && q2.empty())
return true;
else
return false;
}
private:
queue<int> q1;
queue<int> q2;
};
同样的,我们也可以用栈实现队列,剑指offer原题
class MyQueue
{
public:
void push(int node) {
stack1.push(node);
}
int pop() {
if(empty())
throw std::out_of_range("pop(): empty queue");
else{
if(!stack2.empty()){
int temp = stack2.top();
stack2.pop();
return temp;
}
else{
while(!stack1.empty()){
int tmp = stack1.top();
stack1.pop();
stack2.push(tmp);
}
int temp = stack2.top();
stack2.pop();
return temp;
}
}
}
bool empty(){
if(stack1.empty() && stack2.empty())
return true;
else
return false;
}
private:
stack<int> stack1;
stack<int> stack2;
};