栈实现队列
package Queue;
import java.util.Stack;
//用两个栈来实现队列
/**
*思路:栈s1表示插入栈,栈s2表示弹出栈
*入队列直接入s1
*出队列分两种情况
*1) 如s2不为空,直接s2弹出元素
*2)如果s2为空,依次弹出s1数据放入s2,直到s1为空,然后再弹出s2的数据
*
*/
public class MyQueue
{
private Stack
s1=new Stack
();
private Stack
s2=new Stack
(); //入队列 public synchronized void push(E e){ s1.push(e); } //出队列 public synchronized E pop(){ if(s2.isEmpty()){ while(!s1.isEmpty()){ s2.push(s1.pop()); } } return s2.pop(); } public synchronized boolean empty(){ return s1.isEmpty()&&s2.isEmpty(); } public static void main(String[] args){ MyQueue
queue=new MyQueue
(); queue.push(1); queue.push(2); System.out.println("队列元素:"+queue.pop()); System.out.println("队列元素:"+queue.pop()); } }
结果如下:
队列实现栈
package Queue;
//用两个队列实现栈
/**
* 思路:用队列q1模拟入队列,q2,q1出队列
* 入队:直接压入q1
* 出队:(1)如果q1只有一个元素,那么q1出队列
* (2)q1不单单只有一个元素,q1总除了最后一个元素,全部入队列q2,输出那个最后元素,
* 然后在把q2全部入队列q1;
* @param
*
*/
public class MyStack
{
private Queue q1=new Queue();
private Queue q2=new Queue();
//入栈操作
public synchronized void push(E e) throws Exception{
q1.put(e);
}
//出栈操作
public synchronized E pop() throws Exception{
E e=null;
if(q1.size()!=0){
if(q1.size()==1){
e=(E) q1.get();
}else{
while(q1.size()!=1){
q2.put(q1.get());
}
e=(E)q1.get();
while(q2.size()!=0){
q1.put(q2.get());
}
}
}
return e;
}
//判断队列是否为空
public boolean isEmpty(){
return q1.isEmpty();
}
public static void main(String[] args){
MyStack stack=new MyStack();
try {
stack.push(1);
stack.push(2);
stack.push(3);
System.out.println("出栈元素:"+stack.pop());
System.out.println("出栈元素:"+stack.pop());
System.out.println("出栈元素:"+stack.pop());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
结果如下: