【剑指Offer】【栈&队列】9_用两个栈实现一个队列

 题目:用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。

 

A:栈是先进后出的数据结构,队列是先进先出的数据结构。

  入队push:直接压入栈1

  出队pop:若栈2有元素,则取栈顶

         若栈2无元素,将栈1的元素逐一压入栈2中,使得栈顶元素到了栈低,栈低元素到了栈顶,实现了队列的先进先出特性

 

class Solution
{
public:
    void push(int node) {
        stack1.push(node);
    }

    int pop() {
   //栈2为空
        if(stack2.empty())
        {
    //压栈
            while(!stack1.empty())
            {
                int tmp = stack1.top();
                stack2.push(tmp);
                stack1.pop();
            }
        }
   //没有元素则删除失败
        if(stack2.empty())
        {
            return -1;
        }
    
        int data = stack2.top();
        stack2.pop();
        return data;
    }

private:
    stack<int> stack1;
    stack<int> stack2;
};

  

 

相关题目:

  最小栈(实现一个最小栈,有三种操作,min:得到栈中的最小值,push:在栈顶插入一个元素,pop:弹出栈顶元素,使这三种操作的时间复杂度都是O(1))

  构造队列

  队列最小修改(已知一个奇怪的队列,这个队列中有n个数,初始状态时,顺序是1,2,3,4,…n,是1-n按顺序排列。这个队列只支持一种操作,就是把队列中的第i号元素提前到队首(1<i<=n),如有4个元素,初始为1,2,3,4,可以将3提前到队首,得到3,1,2,4 。  现在给出一个经过若干次操作之后的序列,请你找出这个序列至少是由原序列操作了多少次得到的。)

 

posted @ 2019-08-25 21:31  XieXinBei0318  阅读(169)  评论(0编辑  收藏  举报