From df5e9a8c6fa9bcffbac4faf574b6d881c05ce367 Mon Sep 17 00:00:00 2001 From: sahilb2 Date: Thu, 19 Oct 2017 16:23:57 -0500 Subject: [PATCH 1/2] added QueueUsingTwoStacks.java class in Other folder --- Others/QueueUsingTwoStacks.java | 67 +++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 Others/QueueUsingTwoStacks.java diff --git a/Others/QueueUsingTwoStacks.java b/Others/QueueUsingTwoStacks.java new file mode 100644 index 00000000..34bd4488 --- /dev/null +++ b/Others/QueueUsingTwoStacks.java @@ -0,0 +1,67 @@ +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 QueueUsingTwoStacks { + + // 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 QueueUsingTwoStacks() { + 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()); + } + +} From ea164f1ed698e46e9e61c6edcc8d974bd6eca03a Mon Sep 17 00:00:00 2001 From: sahilb2 Date: Thu, 19 Oct 2017 20:40:49 -0500 Subject: [PATCH 2/2] added main and test cases for QueueUsingTwoStacks.java --- Others/QueueUsingTwoStacks.java | 60 +++++++++++++++++++++++++++++++-- 1 file changed, 58 insertions(+), 2 deletions(-) diff --git a/Others/QueueUsingTwoStacks.java b/Others/QueueUsingTwoStacks.java index 34bd4488..19550df8 100644 --- a/Others/QueueUsingTwoStacks.java +++ b/Others/QueueUsingTwoStacks.java @@ -15,7 +15,7 @@ import java.util.Stack; * @author sahilb2 * */ -class QueueUsingTwoStacks { +class QueueWithStack { // Stack to keep track of elements inserted into the queue private Stack inStack; @@ -25,7 +25,7 @@ class QueueUsingTwoStacks { /** * Constructor */ - public QueueUsingTwoStacks() { + public QueueWithStack() { this.inStack = new Stack(); this.outStack = new Stack(); } @@ -65,3 +65,59 @@ class QueueUsingTwoStacks { } } + +/** + * 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 + + } +}