Stacks and Queues
Queue from Two Stacks
Implement queue behavior with an input stack and an output stack.
Algorithm
Basic Implementation
basic.sh
#!/usr/bin/env bash
set -euo pipefail
render() {
local out=""
for value in "$@"; do
if [[ -n "$out" ]]; then out+=" -> "; fi
out+="$value"
done
printf '%s\n' "$out"
}
in_stack=()
out_stack=()
for value in 10 20 30; do in_stack+=("$value"); done
while (( ${#in_stack[@]} > 0 )); do out_stack+=("${in_stack[-1]}"); unset 'in_stack[-1]'; done
removed=()
while (( ${#out_stack[@]} > 0 )); do removed+=("${out_stack[-1]}"); unset 'out_stack[-1]'; done
render "${removed[@]}"
Complexity
- Time: O(1) amortized per operation
- Space: O(n)
Implementation notes
- Keep the explicit stack/queue operations. Library shortcuts that only produce the final list hide the data-structure behavior this lesson is meant to replay.
- The final output uses a deterministic
a -> b -> cformat for cross-language comparison.
input stack
Enqueue pushes new values onto the input stack.
output stack
When the output stack is empty, transferring all input values reverses them into dequeue order.