forked from TheAlgorithms/Java
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathQueueUsingTwoStacks.java
123 lines (108 loc) · 2.88 KB
/
QueueUsingTwoStacks.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
import java.util.Stack;
/**
* This implements Queue using two Stacks.
*
* Big O Runtime:
* insert(): O(1)
* remove(): O(1) amortized
* isEmpty(): O(1)
*
* A queue data structure functions the same as a real world queue.
* The elements that are added first are the first to be removed.
* New elements are added to the back/rear of the queue.
*
* @author sahilb2
*
*/
class QueueWithStack {
// Stack to keep track of elements inserted into the queue
private Stack inStack;
// Stack to keep track of elements to be removed next in queue
private Stack outStack;
/**
* Constructor
*/
public QueueWithStack() {
this.inStack = new Stack();
this.outStack = new Stack();
}
/**
* Inserts an element at the rear of the queue
*
* @param x element to be added
*/
public void insert(Object x) {
// Insert element into inStack
this.inStack.push(x);
}
/**
* Remove an element from the front of the queue
*
* @return the new front of the queue
*/
public Object remove() {
if(this.outStack.isEmpty()) {
// Move all elements from inStack to outStack (preserving the order)
while(!this.inStack.isEmpty()) {
this.outStack.push( this.inStack.pop() );
}
}
return this.outStack.pop();
}
/**
* Returns true if the queue is empty
*
* @return true if the queue is empty
*/
public boolean isEmpty() {
return (this.inStack.isEmpty() && this.outStack.isEmpty());
}
}
/**
* This class is the example for the Queue class
*
* @author sahilb2
*
*/
public class QueueUsingTwoStacks {
/**
* Main method
*
* @param args Command line arguments
*/
public static void main(String args[]){
QueueWithStack myQueue = new QueueWithStack();
myQueue.insert(1);
// instack: [(top) 1]
// outStack: []
myQueue.insert(2);
// instack: [(top) 2, 1]
// outStack: []
myQueue.insert(3);
// instack: [(top) 3, 2, 1]
// outStack: []
myQueue.insert(4);
// instack: [(top) 4, 3, 2, 1]
// outStack: []
System.out.println(myQueue.isEmpty()); //Will print false
System.out.println(myQueue.remove()); //Will print 1
// instack: []
// outStack: [(top) 2, 3, 4]
myQueue.insert(5);
// instack: [(top) 5]
// outStack: [(top) 2, 3, 4]
myQueue.remove();
// instack: [(top) 5]
// outStack: [(top) 3, 4]
myQueue.remove();
// instack: [(top) 5]
// outStack: [(top) 4]
myQueue.remove();
// instack: [(top) 5]
// outStack: []
myQueue.remove();
// instack: []
// outStack: []
System.out.println(myQueue.isEmpty()); //Will print true
}
}