两个队列实现一个栈

Posted 梵高先生

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了两个队列实现一个栈相关的知识,希望对你有一定的参考价值。

【题目】两个队列实现一个栈

 

1. 首先,第一个元素1,选择一个队列插入,比如,选择queue1;

2. 然后,模拟入栈,后续元素插入已经含有元素的队列中,比如,queue1中再依次插入2,3;

3. 接着,模拟出栈,后入先出,此时应该3出栈,方法是让queue1先出1,2,同时,queue2依次入1,2,此时queue1出3,即可实现。

 1 import java.util.LinkedList;
 2 import java.util.Queue;
 3 
 4 public class Main {
 5 
 6     public static void main(String[] args) {
 7 
 8         Queue<Integer> queue1 = new LinkedList<Integer>();
 9         Queue<Integer> queue2 = new LinkedList<Integer>();
10 
11         MyStack myQueue = new MyStack(queue1, queue2);
12 
13         myQueue.appendTail(1);
14         myQueue.appendTail(2);
15         myQueue.appendTail(3);
16         System.out.println(myQueue.deleteHead());
17         System.out.println(myQueue.deleteHead());
18         myQueue.appendTail(4);
19         System.out.println(myQueue.deleteHead());
20         System.out.println(myQueue.deleteHead());
21 
22     }
23 }
24 
25 class MyStack {
26 
27     private Queue<Integer> queue1;
28     private Queue<Integer> queue2;
29 
30     public MyStack(Queue<Integer> queue1, Queue<Integer> queue2) {
31         this.queue1 = queue1;
32         this.queue2 = queue2;
33     }
34 
35     public Boolean appendTail(Integer num) {
36 
37         if (null == queue1 || null == queue2 || null == num) {
38             return false;
39         }
40 
41         if (0 == queue2.size()) {
42             queue1.offer(num);
43             return true;
44         }
45 
46         if (0 == queue1.size()) {
47             queue2.offer(num);
48             return true;
49         }
50 
51         return false;
52 
53     }
54 
55     public Integer deleteHead() {
56 
57         if (null == queue1 || null == queue2) {
58 
59             return null;
60         }
61 
62         if (0 != queue1.size() && 0 == queue2.size()) {
63 
64             int length = queue1.size();
65 
66             for (int i = 0; i < length - 1; i++) {
67                 queue2.offer(queue1.poll());
68             }
69             return queue1.poll();
70         }
71 
72         if (0 == queue1.size() && 0 != queue2.size()) {
73 
74             int length = queue2.size();
75 
76             for (int i = 0; i < length - 1; i++) {
77                 queue1.offer(queue2.poll());
78             }
79             return queue2.poll();
80         }
81 
82         return null;
83 
84     }
85 
86 }

 

以上是关于两个队列实现一个栈的主要内容,如果未能解决你的问题,请参考以下文章

两个栈实现一个队列

用两个栈实现队列-剑指Offer

用两个栈实现一个队列

用两个栈实现一个队列(C++)

剑指offer-用两个栈实现队列

剑指offer用两个栈实现队列