• 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;
    };



  • 相关阅读:
    Linux基础命令---chfn
    第二十一课:js属性操作的兼容性问题
    jquery源码解析:jQuery工具方法Callbacks详解
    第二十课:js中如何操作元素的属性系统
    第十七课:js数据缓存系统的原理
    jquery源码解析:proxy,access,swap,isArraylike详解
    第十九课:盒子模型
    jquery源码解析:each,makeArray,merge,grep,map详解
    第十八课:js样式操作需要注意的问题
    下拉框插件的详解
  • 原文地址:https://www.cnblogs.com/zclzqbx/p/4687053.html
Copyright © 2020-2023  润新知