CS210 Tutorial 7
Complete the following exercises pasted below:
Given:
Step 1: Calculate Successful Pops
Successful pops = Total pops − Null pops = 10 − 3 = 7
Step 2: Calculate Current Stack Size
Current size = Pushes − Successful pops = 25 − 7 = 18
The current size of stack S is 18.
push(5), push(3), pop(), push(2), push(8),
pop(), pop(), push(9), push(1), pop(),
push(7), push(6), pop(), pop(), push(4),
pop(), pop().
| Operation | Stack (Bottom → Top) | Returned Value |
|---|---|---|
| push(5) | 5 | - |
| push(3) | 5, 3 | - |
| pop() | 5 | 3 |
| push(2) | 5, 2 | - |
| push(8) | 5, 2, 8 | - |
| pop() | 5, 2 | 8 |
| pop() | 5 | 2 |
| push(9) | 5, 9 | - |
| push(1) | 5, 9, 1 | - |
| pop() | 5, 9 | 1 |
| push(7) | 5, 9, 7 | - |
| push(6) | 5, 9, 7, 6 | - |
| pop() | 5, 9, 7 | 6 |
| pop() | 5, 9 | 7 |
| push(4) | 5, 9, 4 | - |
| pop() | 5, 9 | 4 |
| pop() | 5 | 9 |
3, 8, 2, 1, 6, 7, 4, 9
Remaining stack: 5
public static Stack duplicate(Stack S) {
Stack temp = new Stack();
Stack T = new Stack();
// Step 1: Move S to temp
while (!S.isEmpty()) {
temp.push(S.pop());
}
// Step 2: Move temp to T
while (!temp.isEmpty()) {
int X = temp.pop();
T.push(X);
S.push(X);
}
return T;
}
public static boolean searchAndRemove(Stack S, int X) {
if (S == null || S.isEmpty()) {
return false;
}
boolean found = false;
Stack T = new Stack();
// Step 1: Search for X and move elements to tempStack
while (!S.isEmpty()) {
int current = S.pop();
if (current == X && !found) {
found = true; // Found X, skip pushing to tempStack (remove it)
} else {
T.push(current);
}
}
// Step 2: Restore original order (excluding the removed X)
while (!T.isEmpty()) {
S.push(T.pop());
}
return found;
}
enqueue(5), enqueue(3), dequeue(),
enqueue(2), enqueue(8), dequeue(), dequeue(), enqueue(9), enqueue(1),
dequeue(), enqueue(7), enqueue(6), dequeue(), dequeue(), enqueue(4),
dequeue(), dequeue().
Given Operations:
enqueue(5), enqueue(3), dequeue(),
enqueue(2), enqueue(8), dequeue(), dequeue(), enqueue(9), enqueue(1),
dequeue(), enqueue(7), enqueue(6), dequeue(), dequeue(), enqueue(4),
dequeue(), dequeue().
| Operation | Queue (Front → Rear) | Returned Value |
|---|---|---|
| enqueue(5) | 5 | - |
| enqueue(3) | 5, 3 | - |
| dequeue() | 3 | 5 |
| enqueue(2) | 3, 2 | - |
| enqueue(8) | 3, 2, 8 | - |
| dequeue() | 2, 8 | 3 |
| dequeue() | 8 | 2 |
| enqueue(9) | 8, 9 | - |
| enqueue(1) | 8, 9, 1 | - |
| dequeue() | 9, 1 | 8 |
| enqueue(7) | 9, 1, 7 | - |
| enqueue(6) | 9, 1, 7, 6 | - |
| dequeue() | 1, 7, 6 | 9 |
| dequeue() | 7, 6 | 1 |
| enqueue(4) | 7, 6, 4 | - |
| dequeue() | 6, 4 | 7 |
| dequeue() | 4 | 6 |
5, 3, 2, 8, 9, 1, 7, 6
Remaining queue: 4
/* Assume D is a Queue and S is a Stack */
// Step 1: Move elements from D to S
while (!D.isEmpty()) {
S.push(D.dequeue());
}
// Step 2: Move elements from S back to D
while (!S.isEmpty()) {
D.enqueue(S.pop());
}
//assuming S, T are stacks and D is a Queue
D.enqueue(T.pop())
D.enqueue(T.pop())
T.push(S.pop())
T.push(S.pop())
T.push(S.pop())
T.push(D.dequeue())
S.push(D.first())
S.push(T.top())
D.enqueue(T.pop())
S.push(T.pop())
S.push(T.pop())
S.push(T.pop())
S.push(D.dequeue())
S.push(D.dequeue())