LeetCode 225.用队列实现栈 - C++ - 小结

用队列实现栈

使用队列实现栈的下列操作:

  • push(x): 元素 x 入栈
  • pop(): 移除栈顶元素
  • top(): 获取栈顶元素
  • empty(): 返回栈是否为空

注意:

  • 你只能使用队列的基本操作:也就是 push to back,peek/pop from front,size,和 is empty 这些操作是合法的
  • 你所使用的语言也许不支持队列。你可以使用 list 或者 deque(双端队列)来模拟一个队列,只要是标准的队列操作即可
  • 你可以假设所有操作都是有效的(例如,对一个空的栈不会调用 pop 或者 top 操作)

个人理解
这个和上面的栈实现队列有异曲同工之妙,但是稍有不同。两个队列实现栈,相当于两个正向,想要实现一个反向,正正肯定是不能得负的。
所以我们需要换一种想法,定义两个队列,输入一个数组,进入输入队列,然后将输入队列放到输出队列中,输入清空。
再来一个数字,将输出队列的数据放到输入中,实现反向,再重复步骤即可。

代码如下(C++):

class MyStack {
public:
  queue<int> inQueue;     // 输入队列
  queue<int> outQueue;    // 输出队列
  /** 初始化数据结构 */
  MyStack() {
  }
  /** 把值推入栈 */
  void push(int x) {
    inQueue.push(x);            // 将一个值推进输入队列
    while(!outQueue.empty()){   // 把输出队列中的给输入队列
      inQueue.push(outQueue.front());
      outQueue.pop();
    }
    queue<int> tmp = inQueue;   // 再把输入队列的还给输出队列
    inQueue = outQueue;
    outQueue = tmp;
    // while(!inQueue.empty()){   // 再把输入队列的还给输出队列
    //   outQueue.push(inQueue.front());
    //   inQueue.pop();
    // }
  }
  /** 移除栈顶元素 */
  int pop() {
    if(outQueue.empty()){   // 输出队列为空,return 0
      return 0;
    }
    int a = outQueue.front();   // 获取顶部
    outQueue.pop();             // 输出队列推出
    return a;
  }
  /** 获取栈顶元素 */
  int top() {
    if(outQueue.empty()){   //输出队列为空,return 0
      return 0;
    }
    return outQueue.front();    // 获取输出队列顶部
  }
  /** 查看队列是否为空 */
  bool empty() {
    return outQueue.empty();    // 判断输入队列是否为空
  }
};

放在最后

如果您喜欢我的文章,拜托点赞+收藏+关注,博主会根据大家喜好来推出相关系列文章~

更多精彩内容也可以访问我的博客Aelous-BLog

猜你喜欢

转载自blog.csdn.net/Aelous_dp/article/details/107855606