晚上看了一下这个问题,代码虽然简单,但还是需要好好琢磨一下子。
首先要了解栈和队列的特点:
栈:先进后出
队列:先进先出
这里也只有通过两个栈才能完成队列的先进先出的效果,代码如下:
static Stack first = new Stack();
static Stack second = new Stack();
/**
* @desc 入队只放入第一个栈中
* @param i
*/
public static void put(Object i) {
first.push(i);
}
/**
* @desc 获取队列头数据时将第一个栈中数据放入第二个栈中,并将栈顶元素弹出,之后再将第二个栈中数据全部放入第一个栈中
* @return
*/
public static Object get() {
while(!first.empty()) {
Object pop = first.pop();
second.push(pop);
}
Object pop = second.pop();
while(!second.empty()) {
first.push(second.pop());
}
return pop;
}
/**
* @desc 获取队列头数据 只有第二个栈里面没有数据才将第一个栈中数据全部导入 再弹出;否则,直接弹出
* @return
*/
public static Object get2() {
if(second.size() <=0) {
while(first.size()>0) {
second.push(first.pop());
}
}
if(second.size() == 0) {
return null;
}
return second.pop();
}