Anbei eine Idee, wie man das Problem mit üblichen Funktionen wie
"push" (etwas auf den Stack legen),
"pop" (das letzte Element vom Stack zeigen und löschen),
"delete_from_stack" (ein gezieltes Element vom Stack löschen) und
"print_stack" (gebe einen Stack aus)
lösen kann.
Viel Spaß damit. :-)
Und nun die Ausgabe auf dem Bildschirm.
#!/bin/bash
function push(){
# legt ein Element auf den Stack
# $1 Stackname
# $2 Wert
eval "${1}+=( \"${2}\" )"
}
function pop(){
# gibt das letzte Element eines Stacks aus
# und löscht dieses
# $1 name des Stacks
# Beispiel: pop "stack"
local max name value
eval max=\${#${1}[@]}
(( max-- ))
eval value="\${${1}[max]}"
echo "${value}"
delete_from_stack "${1}" "${max}"
}
function delete_from_stack(){
# Löscht von einem Stack einen Listenplatz
# $1 name des Stacks
# $2 stackplatz. Achtung: Start bei 0
# Beispiel: delete_from_stack "stack" 3
# löscht den vierten Stackeintrag von "stack"
local new_stack=() max i value line
eval max=\${#${1}[@]}
for((i=0;i<max;i++)); do
if [ $2 -ne $i ]; then
name="\${${1}[$i]}"
eval value="${name}"
new_stack+=( "${value}" )
fi
done
unset $1
line="eval $1=( \"\${new_stack[@]}\" )"
$line
}
function print_stack(){
# gibt den Inhalt eines Stacks zeilenweise aus
# $1 name des stacks
# Beispiel: print stack
local max i value name
eval max=\${#${1}[@]}
for((i=0;i<max;i++)); do
name="\${${1}[$i]}"
eval value="${name}"
echo "${value}"
done
}
unset stack
echo "Ein kleiner Test mit der Variablen 'stack'."
echo "Wir fügen hinzu: 0A, 1B, 2C 2C, 3D DD DD, 4E 4E"
push stack "0A"
push stack "1B"
push stack "2C 2C"
push stack "3D DD DD"
push stack "4E 4E"
echo "Der Stack ist nun:"
print_stack stack
echo "Wir löschen Element 1 (Position2) vom Stack."
delete_from_stack "stack" 1
echo "Der Stack ist nun:"
print_stack stack
echo "POP - Zeige/Nehme das letzte Element vom Stack."
pop stack
echo "Stack ist nun:"
print_stack stack
Ein kleiner Test mit der Variablen 'stack'.
Wir fügen hinzu: 0A, 1B, 2C 2C, 3D DD DD, 4E 4E
Der Stack ist nun:
0A
1B
2C 2C
3D DD DD
4E 4E
Wir löschen Element 1 (Position2) vom Stack.
Der Stack ist nun:
0A
2C 2C
3D DD DD
4E 4E
POP - Zeige/Nehme das letzte Element vom Stack.
4E 4E
Stack ist nun:
0A
2C 2C
3D DD DD
Keine Kommentare:
Kommentar veröffentlichen