Perl-Arrays als Speicher

Stapel und Warteschlangen mit Perl-Arrays

Die Theorie der Daten-Speicher unterscheidet die beiden Typen "Stapel" (stack, first in - last out) und "Warteschlange" (queue, first in - first out) Alle modernen Programmiersprachen bieten die Möglichkeit, solche Speicher mit Array-Funktionen zu realisieren.
Perl Perl Scripts für CGI und Systemverwaltung (Arrays)
Stapel Stack-Speicher: first in - last out
Warteschlange Queue-Speicher: first in - first out
Verwandte Themen Array @ Datenspeicher in Javascript, PHP

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);