您的位置:首页 > 编程语言 > Java开发

第十九题:如何使用队列实现栈结构(Java)

2019-01-14 23:47 211 查看
版权声明:Please make the source marked https://blog.csdn.net/qq_31807385/article/details/86485687

题目要求:

如标题

代码实现与分析:

在图的深度优先遍历中,是需要使用栈结构来实现的,在面试中可能会被问到,如何仅用队列结构来实现图的深度优先遍历?

[code]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;
}
}

 

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