两个栈实现队列与两个队列实现栈(java)

来源:互联网 发布:winrar软件下载免费版 编辑:程序博客网 时间:2024/06/03 08:48

两个栈实现队列的pop和push

import java.util.*;/** * 用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。 * 思路:入队列,直接用堆栈入就行 *     出队列,当栈2位空的时候,把栈1所有的数据全部pop到栈2;栈2不为空的时候,直接将剩余的pop出去。 * */public class stackqueue {static Stack<Integer> stack1 = new Stack<Integer>();static Stack<Integer> stack2 = new Stack<Integer>();public void push(int node) {        stack1.push(node);     }        public int pop() {        if(stack2.empty()){            while(!stack1.empty()){            stack2.push(stack1.pop());            }        }        return stack2.pop();    }public static void main(String[] args) {        stackqueue sq=new stackqueue();        sq.push(1);        sq.push(2);        sq.push(3);        sq.pop();        sq.push(4);        sq.pop();        sq.pop();      }    }

两个栈实现队列的pop和push

import java.util.*;/** * 用两个队列来实现一个栈,完成队列的Push和Pop操作。 队列中的元素为int类型。 * 思路:入队列,当前哪个队列有内容就存入哪个队列 *     出队列,把当前有内容的队列1弹出队尾数据,应该把之前的数据全部push到队列2。 * */public class queueStack {Queue<Integer> queue1=new ArrayDeque<Integer>();Queue<Integer> queue2= new ArrayDeque<Integer>();public void push(int node){//最开始插入的时候,优先插到queue1中if(queue1.isEmpty()&&queue2.isEmpty()){queue1.offer(node);}//哪个有内容插入哪个队列if(!queue1.isEmpty()&&queue2.isEmpty()){queue1.offer(node);}else if(queue1.isEmpty()&&!queue2.isEmpty()){queue2.offer(node);}}public int pop(){if(queue1.isEmpty()&&queue2.isEmpty()){try{throw new Error("栈是空的!");}catch(Exception e){}}if(queue2.isEmpty()){while(queue1.size()>1){queue2.offer(queue1.poll());}return queue1.poll();}if(queue1.isEmpty()){while(queue2.size()>1){queue1.offer(queue2.poll());}return queue2.poll();}return (Integer) null;}public static void main(String[] args){queueStack qs = new queueStack();qs.push(1);qs.push(2);System.out.println(qs.pop());qs.push(3);qs.push(4);System.out.println(qs.pop());System.out.println(qs.pop());qs.push(5);System.out.println(qs.pop());System.out.println(qs.pop());}}



0 0