JAVA实现用两个队列实现栈和用两个栈实现队列

来源:互联网 发布:js div点击事件 编辑:程序博客网 时间:2024/05/22 12:41

栈实现队列

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 blocke.printStackTrace();}}}

结果如下:


原创粉丝点击