Arrays als Datenspeicher
|
Stapel (stack)
Ein Stapel-Speicher wird aus Elementen aufgeschichtet. Man kann immer nur das zuletzt
aufgeschichtete Element herunternehmen, das erste (unterste) Element kann als letztes wieder
entnommen werden. Ein Stack arbeitet nach dem Prinzip 'first in - last out' und umgekehrt.
Eine typische Anwendung in der Informatik ist das Speichern aktueller Daten vor einer
Unterbrechung und die Wiedergewinnung der gleichen Daten nach dem Ende einer Unterbrechung
(interrupt). Jedes Programm muss sicherstellen, dass nach der Unterbrechung
gleich viele Daten vom Stack entnommen werden, wie vorher
gespeichert wurden. Vorsicht bei rekursiven Programmen (die sich selbst aufrufen) -
Sie können den Stack evtl. mit großen Daten-Mengen überlasten.
Funktion push legt Daten auf den Stapel.
Dadurch erhält das Array am Ende ein zusätzliches Element.
Funktion pop entfernt das oberste Element des Stapels.
Das letzte Element des Arrays wird entfernt und zurückgegeben.
|
my(@ara,$v);
@ara = (100..103);
# @ara=(100,101,102,103);
$v = 999;
push(@ara,$v);
# @ara=(100,101,102,103,999);
# Hier ist Unterbrechung möglich
$v = pop(@ara);
# $v=999;
# @ara=(100,101,102,103);
|
Warteschlange (queue)
Eine Warteschlange (Förderband, queue, conveyor band, shift register) gibt die
darauf enthaltenen Elemente in der gleichen Reihenfolge zurück, in welcher
sie gespeichert wurden. Es arbeitet nach dem Prinzip 'first in - first out'.
Eine typische Anwendung in der Informatik ist ein Puffer für Daten,
die zwar rasch angenommen werden müssen, jedoch erst später oder langsamer
verarbeitet werden können - und zwar in der Reihenfolge ihres Eintreffens.
Funktion push reiht Daten in die Warteschlange.
Dadurch erhält das Array am Ende ein zusätzliches Element.
Funktion shift entfernt das vorderste (am längsten
wartende) Element der Warteschlange.
Das erste Element des Arrays wird entfernt und zurückgegeben.
|
my(@ara,$v);
@ara = (100..103);
# @ara=(100,101,102,103);
$v = 888;
push(@ara,$v);
# @ara=(100,101,102,103,888);
$v = shift(@ara);
# $v=100;
# @ara=(101,102,103,888);
$v = shift(@ara);
# $v=101;
# @ara=(102,103,888);
|
Funktion unshift wird für Stapel oder Warteschlangen
nicht benötigt, ist jedoch zur Vollständigkeit in allen modernen
Programmiersprachen enthalten.
Damit werden neue Daten als erstes Element des Arrays eingefügt.
Man kann damit z.B. einen shift rückgängig machen.
|
my(@ara) = (100..103);
# @ara=(100,101,102,103);
unshift(@ara,777);
# @ara=(777,100,101,102,103);
|