BM42 用两个栈实现队列
描述
用两个栈来实现一个队列,使用n个元素来完成 n 次在队列尾部插入整数(push)和n次在队列头部删除整数(pop)的功能。 队列中的元素为int类型。保证操作合法,即保证pop操作时队列内已有元素。
数据范围: 要求:存储n个元素的空间复杂度为 
 ,插入与删除的时间复杂度都是 
示例1
输入:
["PSH1","PSH2","POP","POP"]复制返回值:
1,2复制说明:
"PSH1":代表将1插入队列尾部
"PSH2":代表将2插入队列尾部
"POP“:代表删除一个元素,先进先出=>返回1
"POP“:代表删除一个元素,先进先出=>返回2示例2
输入:
["PSH2","POP","PSH1","POP"]复制返回值:
2,1题解
- push时,直接将数据放入栈in中
 - pop时,如果out栈不为空,直接弹出栈顶元素,否则将in中的元素挨个push到out中之后再取out的栈顶元素
 
// https://www.nowcoder.com/practice/54275ddae22f475981afa2244dd448c6?tpId=295&tqId=23281&ru=/exam/oj&qru=/ta/format-top101/question-ranking&sourceUrl=%2Fexam%2Foj%3Fpage%3D1%26tab%3D%25E7%25AE%2597%25E6%25B3%2595%25E7%25AF%2587%26topicId%3D295
using namespace std;
class queue_1
{
public:
  void push(int node)
  {
    while (!out.empty())
    {
      in.push(out.top());
      out.pop();
    }
    in.push(node);
    while (!in.empty())
    {
      out.push(in.top());
      in.pop();
    }
  }
  int pop()
  {
    int t = out.top();
    out.pop();
    return t;
  }
private:
  stack<int> in;
  stack<int> out;
};
class Solution
{
public:
  void push(int node)
  {
    in.push(node);
  }
  int pop()
  {
    if (!out.empty())
    {
      int n = out.top();
      out.pop();
      return n;
    }
    while (!in.empty())
    {
      out.push(in.top());
      in.pop();
    }
    int n = out.top();
    out.pop();
    return n;
  }
private:
  stack<int> in;
  stack<int> out;
};








