Skip to content

Added QueueUsingTwoStacks.java class in Other folder #229

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Oct 20, 2017
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
123 changes: 123 additions & 0 deletions Others/QueueUsingTwoStacks.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,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

}
}