使用A和B两个栈来模拟队列,一个为入栈一个为出栈,这样来实现队列
这里我们直接使用Java类库提供的Stack来实现。
首先我们定义连个栈,一个放数据,一个出数据
判断B栈是否有元素,有元素则直接pop;
没有元素则需要我们将A里面的元素出栈然后放到B里面,再取出,即实现队列的先进先出
Java代码:
package v;
import java.util.Stack;
/*
* 使用栈来模拟队列的操作
*/
public class MyQuenue<E> {
/*
* 使用Java类库里面的stack定义两个栈,一个用于出栈一个用于入栈
*/
private Stack<E> stack=new Stack<E>();
private Stack<E> stack2=new Stack<E>();
/*
* 入栈和出栈为了增加线程安全,使用了同步
*/
public synchronized void put(E data){
stack.push(data);
}
public synchronized E pop(){
/*
* 如果栈2为空,则把栈1里面的数据压到2里面,在出栈,即实现队列
*/
if(stack2.isEmpty()){
while(!stack.isEmpty()){
stack2.push( stack.pop());
return stack2.pop();
}
}
//否则直接出栈、实现栈对模拟队列
return stack2.pop();
}
public static void main(String[] args) {
MyQuenue<Integer> myQuenue=new MyQuenue<Integer>();
myQuenue.put(1);//第一元素
myQuenue.put(3);//第二元素
myQuenue.put(2);//第三元素
System.out.println("栈模拟队列后head数据:"+myQuenue.pop());
}
}
完成