版权声明:Please make the source marked https://blog.csdn.net/qq_31807385/article/details/86485687
题目要求:
如标题
代码实现与分析:
在图的深度优先遍历中,是需要使用栈结构来实现的,在面试中可能会被问到,如何仅用队列结构来实现图的深度优先遍历?
package com.isea.brush;
import java.util.LinkedList;
import java.util.Queue;
/**
* 使用队列结构实现栈
* 实现思路:
* 使用两个队列;data队列和help队列,数据永远只存在data队列中,入栈的时候全部进入data栈
* 出栈的时候,只要data栈中的元素个数大于1,就将data栈的数据全部放入到help栈中,返回data栈的
* 最后一个元素,然后交换help栈和data栈的引用。
*/
public class TwoQueueStack {
private Queue<Integer> data;
private Queue<Integer> help;
public TwoQueueStack() {
data = new LinkedList<Integer>();
help = new LinkedList<Integer>();
}
public void push(int value) {
data.add(value);
}
public Integer pop() {
if (data.isEmpty()) {
throw new IllegalArgumentException("The Stack is empty...");
}
while (data.size() > 1) {
help.add(data.poll());
}
int result = data.poll();
swap();
return result;
}
private void swap() {
Queue<Integer> tmp = data;
data = help;
help = tmp;
}
public Integer peek() {
if (data.isEmpty()) {
throw new IllegalArgumentException("The stack is empty...");
}
while (data.size() != 1) {
help.add(data.poll());
}
int result = data.poll();
help.add(result);
swap();
return result;
}
}