zoukankan      html  css  js  c++  java
  • leetCode(44):Implement Stack using Queues 分类: leetCode 2015-07-19 19:29 50人阅读 评论(0) 收藏

    Implement the following operations of a stack using queues.

    • push(x) -- Push element x onto stack.
    • pop() -- Removes the element on top of the stack.
    • top() -- Get the top element.
    • empty() -- Return whether the stack is empty.
    Notes:
    • You must use only standard operations of a queue -- which means only push to backpeek/pop from frontsize, and is empty operations are valid.
    • Depending on your language, queue may not be supported natively. You may simulate a queue by using a list or deque (double-ended queue), as long as you use only standard operations of a queue.
    • You may assume that all operations are valid (for example, no pop or top operations will be called on an empty stack).

    两个队列,永远有一个为空,插入时,插入到不为空的队列中,如果都为空则任意;弹出时,把不为空队列中的所有元素(最后一个除外)转移到另一队列当中,并将最后一个不插入,直接删除即可。如果两个队列均为空,则说明栈为空。


    class Stack {
    public:
        // Push element x onto stack.
        void push(int x) {//在非空队列中插入
            if (aqueue.empty())
    			bqueue.push(x);
    		else
    			aqueue.push(x);
        }
    
        // Removes the element on top of the stack.
        void pop() {
            if (aqueue.empty())
    		{//转移
    			while (bqueue.size() != 1)
    			{
    				int tmp = bqueue.front();
    				aqueue.push(tmp);
    				bqueue.pop();
    			}
    			bqueue.pop();
    		}
    		else
    		{
    			while (aqueue.size() != 1)
    			{
    				int tmp = aqueue.front();
    				bqueue.push(tmp);
    				aqueue.pop();
    			}
    			aqueue.pop();
    		}
        }
    
        // Get the top element.
        int top() {
            int tmp;
    		if (aqueue.empty())
    		{			
    			while (!bqueue.empty())
    			{
    				tmp= bqueue.front();
    				aqueue.push(tmp);
    				bqueue.pop();
    			}
    		}
    		else
    		{
    			while (!aqueue.empty())
    			{
    				tmp = aqueue.front();
    				bqueue.push(tmp);
    				aqueue.pop();
    			}
    		}
    		return tmp;
        }
    
        // Return whether the stack is empty.
        bool empty() {
            return (aqueue.empty() && bqueue.empty());
        }
    private:
        queue<int> aqueue;
        queue<int> bqueue;
    };



  • 相关阅读:
    仿照everything写的一个超级速查 原创
    [转]SharePoint 2013 Online App Development – Part 1
    [转]SharePoint 2013 App 开发 (2)
    [转]ASP.NET自定义控件复杂属性声明持久性浅析
    HasRights方法参数
    故障分析神器——BTrace
    JVM——Memory Analyzor分析内存溢出
    关于句柄
    Java内存区域与内存溢出
    命令行的使用
  • 原文地址:https://www.cnblogs.com/zclzqbx/p/4687053.html
Copyright © 2011-2022 走看看