剑指offer面试题7:用两个栈实现队列(Java实现)

来源:互联网 发布:leancloud mysql 编辑:程序博客网 时间:2024/06/11 16:56

题目:

用两个栈实现一个队列。队列的声明如下,请实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入节点和队列头部删除节点的功能


import java.util.*;public class Queue1{      private Stack<String> a;//插入栈      private Stack<String> b;//删除栈      public static void main(String[] args) {  Queue1 queue = new Queue1();      queue.appendTail("a");  queue.appendTail("b");  queue.appendTail("c");   queue.appendTail("d");  queue.appendTail("e");   while (!queue.isEmpty()) {  System.out.println(queue.deleteHead());   }      }      public Queue1(){          a = new Stack<String>();          b = new Stack<String>();      }      public void appendTail(String string){          a.push(string);      }      public String deleteHead() {          if (b.isEmpty()) {  while (!a.isEmpty()){  b.push(a.pop());  }  }          return b.pop();      }        public boolean isEmpty() {          return b.isEmpty() && a.isEmpty();      }  }  
拓展:

用两个队列实现堆栈

注意:Queue只是一个接口,不能实例化。以下代码用LinkedList实现

import java.util.*;public class QueueToStack {private Queue<String> q1=new LinkedList<String>();private Queue<String> q2=new LinkedList<String>();public static void main(String[] args) {QueueToStack qs=new QueueToStack();qs.push("as");qs.push("fd");qs.push("hg");qs.push("w");qs.push("jg");while(!qs.isEmpty())System.out.println(qs.pop());}public void push(String s){if(q1.isEmpty()){q1.offer(s);while(!q2.isEmpty())q1.offer(q2.poll());}else{q2.offer(s);while(!q1.isEmpty())q2.offer(q1.poll());}}public String pop(){if(q1.isEmpty())return q2.remove();return q1.remove();}public boolean isEmpty(){return q1.isEmpty()&&q2.isEmpty();}}



0 0