Stacks and Queues
Queue Enqueue/Dequeue
Enqueue values at the back and dequeue them from the front in first-in, first-out order.
Algorithm
The replay uses the same three values in every language, so this Bash DSA implementation can be compared directly with the rest of the DSA track.
front
The front is the oldest value still waiting in the queue.
FIFO
A queue removes values in first-in, first-out order.
Visual walkthrough
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"
}
queue=()
for value in 10 20 30; do
queue+=("$value")
done
removed=()
while (( ${#queue[@]} > 0 )); do
front=${queue[0]}
removed+=("$front")
queue=("${queue[@]:1}")
done
render "${removed[@]}"
Complexity
- Time: O(1) per operation with a real queue
- Space: O(n)
Implementation notes
queue=()starts an empty Bash indexed array used as the queue.queue+=("$value")appends each value at the back. The pinned values are10,20, and30.- The front value is read with
${queue[0]}and saved asfront. removed+=("$front")records the dequeued values in FIFO order.queue=("${queue[@]:1}")replaces the queue with a slice that skips the old front. This teaching version copies the remaining array, so front dequeue is O(n) in Bash even though a real queue can be O(1).render()receives values through"$@", buildsout, inserts the separator->between values, and prints withprintf.
Replay steps
enqueue: [] -> [10] -> [10, 20] -> [10, 20, 30]
dequeue: remove 10, remaining [20, 30]
finish: removed [10, 20, 30], queue []
output: 10 -> 20 -> 30