• 使用两个队列模拟一个栈


    准备笔试,在看相关知识,看到这个问题,如何使用两个队列模拟一个栈,在参考了相关知识下,实现了代码如下:

     1     public class Stack<E>{
     2         Queue<E> q1 = null; //队列q1提供压栈功能,
     3         Queue<E> q2 = null; //队列q2提供弹栈功能
     4         
     5         public Stack(){
     6             q1 = new LinkedList<E>();
     7             q2 = new LinkedList<E>();
     8         }
     9         //判断栈是否为空
    10         public synchronized boolean isEmpty(){
    11             return q1.isEmpty()&&q2.isEmpty();
    12         }
    13         
    14         //统计栈中元素个数
    15         public synchronized int size(){
    16             return q1.size()+q2.size();
    17         }
    18         
    19         //入栈
    20         public synchronized void push(E data){
    21             q1.add(data);
    22         }
    23         
    24         //出栈
    25         public synchronized E pop(){
    26             E temp = null;
    27             //如队列q1只有一个元素,q1直接取队首元素并输出
    28             if(q1.size()==1)
    29                 temp = q1.poll();
    30             
    31             //如队列q1不止一个元素,q1取队首元素并放入q2中,直到倒数第二个元素,最后一个元素输出,
    32             //然后再将q2中元素入队列q1
    33             if(q1.size()>1){
    34                 for(int i=0;i<q1.size();i++){
    35                     q2.add(q1.poll());
    36                 }
    37                 
    38                 temp=q1.poll();  //取队列q1最后一个元素
    39                     
    40                 while(!q2.isEmpty()){//再将q2中元素入队列q1
    41                     q1.add(q2.poll());
    42                 }
    43             }
    44             return temp;
    45         }
    46         
    47         //取栈顶元素
    48         public synchronized E peek(){
    49             E temp = null;
    50             //如队列q1只有一个元素,q1直接取队首元素并输出
    51             if(q1.size()==1)
    52                 temp = q1.peek();
    53             
    54             //如队列q1不止一个元素,q1取队首元素并放入q2中,直到倒数第二个元素,最后一个元素输出,
    55             //然后再将q2中元素入队列q1
    56             if(q1.size()>1){
    57                 for(int i=0;i<q1.size();i++){
    58                     q2.add(q1.poll());
    59                 }
    60                 temp=q1.peek();
    61                     
    62                 while(!q2.isEmpty()){
    63                     q1.add(q2.poll());
    64                 }
    65             }
    66             return temp;
    67         }
    68     }
  • 相关阅读:
    php 观察者模式
    php 策略模式
    php 适配器模式
    php 单例模式
    程序员应该关注的行业网站
    Mysql 5.7 索引使用规则和设计优化
    Docker官方镜像源或阿里云镜像源加速解决pull过慢的问题
    MySQL 优化案例
    mysql优化count(*)查询语句
    Mysql超大分页优化处理
  • 原文地址:https://www.cnblogs.com/JiaJoa/p/7783965.html
Copyright © 2020-2023  润新知