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

用栈实现队列

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

  • push(x): 将一个元素放入队列的尾部
  • pop(): 从队列首部移除元素
  • peek(): 返回队列首部的元素
  • empty(): 返回队列是否为空

示例:

MyQueue queue = new MyQueue();

queue.push(1);
queue.push(2);
queue.peek();  // 返回 1
queue.pop();   // 返回 1
queue.empty(); // 返回 false

说明:

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

个人理解
栈是后入先出,用两个后入先出实现一个先入先出,那很简单了,负负得正。
我们定义两个栈,一个栈用来输入数据,一个栈用来输出数据,在输出栈为空的时候,把输入栈内容推到输出栈就行,这样数据就反向了。实现了队列效果。

代码如下(C++):

class MyQueue {
public:
  stack<int> inStack;   // 定义输入栈
  stack<int> outStack;  // 定义输出栈
  /** 检查方法 */
  void check(){   // 检查输出栈是否有数据,没有的话,就把输入栈缓存的弄进来
    if(outStack.empty()){
      while(!inStack.empty()){
        outStack.push(inStack.top());
        inStack.pop();
      }
    }
  }
  /** 在此初始化数据结构 */
  MyQueue() {

  }
  /** push方法,直接在inStack中推入 */
  void push(int x) {
    inStack.push(x);    // 将数据推入输入栈
  }
  /** 从队列前面删除该元素并返回该元素 */
  int pop() {
    check();    // 检查栈元素
    int a = outStack.top();   // 获取输出栈顶部元素
    outStack.pop();           // 推出元素
    return a;
  }
  /** 获取顶峰元素 */
  int peek() {
    check();    // 检查栈元素
    return outStack.top();    // 获取输出栈的顶部元素
  }
  /** 返回队列是否为空  */
  bool empty() {
    return inStack.empty() && outStack.empty();   // 输入输出均为空即可
  }
};

放在最后

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

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

猜你喜欢

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