您的位置:首页 > 产品设计 > UI/UE

Leetcode[225]-Implement Stack using Queues

2015-06-16 09:15 471 查看
用队列实现栈

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;
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  队列 leetcode