zoukankan      html  css  js  c++  java
  • (LeetCode)两个队列来实现一个栈

    原题例如以下:

    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).
    基本思路是:如果有两个队列Q1和Q2。当二者都为空时,入栈操作能够用入队操作来模拟。能够随便选一个空队列,如果选Q1进行入栈操作,如今如果a,b,c依次入栈了(即依次进入队列Q1)。这时如果想模拟出栈操作,则须要将c出栈。由于在栈顶,这时候能够考虑用空队列Q2,将a。b依次从Q1中出队,而后进入队列Q2,将Q1的最后一个元素c出队就可以。此时Q1变为了空队列,Q2中有两个元素,队头元素为a,队尾元素为b,接下来如果再运行入栈操作。则须要将元素进入到Q1和Q2中的非空队列,即进入Q2队列,出栈的话。就跟前面的一样。将Q2除最后一个元素外所有出队,并依次进入队列Q1,再将Q2的最后一个元素出队就可以。

    Java实现代码例如以下:

    class MyStack {	LinkedList<Integer> queue1 = new LinkedList<Integer>();
    	LinkedList<Integer> queue2 = new LinkedList<Integer>();
        // Push element x onto stack.
        public void push(int x) {
            if(queue1.size()==0&&queue2.size()==0)
            {
            	queue1.offer(x);
            }
            else if(queue1.size()==0)
            {
            	queue2.offer(x);
            }
            else
            {
            	queue1.offer(x);
            }
        }
    
        // Removes the element on top of the stack.
        public void pop() {
        	if(queue1.size()!= 0)
        	{
        		int length = queue1.size();
            for(int i =0;i<length-1;i++)
            {
            	queue2.offer(queue1.poll());
            }
            queue1.poll();
        	}
        	else
        	{
        		int length = queue2.size();
        	for(int i =0;i<length-1;i++)
        	{
        		queue1.offer(queue2.poll());
        	}
        	 queue2.poll();
        	}
        }
        // Get the top element.
        public int top() {
        	if(queue1.size()!= 0)
        	{
        		int length = queue1.size();
            for(int i =0;i<length-1;i++)
            {
            	queue2.offer(queue1.poll());
            }
            int result =  queue1.element();
            queue2.offer(queue1.poll());
    		return result;
        	}
        	else
        	{
        		int length = queue2.size();
        	for(int i =0;i<length-1;i++)
        	{
        		queue1.offer(queue2.poll());
        	}
        	int result = queue2.element();
        	queue1.offer(queue2.poll());
        	return result;
        	}
        }
    
        // Return whether the stack is empty.
        public boolean empty() {
            return queue1.size()==0&&queue2.size()==0;
        }
        
    }


  • 相关阅读:
    Representation Data in OpenCascade BRep
    Render OpenCascade Geometry Surfaces in OpenSceneGraph
    Render OpenCascade Geometry Curves in OpenSceneGraph
    OpenCascade Shape Representation in OpenSceneGraph
    Geometry Surface of OpenCascade BRep
    Geometry Curve of OpenCascade BRep
    Tyvj2017清北冬令营入学测试
    Spfa算法模板
    洛谷1016 旅行家的预算
    洛谷1290 欧几里得的游戏
  • 原文地址:https://www.cnblogs.com/yjbjingcha/p/6984319.html
Copyright © 2011-2022 走看看