JAVA描述两个队列实现栈

来源:互联网 发布:科技成果登记软件 编辑:程序博客网 时间:2024/05/20 21:19

工作室的小伙伴面试,被问到了两个栈实现一个队列的问题。
主要思想就是借助栈先进后出的特点,再加上两个栈提供的空间优势,将一个栈中的数据压到另一个栈中,此时最先进入的元素,也就是栈A1中栈底(bottom)的元素,变成了栈A2栈顶(top)元素,实现了队列先进先出的特性。

根据这个特性,我想到能不能像武侠小说里那样,好的思想(武功),倒着打也是很厉害的(详情见倚天屠龙记中六大派围攻光明顶,张无忌与少林方丈的一战描述~)

思想都是差不多的,两个队列实现栈的先进后出。
这里直接用JAVA提供的集合LinkedList,用函数AddLast与removefirst来模拟队列先进先出。
代码如下:
package Q07;

/**
* Created by Administrator on 2016/11/7.
*/
import java.util.LinkedList;

public class StackWithTwoQuenes {

//利用两个LinkedList链表模拟队列的先进先出private LinkedList<String> queue1=new LinkedList<>() ;private LinkedList<String> queue2=new LinkedList<>() ;//队列中数据出来public String pop(){    String re =null;    if(queue1.size()==0&&queue2.size()==0)    {        return null;    }    if(queue2.size()==0){        while(queue1.size()>0){            re=queue1.removeFirst();            if(queue1.size() != 0)            queue2.addLast(re);        }    }    else if(queue1.size()==0){        while(queue2.size()>0){            re=queue2.removeFirst();            if(queue2.size() != 0)            queue1.addLast(re);        }    }    return re;}public void  push(String a){    if(queue1.size()==0&&queue2.size()==0)    {        queue1.addLast(a);    }    else if(queue1.size()>0&&queue2.size()==0){        queue1.addLast(a);    }    else if(queue2.size()>0&&queue1.size()==0){        queue2.addLast(a);    }}public static void main(String [] args){    StackWithTwoQuenes a=new StackWithTwoQuenes();    String b;    a.push("a");    b=a.pop();    System.out.println(b);    a.push("b");    b=a.pop();    System.out.println(b);    a.push("c");    a.push("d");    b=a.pop();    System.out.println(b);    b=a.pop();    System.out.println(b);    b=a.pop();    System.out.println(b);}

}

0 0