题目:
用两个栈实现一个队列。队列的声明如下,请实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入节点和队列头部删除节点的功能
import java.util.*;
public class Queue1
{
private Stack<String> a;//插入栈
private Stack<String> b;//删除栈
public static void main(String[] args)
{
Queue1 queue = new Queue1();
queue.appendTail("a");
queue.appendTail("b");
queue.appendTail("c");
queue.appendTail("d");
queue.appendTail("e");
while (!queue.isEmpty())
{
System.out.println(queue.deleteHead());
}
}
public Queue1()
{
a = new Stack<String>();
b = new Stack<String>();
}
public void appendTail(String string)
{
a.push(string);
}
public String deleteHead()
{
if (b.isEmpty())
{
while (!a.isEmpty())
{
b.push(a.pop());
}
}
return b.pop();
}
public boolean isEmpty()
{
return b.isEmpty() && a.isEmpty();
}
}
拓展:
用两个队列实现堆栈
注意:Queue只是一个接口,不能实例化。以下代码用LinkedList实现
import java.util.*;
public class QueueToStack
{
private Queue<String> q1=new LinkedList<String>();
private Queue<String> q2=new LinkedList<String>();
public static void main(String[] args)
{
QueueToStack qs=new QueueToStack();
qs.push("as");
qs.push("fd");
qs.push("hg");
qs.push("w");
qs.push("jg");
while(!qs.isEmpty())
System.out.println(qs.pop());
}
public void push(String s)
{
if(q1.isEmpty())
{
q1.offer(s);
while(!q2.isEmpty())
q1.offer(q2.poll());
}
else
{
q2.offer(s);
while(!q1.isEmpty())
q2.offer(q1.poll());
}
}
public String pop()
{
if(q1.isEmpty())
return q2.remove();
return q1.remove();
}
public boolean isEmpty()
{
return q1.isEmpty()&&q2.isEmpty();
}
}