试题7:用两个栈实现队列+使用两个队列实现栈

来源:互联网 发布:各算法时间复杂度 编辑:程序博客网 时间:2024/06/15 15:08

用两个栈实现队列的两个函数appendTail和deleteHead,分别完成在队列尾部插入节点和在队列头部删除结点。

public class Test07 {Stack<Integer>stack1=new Stack<>();Stack<Integer>stack2=new Stack<>();public void appendTail(int key){stack1.add(key);//在队列尾部添加元素}public int deleteHead(){if (stack2.size()<=0) {while(stack1.size()>0){stack2.push(stack1.pop());}}return stack2.pop();//删除队列头部元素}public static void main(String[] args) {   // 在队列中增加元素  Test07 cq = new Test07();          for (int i = 0; i < 5; i++) {              cq.appendTail(i);          }          // 依次取出          for (int i = 0; i < 5; i++) {              System.out.println(cq.deleteHead());          } }}
使用两个栈实现一个队列

public class Test07_02 { Queue<Integer> queue1 = new ArrayDeque<>();    Queue<Integer> queue2 = new ArrayDeque<>();    public void push(int node) {        //两个栈都为空时,优先考虑queue1        if (queue1.isEmpty()&&queue2.isEmpty()) {            queue1.add(node);            return;        }        //如果queue1为空,queue2有元素,直接放入queue2        if (queue1.isEmpty()) {            queue2.add(node);            return;        }        if (queue2.isEmpty()) {            queue1.add(node);            return;        }    }    public int pop() {        //两个栈都为空时,没有元素可以弹出        if (queue1.isEmpty()&&queue2.isEmpty()) {            try {                throw new Exception("stack is empty");            } catch (Exception e) {            }        }        //如果queue1为空,queue2有元素, 将queue2的元素依次放入queue1中,直到最后一个元素,我们弹出。        if (queue1.isEmpty()) {            while (queue2.size()>1) {                queue1.add(queue2.poll());            }            return queue2.poll();        }        if (queue2.isEmpty()) {            while (queue1.size()>1) {                queue2.add(queue1.poll());            }            return queue1.poll();        }        return (Integer) null;    }    public static void main(String[] args) {    Test07_02 test = new Test07_02();        test.push(1);        test.push(2);        test.push(3);        test.push(4);        System.out.println(test.pop());        System.out.println(test.pop());        test.push(5);        System.out.println(test.pop());        System.out.println(test.pop());        System.out.println(test.pop());    }}



原创粉丝点击