版权声明:本文为博主原创文章,转载请注明出处 https://blog.csdn.net/u010647035/article/details/88778512
问题描述
使用两个队列实现栈,要满足后入先出,比如输入:1 2 3 4 5,那么输出就应该是:5 4 3 2 1
解题思路
使用两个队列,分别是数据队列和辅助队里,
1、数据添加到数据队列中
2、元素出栈时,将有数据的队列元素(保留最后一个元素)移动到无数据的队列
3、将最后一个元素出队,正式所需要的出栈数据
代码实现
public class QueueImplamentStack {
//数据队列
private static Queue originalQueue = new LinkedList();
//辅助队列
private static Queue helpQueue = new LinkedList();
public static void main(String[] args) {
System.out.println("入栈的元素:");
//添加数据到数据队列
for (int i = 1; i < 6; i++) {
System.out.print(i + " ");
originalQueue.add(i);
}
System.out.println();
System.out.println("出栈的元素:");
for (int i = 1; i < 6; i++) {
//获取元素
System.out.print(popElement() + " ");
}
}
/**
* 获取元素
*/
private static Object popElement() {
if (originalQueue.isEmpty()) {
return popElementFromOriginalQueue();
} else {
return popElementFromHelpQueue();
}
}
/**
* 将辅助队列的元素放入数据队列,并将辅助队列的最后一个元素出队
*/
private static Object popElementFromOriginalQueue() {
int size = helpQueue.size();
for (int i = 1; i < size; i++) {
originalQueue.add(helpQueue.poll());
}
return helpQueue.poll();
}
/**
* 将数据队列的元素放入辅助队列,并将数据队列的最后一个元素出队
*/
private static Object popElementFromHelpQueue() {
int size = originalQueue.size();
for (int i = 1; i < size; i++) {
helpQueue.add(originalQueue.poll());
}
return originalQueue.poll();
}
}
输出结果:
入栈的元素:
1 2 3 4 5
出栈的元素:
5 4 3 2 1