• 剑指offer编程题Java实现——面试题7相关题用两个队列实现一个栈


    剑指offer面试题7相关题目:用两个队列实现一个栈


    解题思路:根据栈的先入后出和队列的先入先出的特点
    1.在push的时候,把元素向非空的队列内添加
    2.在pop的时候,把不为空的队列中的size()-1份元素poll出来,添加到另为一个为空的队列中,再把队列中最后的元素poll出来
    两个队列在栈不为空的情况下始终是有一个为空,另一个不为空的。push添加元素到非空的队列中,pop把非空队列的元素转移到另一个空的队列中,直到剩下最后一个元素,这个元素就是要出栈的元素(最后添加到队列中的元素)。

     1 package Solution;
     2 
     3 import java.util.LinkedList;
     4 import java.util.Queue;
     5 
     6 /**
     7  * 剑指offer面试题7相关题目:用两个队列实现一个栈
     8  * 解题思路:根据栈的先入后出和队列的先入先出的特点
     9  * 在push的时候,把元素向非空的队列内添加
    10  * 在pop的时候,把不为空的队列中的size()-1份元素poll出来,添加到另为一个为空的队列中,再把队列中最后的元素poll出来
    11  * 两个队列在栈不为空的情况下始终是有一个为空,另一个不为空的。push添加元素到非空的队列中,pop把非空队列的元素转移到另一个空的队列中,
    12  * 直到剩下最后一个元素,这个元素就是要出栈的元素(最后添加到队列中的元素)。
    13  * @author GL
    14  *
    15  */
    16 public class No7StackWithTwoQueues {
    17 
    18     public static void main(String[] args) {
    19         push(1);
    20         push(2);
    21         push(3);
    22         pop();
    23         push(4);
    24         pop();
    25         pop();
    26         pop();
    27         pop();
    28 
    29     }
    30 
    31     private static Queue<Object> queue1=new LinkedList<Object>();
    32     private static Queue<Object> queue2=new LinkedList<Object>();
    33     
    34     /*
    35      * 向队列中执行入栈操作时,把元素添加到非空的队列中
    36      */
    37     public static void push(Object item){
    38         if(!queue1.isEmpty())
    39             queue1.offer(item);
    40         else
    41             queue2.offer(item);
    42         System.out.println("入栈元素为:"+item);
    43     }
    44     
    45     public static void pop(){
    46         if(!isEmpty()){
    47             if(queue1.isEmpty()){
    48                 while(queue2.size()>1){
    49                     queue1.offer(queue2.poll());
    50                 }
    51                 System.out.println("出栈元素为:"+queue2.poll());
    52             }else{
    53                 while(queue1.size()>1){
    54                     queue2.offer(queue1.poll());
    55                 }
    56                 System.out.println("出栈元素为:"+queue1.poll());
    57             }
    58         }
    59         else
    60             throw new RuntimeException("栈为空,无法执行出栈操作");
    61     }
    62     
    63     /*
    64      * 检查栈是否为空
    65      */
    66     private static boolean isEmpty(){
    67         return queue1.isEmpty()&&queue2.isEmpty();
    68     }
    69 }
  • 相关阅读:
    WSGI详解
    WSGI、flup、fastcgi、web.py的关系
    全面解读python web 程序的9种部署方式
    python对web服务器做压力测试并做出图形直观显示
    6个最佳的开源Python应用服务器
    用 Python 脚本实现对 Linux 服务器的监控
    浅谈图片服务器的架构演进
    Python中使用Flask、MongoDB搭建简易图片服务器
    流行python服务器框架
    搜索引擎技术之概要预览
  • 原文地址:https://www.cnblogs.com/gl-developer/p/6445425.html
Copyright © 2020-2023  润新知