Lintcode 用栈实现队列

来源:互联网 发布:mac迅雷速度为0 编辑:程序博客网 时间:2024/05/17 01:49

用栈实现队列
正如标题所述,你需要使用两个栈来实现队列的一些操作。

队列应支持push(element),pop() 和 top(),其中pop是弹出队列中的第一个(最前面的)元素。

pop和top方法都应该返回第一个元素的值。

开始直观的想法:
`
class Queue {
public:
stack stack1;
stack stack2;

Queue() {    // do intialization if necessary}void push(int element) {    // write your code here    stack1.push(element);}int pop() {    // write your code here    if(stack1.empty())        return -1;    while(!stack1.empty()){        int num = stack1.top();        stack1.pop();        stack2.push(num);    }    //operate pop()    int value = stack2.top();    stack2.pop();    while(!stack2.empty()){        int num = stack2.top();        stack2.pop();        stack1.push(num);    }    return value;}int top() {    // write your code here    if(stack1.empty())        return -1;    while(!stack1.empty()){        int num = stack1.top();        stack1.pop();        stack2.push(num);    }    //operate top()    int value = stack2.top();    while(!stack2.empty()){        int num = stack2.top();        stack2.pop();        stack1.push(num);    }    return value;}

};
`
挑战:仅使用两个栈来实现它,不使用任何其他数据结构,push,pop 和 top的复杂度都应该是均摊O(1)的

class Queue {
public:
stack stack1;
stack stack2;

Queue() {    // do intialization if necessary}void push(int element) {    // write your code here    stack1.push(element);}int pop() {    // write your code here    if(stack1.empty()&&stack2.empty())        return -1;    if(stack2.empty()){        while(!stack1.empty()){            int num = stack1.top();            stack1.pop();            stack2.push(num);        }    }    int value = stack2.top();    stack2.pop();    return value;}int top() {    // write your code here    if(stack1.empty()&&stack2.empty())        return -1;    if(stack2.empty()){        while(!stack1.empty()){            int num = stack1.top();            stack1.pop();            stack2.push(num);        }    }    int value = stack2.top();    return value;}

};

0 0
原创粉丝点击