【剑指offer】【7】两个栈实现队列及两个队列实现一个栈
2017-09-02 21:48
330 查看
2.3 数据结构
面试题7:两个栈实现队列
分析:主要实现添加删除元素的问题。先将元素添加到栈A,再全部将A中的全部放入栈B。从栈B中删除。添加:往栈A中添加
删除:必须从栈B中弹出,B中没有时,A中才能添加到B,并且要取到A的栈底,所以要取完A中的所有元素放在B中。
还可以实现size方法。
java实现:
import java.util.Stack; //假设加入或删除的都是int public class TwoStack2Queue{ Stack stack1 = new Stack(); Stack stack2 = new Stack(); //-------------------------------- public void appendTail(int i) { stack1.push(i); } //--------------------------------- public void deleteHead(){ //首先,如果栈2不为空,则从栈2中弹出;否则从栈1中全部加入栈2 //为了简化代码。我们分以下三步 if(stack2.isEmpty()){ while(!stack1.isEmpty()){ stack2.push(stack1.pop()); } } if(stack2.isEmpty()){//栈1中的已经全部加过来了,如再为空,说明栈1栈2中都为空 System.out.println("queue is Empty!"); return; } System.out.println(stack2.pop());//从栈2中弹出 } public static void main(String[] args) { TwoStack2Queue q = new TwoStack2Queue(); q.appendTail(1); q.appendTail(2); q.appendTail(3); q.deleteHead(); //删除头部的1 } }
面试题7变式:两个队列实现一个栈
分析:从添加和删除两方面分析添加:直接往队列1中添加
删除:如下:
c b a
对于队列,要删除是a。要模拟栈,要删除的是c,所以将队列1中的元素放入队列2中,只留1个:
c
和
b a
然后队列1中的一个元素出队即可。
注意:始终保证一个队列为空,添加元素始终往不为空的队列中添加。
相关文章推荐
- 《剑指 Offer》学习(2)—— 9_两个栈实现一个队列
- 剑指offer--两个栈实现一个队列
- 【剑指offer】用两个栈实现一个队列,用两个队列实现一个栈
- 【剑指offer】两个栈实现一个队列 push pop
- 【剑指Offer】两个栈实现一个队列
- 剑指offer之面试题7用两个栈实现一个队列
- 剑指offer_栈和队列---用两个栈实现一个队列
- 剑指offer 7---使用两个栈实现一个队列
- 剑指offer-用两个栈实现一个队列
- 剑指offer面试题java实现之题7:用两个栈模拟一个队列的入队和出队操作
- 剑指offer----用两个队列实现一个栈(java代码)
- 剑指offer:用两个栈实现队列、用两个队列实现一个栈(java)
- 【九度OJ1512】|【剑指offer7】用两个栈实现一个队列
- 剑指offer-09 用两个栈来实现一个队列
- 剑指offer-两个栈实现一个队列
- 【剑指offer】两个队列实现一个栈
- 【面试题】剑指Offer-7-两个栈实现一个队列
- 剑指offer-两个栈实现一个队列
- 剑指offer-用两个栈实现一个队列
- 【剑指offer】两个栈实现一个队列