zoukankan      html  css  js  c++  java
  • leetCode(37):Implement Queue using Stacks

    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 toppeek/pop from topsize, 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).
          两个栈,一个作为压入栈,一个作为弹出栈。当弹出栈为空时,把压入栈中的数据依次弹出并压入到弹出栈中。

    假设两者均为空,说明队列为空。

    class Queue {
    public:
        // Push element x to the back of queue.
        void push(int x) {
            push_stack.push(x);
        }
    
        // Removes the element from in front of queue.
        void pop(void) {
            if (pop_stack.empty())
    		{
    			while (!push_stack.empty())
    			{
    				pop_stack.push(push_stack.top());
    				push_stack.pop();
    			}
    			if (!pop_stack.empty())
    				pop_stack.pop();
    		}
    		else
    		{
    			pop_stack.pop();
    		}
        }
    
        // Get the front element.
        int peek(void) {
            if (pop_stack.empty())
    		{
    			while (!push_stack.empty())
    			{
    				pop_stack.push(push_stack.top());
    				push_stack.pop();
    			}
    			if (!pop_stack.empty())
    				return pop_stack.top();
    		}
    		else
    		{
    			return pop_stack.top();
    		}
    		return 0;
        }
    
        // Return whether the queue is empty.
        bool empty(void) {
            if (pop_stack.empty() && push_stack.empty())
    			return true;
    		else
    			return false;
        }
        
    private:
    	stack<int> pop_stack;
    	stack<int> push_stack;
    };


  • 相关阅读:
    4.2 省选模拟赛 流浪者 容斥dp
    4.2 省选模拟赛 旅行路线 广义SAM
    4.2 省选模拟赛 摆棋子 网络流 最大流/上下界最小流
    bzoj 4316 小C的独立集
    CF R630 div2 1332 E Height All the Same
    C++多线程の条件变量
    c++多线程のunique和lazy initation
    c++多线程の死锁与防止死锁
    c++多线程の数据竞争和互斥对象
    c++的多线程和多进程
  • 原文地址:https://www.cnblogs.com/wzjhoutai/p/6789306.html
Copyright © 2011-2022 走看看