Stacks and Queues
Queue Enqueue/Dequeue
Enqueue values at the back and dequeue them from the front in first-in, first-out order.
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"
}
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
front
The front is the oldest value still waiting in the queue.
FIFO
A queue removes values in first-in, first-out order.