34 lines
488 B
Bash
34 lines
488 B
Bash
|
|
init() {
|
||
|
|
if [[ -n $KSH_VERSION ]]; then
|
||
|
|
set -A stack
|
||
|
|
else
|
||
|
|
stack=(); # this sets stack to '()' in ksh
|
||
|
|
fi
|
||
|
|
}
|
||
|
|
|
||
|
|
push() {
|
||
|
|
stack=("$1" "${stack[@]}")
|
||
|
|
}
|
||
|
|
|
||
|
|
stack_top() {
|
||
|
|
# this approach sidesteps zsh indexing difference
|
||
|
|
set -- "${stack[@]}"
|
||
|
|
printf '%s\n' "$1"
|
||
|
|
}
|
||
|
|
|
||
|
|
pop() {
|
||
|
|
stack_top
|
||
|
|
stack=("${stack[@]:1}")
|
||
|
|
}
|
||
|
|
|
||
|
|
empty() {
|
||
|
|
(( ${#stack[@]} == 0 ))
|
||
|
|
}
|
||
|
|
|
||
|
|
# Demo
|
||
|
|
push fred; push wilma; push betty; push barney
|
||
|
|
printf 'peek(stack)==%s\n' "$(stack_top)"
|
||
|
|
while ! empty; do
|
||
|
|
pop
|
||
|
|
done
|