Datenstrukturen Teil 1. Arrays, Listen, Stapel und Warteschlange. Arrays. Arrays. Array

Datenstrukturen Teil 1 Arrays, Listen, Stapel und Warteschlange Arrays Arrays ● ● ● ● ● Sammelbegriff für Anordnung, Aufstellung, Reihe von gle...
Author: Sophia Lorentz
91 downloads 2 Views 143KB Size
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

Suggest Documents