一天一道LeetCode

本系列文章已全部上传至我的github,地址:ZeeCoder‘s Github

欢迎大家关注我的新浪微博,我的新浪微博

欢迎转载,转载请注明出处

(一)题目

Implement the following operations of a queue using stacks.

  • push(x) – Push element x to the back of queue.

  • pop() – Removes the element from in front of queue.

  • peek() – Get the front element.

  • empty() – Return whether the queue is empty.

Notes:

+ You must use only standard operations of a stack – which means only push to top, peek/pop from top, size, and is empty operations are valid.

+ Depending on your language, stack may not be supported natively. You may simulate a stack by using a list or deque (double-ended queue), as long as you use only standard operations of a stack.

+ You may assume that all operations are valid (for example, no pop or peek operations will be called on an empty queue)

(二)解题

题目大意:用两个栈实现queue,要求实现push,pop,peek和empty

解题思路:栈是先进后出,队列是先进先出。利用两个栈stack1和stack2

push:和栈一样,直接push到一个栈stack1中

pop:有一个辅助栈就可以将stack1中的数依次push到stack2中,这样stack2的top就是最先进来的数,直接pop即可

peek:去队首的数,如果stack2不为空的话,直接返回stack2.pop即可,如果stack2为空,则先把stack1的数push过来,再去top元素

empty:如果stack1和stack2均为空,就直接返回true,否则返回false

具体实现如下:

class Queue {
public:
    // Push element x to the back of queue.
    void push(int x) {
        st1.push(x);
    }

    // Removes the element from in front of queue.
    void pop(void) {
        if(empty()) return;
        if(st2.empty())
        {
            while(!st1.empty()){//为空的话要把stack1的元素push进来
                st2.push(st1.top());
                st1.pop();
            }
        }
        st2.pop();
    }

    // Get the front element.
    int peek(void) {
        if(st2.empty()){//为空的话要把stack1的元素push进来
            while(!st1.empty()){
                st2.push(st1.top());
                st1.pop();
            }
        }
        return st2.top();
    }

    // Return whether the queue is empty.
    bool empty(void) {
        if(st1.empty()&&st2.empty()) return true;
        else return false;
    }
private:
    stack<int> st1;
    stack<int> st2;
};

最新文章

  1. mysql自动加入添加时间列
  2. angularjs 的笔记
  3. REDIS fdatasync技术问题和BIO技术的引入
  4. thinkphp学习笔记(一)
  5. #define | enum(enumerator)
  6. Spring(3.2.3) - Beans(2): 属性注入 &amp; 构造注入
  7. Hibernate占位符警告:use named parameters or JPA-style positional parameters instead.
  8. 用Robotium 去实现点击imageview
  9. 关于new Function使用以及将json格式字符串转化为json对象方法介绍
  10. NSIS:简单按钮美化插件SkinButton,支持透明PNG图片。
  11. 解决nexus下载maven索引的问题
  12. [Cocos2d-x]Lua 资源热更新
  13. 使用react native制作的微博客户端
  14. FutureTask理解
  15. jackson出现错误 Unrecognized field,几种处理方法
  16. Ubuntu16.04 ERROR 1698 (28000): Access denied for user &#39;root&#39;@&#39;localhost&#39; 解决流程
  17. ajax 406 Not Acceptable
  18. 同步、异步、回调执行顺序之经典闭包setTimeout分析
  19. UI5-文档-4.14-Custom CSS and Theme Colors
  20. zookeeper链接数导致kafka storm不能正常工作

热门文章

  1. 毕业回馈-89C51之GPIO使用(流水灯)
  2. SpringMVC mock测试详解
  3. JVM Class详解之一
  4. 如何用cmd通过sublime打开文件?
  5. windows下 gvim8.0 编译器配置
  6. Python3 循环
  7. 20160226.CCPP体系详解(0036天)
  8. 让你的代码量减少3倍!使用kotlin开发Android(四) kotlin bean背后的秘密
  9. 动手试试Android Studio插件开发
  10. EBS系统管理常用SQL语句整理汇总(参考网上资料&amp;其他人博客)