Datenstrukturen Teil 1 Arrays, Listen, Stapel und Warteschlange
Arrays
Arrays ●
●
●
●
●
Sammelbegriff für Anordnung, Aufstellung, Reihe von gleichen Elementen in festgelegter Art und Weise Werden unterschieden in Standardarrays und assoziative Arrays Können ein- oder mehrdimensional angelegt sein Je nach Programmiersprache mono- oder multitypisch Einfachste Datenstruktur, keine inhärente Funktionalität
Array ●
●
●
Ein eindimensionales Array ist vergleichbar mit dem mathematischen Vektor Ein n - dimensionales Array mit n=2 ist vergleichbar mit der mathematischen Matrix Die Daten werden „in einem Block“ im Speicher abgelegt und sind unter einem Index abruf- und modifizierbar
Arrays ●
●
„Normale“ Arrays werden durch einen ganzzahligen Index angesprochen Dabei startet der Index bei 0 und geht bei Arraylänge n bis n-1
Beispiel (in JAVA) Integer[] demo = Integer[10];// Array mit 10 Stellen demo[0] = 1;
// setzt den ersten Eintrag auf 1
demo[5] = 12;
// setzt den fünften Eintrag auf 12
Arrays ●
Assoziative Arrays können statt mit einer Zahl mit einer Zeichenkette indexiert werden
Beispiel PHP: var demo = array();
// Array wird angelegt
demo[„eintrag_1“] = 1;
// Index „eintrag_1“ auf 1 setzen
demo[„eintrag_5“] = 12;
// Index „eintrag_5“ auf 12 setzen
echo demo[„eintrag_1“];
// Gibt „1“ aus
System.out.println(demo[0]); // Gibt „1“ auf der Konsole aus System.out.println(demo[10]); // FEHLER!! Index geht von 0 - 9
Arrays ●
●
●
●
In den meisten kompilierten Programmiersprachen (C, Java) sind Ararys von vordefinierter statischer Länge In den meisten interpretierten Sprachen (PHP, Perl) sind Arrays dynamisch und in ihrer Länge nicht festgelegt Arrays sind in nahezu allen Programmiersprachen als Basistyp vorhanden Die meisten Algorithmen können Arrays als Datenstruktur verwenden, sind aber auf andere Strukturen ausgelegt.
Listen
Listen ●
●
●
Listen sind eine der grundlegenden Datenstrukturen, auf die andere Strukturen aufbauen Ein Listeneintrag speichert die im zugewiesenen Daten und enthält mindestens einen Verweis auf den nächsten Listeneintrag
Listen Beispiel (C): struct listNode { integer i;
// Datenfeld für Ganzzahl
listNode *lN;
// Zeiger auf nächsten Listeneintrag
}
Damit werden Listen erst mit zeigerfähigen Sprachen (und als Unterklasse davon den OO-Sprachen) implementierbar
listNode ln1 = {5, null};
// ein Eintrag ohne Nachfolger
listNode ln2 = {7, null};
// zweiter Eintrag ohne Nachfolger
ln1.lN = &ln2;
// Nachfolgeeintrag von ln1 wird auf Adresse // von ln2 gesetzt, eine Liste ist gebaut
printf(ln1.lN.i);
// gibt 7 aus
Listen Ein Knoten:
Listen ●
Einfach verkettete Liste –
Vorteile
Einfach verkettete Liste:
●
Doppelt (mehrfach) verkettete Liste:
●
–
Nachteile ●
Artikel Liste (Datenstruktur). In: Wikipedia, Die freie Enzyklopädie. Bearbeitungsstand: 3. April 2008, 13:11 UTC. URL: http://de.wikipedia.org/w/index.php?title=Liste_%28Datenstruktur%29&oldid=44476773
Elemente können sehr schnell am Anfang der Liste eingefügt werden; Sehr geringer Speicherbedarf Im Gegensatz zu einem Array ist das Einfügen problemlos möglich, ohne dass der komplette Datensatz bei jeder Vergrößerung umkopiert werden muss Es ist aufwändig nach Daten zu suchen, Knoten einzufügen, zu löschen und die Liste zu sortieren, da über jedes einzelne Element gegangen werden und das Einfügen an der ersten und der letzten Stelle gesondert behandelt werden muss.
Listen ●
Doppelt verkettete Liste –
Vorteile ●
● ● ●
–
Die Elemente in der zweiten Hälfte einer sortierten Liste sind schneller aufzufinden. Fehlerhafte Verweise können erkannt werden Schnelles Löschen und Einfügen von Elementen. Über die Liste kann von hinten nach vorne iteriert werden.
Nachteile ●
Höherer Speicherbedarf für die zusätzlichen Zeiger.
Stapel ●
●
● ●
Stapel
Stapel
Kann (theoretisch) eine beliebige Menge an typgleichen Daten aufnehmen Gibt diese entgegen zur Eingabereihenfolge wieder zurück Dies nennt man Last-in-First-out LIFO Braucht hierfür prinzipbedingt nur zwei Befehle: –
Push: einlagern
–
Pop: ausgeben Artikel Stapelspeicher. In: Wikipedia, Die freie Enzyklopädie. Bearbeitungsstand: 25. März 2008, 17:45 UTC. URL: http://de.wikipedia.org/w/index.php?title=Stapelspeicher&oldid=44138547
Stapel
Stapel ●
●
●
Durch seine Technik ideal zur Kontrolle der richtigen Termauswertung (Verschachtelung) Ebenfalls ideal zur Auswertung von Klammern Da nahezu alle Programmiersprachen grammatisch Klammer-Äquivalenz aufweisen, nutzen Compiler die Stapelstruktur zur Syntax-Valdierung
Artikel Stapelspeicher. In: Wikipedia, Die freie Enzyklopädie. Bearbeitungsstand: 25. März 2008, 17:45 UTC. URL: http://de.wikipedia.org/w/index.php?title=Stapelspeicher&oldid=44138547
Warteschlange ●
●
Warteschlange ●
Ähnliche Datenstruktur wie der Stapel, aber nach dem First-in-First-out FIFO Prinzip Kann beliebig viele Objekte aufnehmen und gibt sie in der Reihenfolge der Eingabe zurück Die dadurch entstehende „Verzögerung“ macht die Warteschlange zum idealen Pufferspeicher
Warteschlange
Warteschlange ●
●
● Artikel Warteschlange (Datenstruktur). In: Wikipedia, Die freie Enzyklopädie. Bearbeitungsstand: 23. März 2008, 19:18 UTC. URL: http://de.wikipedia.org/w/index.php?title=Warteschlange_%28Datenstruktur%29&oldid=44059834
Durch die „Verzögerung“ der Eingabedaten werden Warteschlagen meist als Puffer oder Pipelines genutzt Beispiele: –
Internet bzw. generell Netzwerkkommunikation
–
Druckerwarteschlange
–
Prozessorpipeline
Generell gilt für Stapel und Warteschlange, dass sie häufiger in Hardware als in Software genutzt werden