您的位置:首页 > 职场人生

面试题7:用两个栈实现队列+用两个队列实现栈

2016-01-11 10:59 525 查看
算法思想(用两个栈实现队列):



代码如下:

import java.util.Stack;

public class Demo7_1 {

private Stack<String> stack1 = new Stack<String>();
private Stack<String> stack2 = new Stack<String>();

public void appendTail(String s){
stack1.push(s);
}

public String deleteHead() throws Exception{
if(stack2.isEmpty()){
while(!stack1.isEmpty()){
stack2.push(stack1.pop());
}
}
if(stack2.isEmpty()){
throw new Exception("队列为空,不能删除");
}
return stack2.pop();

}
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
Demo7_1 demo=new Demo7_1();
demo.appendTail("1");
demo.appendTail("2");
demo.appendTail("3");
System.out.println(demo.deleteHead());
System.out.println(demo.deleteHead());
System.out.println(demo.deleteHead());
}

}


算法思想(用两个队列实现栈):



代码如下:
import java.util.LinkedList;

public class Demo7_2 {
//tail in head out 1 2 3
private LinkedList<String> queue1 = new LinkedList<String>();
private LinkedList<String> queue2 = new LinkedList<String>();

public void push(String s){
if(queue1.size()==0 && queue2.size()==0){
queue1.addLast(s);
}
if(queue1.size()!=0){
queue1.addLast(s);
}else if(queue2.size()!=0){
queue2.addLast(s);
}
}

public String pop(){
String s=null;
if(queue1.size()==0 && queue2.size()==0){
return null;
}
if(queue2.size()==0)
{
while(queue1.size()>0)
{
s=queue1.removeFirst();//3从queue1中删除
if(queue1.size()!=0)
{
queue2.addLast(s);//1 2 进入queue2
}
}
}
else if(queue1.size()==0)
{
while(queue2.size()>0)
{
s=queue2.removeFirst();
if(queue2.size()!=0)
{
queue1.addLast(s);
}
}
}
return s;
}

public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
Demo7_2 demo=new Demo7_2();
demo.push("1");
demo.push("2");
demo.push("3");
System.out.println(demo.pop());
System.out.println(demo.pop());
System.out.println(demo.pop());
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: