zoukankan      html  css  js  c++  java
  • Leetcode225. 用队列实现栈 && LeetCode232. 用栈实现队列

    用栈实现队列 和 用队列实现栈 的思想不一样。

    (1)用栈实现队列将定义两个栈,其中一个是输入栈,一个是输出栈。关键是弹出元素的实现,通过这个两个栈实现先入先出。如果输出栈为空时,要将输入栈中的所有元素压入输出栈。然后从输出栈弹出元素。判空条件是:输入输出栈都为空。

    (2)用队列实现栈将定义两个队列。其中一个队列只起到备份前一个队列部分元素作用。关键依旧是弹出元素的实现,通过队列1弹出最后一个元素,队列2备份队列1的最后一个元素之前所有元素,然后当队列1弹出最后一个元素后,再将队列2的备份更新到队列1中。判空的条件是:队列1为空。

    代码

     1 class MyQueue {
     2 public:
     3     /** Initialize your data structure here. */
     4     stack<int>stIn;
     5     stack<int>stOut;
     6     MyQueue() {
     7 
     8     }
     9     
    10     /** Push element x to the back of queue. */
    11     void push(int x) {
    12         stIn.push(x);
    13     }
    14     
    15     /** Removes the element from in front of queue and returns that element. */
    16     int pop() {
    17         if(stOut.empty()){
    18             while(!stIn.empty()){
    19                 stOut.push(stIn.top());
    20                 stIn.pop();
    21             }
    22         }
    23         int res = stOut.top();
    24         stOut.pop();
    25         return res;
    26         
    27     }
    28     
    29     /** Get the front element. */
    30     int peek() {
    31          if(stOut.empty()){
    32             while(!stIn.empty()){
    33                 stOut.push(stIn.top());
    34                 stIn.pop();
    35             }
    36         }
    37         return  stOut.top();
    38         // int res = this->pop();
    39         // stOut.push(res);
    40         // return res;
    41     }
    42     
    43     /** Returns whether the queue is empty. */
    44     bool empty() {
    45         // if(stIn.empty() && stOut.empty()) return true;
    46         // else return false;
    47         return stIn.empty() && stOut.empty();
    48     }
    49 };
    50 
    51 /**
    52  * Your MyQueue object will be instantiated and called as such:
    53  * MyQueue* obj = new MyQueue();
    54  * obj->push(x);
    55  * int param_2 = obj->pop();
    56  * int param_3 = obj->peek();
    57  * bool param_4 = obj->empty();
    58  */
     1 class MyStack {
     2 public:
     3     /** Initialize your data structure here. */
     4     queue<int>q1;
     5     queue<int>q2;
     6     MyStack() {
     7 
     8     }
     9     
    10     /** Push element x onto stack. */
    11     void push(int x) {
    12         q1.push(x);
    13 
    14     }
    15     
    16     /** Removes the element on top of the stack and returns that element. */
    17     int pop() {
    18         while(q1.size() > 1){
    19             q2.push(q1.front());
    20             q1.pop();
    21         }
    22         
    23         while(!q2.empty()){
    24             q1.push(q2.front());
    25             q2.pop();
    26         }
    27         int res = q1.front();q1.pop();
    28         return res;
    29     }
    30     
    31     /** Get the top element. */
    32     int top() {
    33         return q1.back();
    34     }
    35     
    36     /** Returns whether the stack is empty. */
    37     bool empty() {
    38         return q1.empty();
    39     }
    40 };
    41 
    42 /**
    43  * Your MyStack object will be instantiated and called as such:
    44  * MyStack* obj = new MyStack();
    45  * obj->push(x);
    46  * int param_2 = obj->pop();
    47  * int param_3 = obj->top();
    48  * bool param_4 = obj->empty();
    49  */
  • 相关阅读:
    情报分析技术领域主要研究人员
    《Dynamic Topic Detection and Tracking: A Comparison of HDP, C-Word, and Cocitation Methods》笔记
    Adobe Acrobat 9 Pro 注册码
    文件访问被拒绝 需要管理员权限
    批量文件重命名工具-极力推荐 advanced renamer
    Discuz登录慢、退出也慢的原因?
    一些需要阅读的论文
    webview上传图片
    自定义圆形图片
    touch ImageView
  • 原文地址:https://www.cnblogs.com/fresh-coder/p/14330674.html
Copyright © 2011-2022 走看看