forked from HarshCasper/NeoAlgo
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request HarshCasper#2311 from ritvij14/stack-queue
added implementation of stack using Queue in Java
- Loading branch information
Showing
2 changed files
with
99 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,98 @@ | ||
/* Java Program to implement a stack using two queues | ||
by making the push operation costly*/ | ||
|
||
import java.util.*; | ||
|
||
public class StackUsingQueue { | ||
static class Stack { | ||
// the 2 queues | ||
Queue<Integer> qu1 = new LinkedList<>(); | ||
Queue<Integer> qu2 = new LinkedList<>(); | ||
|
||
// storing current size | ||
int currentSize; | ||
|
||
Stack() { | ||
currentSize = 0; | ||
} | ||
|
||
void push(int num) { | ||
currentSize++; | ||
|
||
// first, push num into an empty qu2 | ||
qu2.add(num); | ||
|
||
// now we push the other elements from qu1 to qu2 | ||
while (!qu1.isEmpty()) { | ||
qu2.add(qu1.peek()); | ||
qu1.remove(); | ||
} | ||
} | ||
|
||
void pop() { | ||
if (qu2.isEmpty()) { | ||
return; | ||
} | ||
|
||
// remove element and reduce size if qu2 not empty | ||
qu2.remove(); | ||
currentSize--; | ||
} | ||
|
||
int top() { | ||
if (qu2.isEmpty()) { | ||
return -1; | ||
} | ||
|
||
// return the top element | ||
return qu2.peek(); | ||
} | ||
|
||
int size() { | ||
return currentSize; | ||
} | ||
} | ||
|
||
public static void main(String[] args) { | ||
Stack stack = new Stack(); | ||
|
||
Scanner sc = new Scanner(System.in); | ||
System.out.println("Enter size:"); | ||
int size = sc.nextInt(); | ||
System.out.println("Enter the numbers:"); | ||
for (int i = 0; i < size; i++) { | ||
stack.push(sc.nextInt()); | ||
} | ||
sc.close(); | ||
|
||
System.out.println("Current Size:" + stack.size()); | ||
for (int i = size; i > 0; i--) { | ||
System.out.println(stack.top()); | ||
stack.pop(); | ||
} | ||
System.out.println("Current Size:" + stack.size()); | ||
} | ||
} | ||
|
||
/** | ||
* Sample input/output: | ||
* | ||
* Enter size: | ||
* 5 | ||
* Enter the numbers: | ||
* 5 | ||
* 4 | ||
* 3 | ||
* 2 | ||
* 1 | ||
* Current Size:5 | ||
* 5 | ||
* 4 | ||
* 3 | ||
* 2 | ||
* 1 | ||
* Current Size:0 | ||
* | ||
* Time complexity: O(n) for push, O(1) for pop | ||
* Space complexity: O(n) | ||
*/ |