Informatik I Einfache Datenstrukturen

Ähnliche Dokumente
Informatik II Einfache Datenstrukturen

Reihungen. Martin Wirsing. in Zusammenarbeit mit Matthias Hölzl und Nora Koch 11/03

Objektorientierte Programmierung

368 4 Algorithmen und Datenstrukturen

Programmierung I Einführung in Python, Beyond the Basics

Einführung in die Informatik 1

Grundlagen der Informatik. Prof. Dr. Stefan Enderle NTA Isny

Suchbäume. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

2. Programmierung in C

Über Arrays und verkettete Listen Listen in Delphi

Modellierung und Programmierung 1

Einführung in die Java- Programmierung

Professionelle Seminare im Bereich MS-Office

Konzepte der Informatik

Advoware mit VPN Zugriff lokaler Server / PC auf externe Datenbank

Die Programmiersprache C99: Zusammenfassung

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag

Software Engineering Klassendiagramme Assoziationen

Große Übung Praktische Informatik 1

5 DATEN Variablen. Variablen können beliebige Werte zugewiesen und im Gegensatz zu

Einführung in die Programmierung

Programmieren für Ingenieure Sommer Ein Rechner. Rechner sind überall. Gerät, das mittels programmierbarer Rechenvorschriften Daten verarbeitet.

Objektorientierte Programmierung. Kapitel 12: Interfaces

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag

Erweiterung der Aufgabe. Die Notenberechnung soll nicht nur für einen Schüler, sondern für bis zu 35 Schüler gehen:

Grundlagen der Programmierung Prof. H. Mössenböck. 14. Schrittweise Verfeinerung

13. Lineare DGL höherer Ordnung. Eine DGL heißt von n-ter Ordnung, wenn Ableitungen y, y, y,... bis zur n-ten Ableitung y (n) darin vorkommen.

Künstliches binäres Neuron

1. Motivation / Grundlagen 2. Sortierverfahren 3. Elementare Datenstrukturen / Anwendungen 4. Bäume / Graphen 5. Hashing 6. Algorithmische Geometrie

In diesem Thema lernen wir die Grundlagen der Datenbanken kennen und werden diese lernen einzusetzen. Access. Die Grundlagen der Datenbanken.

1 Mathematische Grundlagen

Einführung in die Programmierung

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

Grundlagen von Python

Zählen von Objekten einer bestimmten Klasse

Informatik II Bäume. Beispiele. G. Zachmann Clausthal University, Germany Stammbaum. Stammbaum. Stammbaum

Programmierkurs Java

In vergleichsbasierten Suchbäumen wird nicht in Schlüssel hineingeschaut.

OECD Programme for International Student Assessment PISA Lösungen der Beispielaufgaben aus dem Mathematiktest. Deutschland

1. Einfach verkettete Liste unsortiert 2. Einfach verkettete Liste sortiert 3. Doppelt verkettete Liste sortiert

Einführung in die Java- Programmierung

Erwin Grüner

Lineare Gleichungssysteme

Einfache Arrays. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Übungspaket 31 Entwicklung eines einfachen Kellerspeiches (Stacks)

Würfelt man dabei je genau 10 - mal eine 1, 2, 3, 4, 5 und 6, so beträgt die Anzahl. der verschiedenen Reihenfolgen, in denen man dies tun kann, 60!.

Fakultät Angewandte Informatik Lehrprofessur für Informatik

AGROPLUS Buchhaltung. Daten-Server und Sicherheitskopie. Version vom b

Institut für Programmierung und Reaktive Systeme 26. April Programmieren II. 10. Übungsblatt

Outlook. sysplus.ch outlook - mail-grundlagen Seite 1/8. Mail-Grundlagen. Posteingang

1 topologisches Sortieren

Studentische Lösung zum Übungsblatt Nr. 7

Arbeiten mit UMLed und Delphi

SUDOKU - Strategien zur Lösung

Felder, Rückblick Mehrdimensionale Felder. Programmieren in C

6.2 Scan-Konvertierung (Scan Conversion)

Scala kann auch faul sein

Leere Zeilen aus Excel-Dateien entfernen

Handbuch Fischertechnik-Einzelteiltabelle V3.7.3

2. Semester, 2. Prüfung, Lösung

Erstellen von x-y-diagrammen in OpenOffice.calc

Fotogalerie mit PWGallery in Joomla (3.4.0) erstellen

Objektorientierte Programmierung mit C++ Vector und List

Informatik 11 Kapitel 2 - Rekursive Datenstrukturen

Java Kurs für Anfänger Einheit 4 Klassen und Objekte

Kapitel 6: Graphalgorithmen Gliederung

Wir machen neue Politik für Baden-Württemberg

1. Adressen für den Serienversand (Briefe Katalogdruck Werbung/Anfrage ) auswählen. Die Auswahl kann gespeichert werden.

Algorithmen und Datenstrukturen

Matrix42. Use Case - Sicherung und Rücksicherung persönlicher Einstellungen über Personal Backup. Version September

Objektorientierte Programmierung

Nutzung von GiS BasePac 8 im Netzwerk

Datenbanken Kapitel 2

Datenaufbereitung in SPSS. Daten zusammenfügen

Informatik für Schüler, Foliensatz 21 Objektorientierte Programmierung

Objektorientierung: Klassen und Objekte

13 OOP MIT DELPHI. Records und Klassen Ein Vergleich

Menü auf zwei Module verteilt (Joomla 3.4.0)

Wie erreiche ich was?

Informationsblatt Induktionsbeweis

1. EINLEITUNG 2. GLOBALE GRUPPEN Globale Gruppen anlegen

Info-Veranstaltung zur Erstellung von Zertifikaten

Kapitel 15. Lösung linearer Gleichungssysteme

Systeme 1. Kapitel 6. Nebenläufigkeit und wechselseitiger Ausschluss

Umwandeln und Exportieren von Adobe-Illustrator-Dateien in Illustrator für Artcut

Handbuch. Artologik EZ-Equip. Plug-in für EZbooking version 3.2. Artisan Global Software

MdtTax Programm. Programm Dokumentation. Datenbank Schnittstelle. Das Hauptmenü. Die Bedienung des Programms geht über das Hauptmenü.

PHP - Projekt Personalverwaltung. Erstellt von James Schüpbach

Mathematischer Vorbereitungskurs für Ökonomen

Dokumentation. Black- und Whitelists. Absenderadressen auf eine Blacklist oder eine Whitelist setzen. Zugriff per Webbrowser

Wie halte ich Ordnung auf meiner Festplatte?

Einführung in die Programmierung (EPR)

Vorlesung Diskrete Strukturen Graphen: Wieviele Bäume?

5 Zweisprachige Seiten

Transkript:

Informatik I Einfache Datenstrukturen G. Zachmann Clausthal University, Germany zach@in.tu-clausthal.de Motivation Datenstrukturen sind höheres Organisationskonzept Vgl. die bislang behandelten Binärcodierungen elementarer Datentypen Ein klassisches Buch Algorithmen & Datenstrukturen sind 2 Seiten derselben Medaille! In diesem Abschnitt Grundbausteine von Datenstrukturen Einige höhere Datenstrukturen werden später behandelt werden Niklaus Wirth: Algorithmen und Datenstrukturen; Pascal Version, 5. Auflage, Teubner, 1999. G. Zachmann Informatik 1 - WS 5/6 Datenstrukturen 2 1

Array Ein eindimensionales Array besteht aus einer bestimmten Anzahl von Datenelementen Elemente haben gleichen Typ homogenes Array (C, Java, allg. eher in statisch typisierten Sprachen) Verschiedenen Typ inhomogenes Array (Python, Smalltalk,, allg. eher in dynamisch typisierten Sprachen) Beispiel: Vektor, Zeile oder Spalte einer Tabelle Z.B. Abtastung eines Signals zu konstanten Zeitintervallen Elemente werden indiziert, d.h., Identifikation und Zugriff erfolgt über Index = ganze Zahl (typ. der Form a[i]) Auf jedes Element des Array kann mit demselben, konstanten Zeitaufwand zugegriffen werden G. Zachmann Informatik 1 - WS 5/6 Datenstrukturen 3 Mehrdimensionale Arrays Zweidimensionale Arrays speichern die Werte mehrerer eindimensionaler Zeilen in Tabellen-(Matrix-)Form Syntax: a[i][j] Analog n-dimensionale Arrays Array von Arrays ist auch 2-dim. Datenstruktur Nicht notw. quadratisch In den meisten Sprachen anders zu erzeugen / zuzugreifen / implementiert als (quadratisches) 2-dim. Array In Python gibt es eigtl. nur letzteres; in C++ gibt es beides G. Zachmann Informatik 1 - WS 5/6 Datenstrukturen 4 2

Mathematische Interpretation Array = Funktion, T = Typ des Arrays (= der Elemente) Beispiel: eine Funktion, die einem Koordinatentripel einen Temperaturwert zuordnet (Wettersimulation) Wert der Funktion an der Stelle (1,1,3), also t(1,1,3), findet sich dann in t[1][2][3] Arrays eignen sich in der Praxis grundsätzlich nur dann zur Speicherung einer Funktion, wenn diese dicht ist, d.h., wenn die Abbildung für die allermeisten Indexwerte definiert ist Sonst würde eine Arraydarstellung viel zuviel Platz beanspruchen Außerdem geht dies nur für endliche Funktionen Wichtiger Spezialfall : strings = array of char Viele Programmiersprachen haben dafür eigene Syntax / Implementierung G. Zachmann Informatik 1 - WS 5/6 Datenstrukturen 5 Zeit-Aufwand für elementare Operationen Annahme: Array enthält N Elemente Element Nr i lesen: konstant [ O(1) ] Element an Position i einfügen: ~N [ O(N) ] Element Nr i löschen: ~N [ O(N) ] Array löschen: konstant [ O(1) ] G. Zachmann Informatik 1 - WS 5/6 Datenstrukturen 6 3

Records, Structs, {Klassen} (Verbunde) Oft bestehen aber auch Beziehungen zwischen Werten unterschiedlichen Typs Etwa zwischen Name und Monatsverdienst eines Beschäftigten Wir verbinden zusammengehörige Daten unterschiedlichen Typs zu einem Verbund = record, struct, Klasse Einzelteile eines Records / Structs / Klasse heißen Attribute oder Members Beispiel: Stammdaten G. Zachmann Informatik 1 - WS 5/6 Datenstrukturen 7 Übliche Syntax zur Auswahl: Punkt-Notation Beispiel: s.name oder s.birthday Manchmal auch Pfeil-Notation: s->name oder s->birthday Komponenten eines Verbunds können von beliebigem Typ sein Also auch wieder Verbunde, Arrays, etc. Seien T1,,Tn die Typen der Members, dann hat der Record/Struct den (algebraischen) Typ T1 Tn G. Zachmann Informatik 1 - WS 5/6 Datenstrukturen 8 4

Verkettete Strukturen (linked structures) "The name of the song is called 'Haddocks' Eyes.' " "Oh, that's the name of the song, is it?" Alice said, trying to feel interested. "No, you don't understand," the Knight said, looking a little vexed. "That's what the name is called. The name really is 'The Aged Aged Man.' " "Then I ought to have said 'That's what the song is called'?" Alice corrected herself. "No, you oughtn't: that's quite another thing! The song is called 'Ways and Means,' but that is only what it's called, you know!" "Well, what is the song, then?" said Alice, who was by this time completely bewildered. "I was coming to that," the Knight said. "The song really is 'A-sitting On A Gate,' and the tune's my own invention." Lewis Caroll Through the Looking Glass G. Zachmann Informatik 1 - WS 5/6 Datenstrukturen 9 Verkette vs. Sequentielle Allozierung (Allocation) Ziel: Menge von Objekten abarbeiten Sequential allocation: ein Objekt nach dem anderen anordnen Maschinenebene: aufeinanderfolgende Speicherstellen Python / C++: Array von Objekten Linked allocation: jedes Objekt enthält Link / Zeiger / Referenz auf das nächste Maschinenebene: Zeiger ist Speicheradresse des nächsten Objektes Python: object1.next = object2 ("alles ist ein Zeiger") Hauptunterschied: Sequentiell: Indizierung wird unterstützt Verkettet: Vergrößerung und Verkleinerung ist einfach Achtung: in Python gibt es scheinbar(!) beides für umsonst G. Zachmann Informatik 1 - WS 5/6 Datenstrukturen 1 5

Verkettete Liste (Linked List) Liste = Folge von Elementen a, a 1,..., a n-1 Elemente sind geordnet: a i ist Nachfolger von a i-1 (wie bei Array) es können an beliebiger Stelle Elemente eingefügt und wieder entfernt werden (i.a. anders als bei Array) Implementierung: Üblicherweise mit Hilfe von verketteten Listenelementen Listenelement enthält class List: def init ( self ): self.name = "" self.next = None - "Nutzdaten" (satellite data) = eigentliche Elemente a i - Zeiger auf nachfolgendes Listenelement List x Carol Bob Alice None G. Zachmann Informatik 1 - WS 5/6 Datenstrukturen 11 Verkettete Liste Demo a = List() a.name = "Alice" a.next = None b = List() b.name = "Bob" b.next = a c = List() c.name = "Carol" c.next = b addr C C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB value main memory G. Zachmann Informatik 1 - WS 5/6 Datenstrukturen 12 6

Traversierung einer Liste Musterbeispiel für das traversieren einer mit null endenden verketteten Liste l = List()... Liste füllen... li = l while li!= None: print li.name li = li.next x %./list.py Carol Bob Alice None G. Zachmann Informatik 1 - WS 5/6 Datenstrukturen 13 Liste mit mehr innerem Wissen Anforderungen: Anhängen soll in 1 Schritt gehen Liste muß letztes Element (tail) kennen Am Anfang einfügen auch Liste muß Anfang (head) kennen Methode um "nächstes" Element zu erfragen (Iterator) "Cursor" verwalten Liste soll Interna kapseln (verstecken): Elemente der Liste verstecken Head und Tail speichern Cursor verwalten x.tail List x x.head Carol Bob Alice None x.cursor G. Zachmann Informatik 1 - WS 5/6 Datenstrukturen 14 7

class List: class ListElement: def init ( self ): self.item = self.next = None def init ( self ): self.head = None self.tail = None self.cursor = None def isempty(self): return self.head == None G. Zachmann Informatik 1 - WS 5/6 Datenstrukturen 15 (cont'd) def append(self, item): if self.isempty(): self.cursor = self.head = \ self.tail = ListElement() else: self.tail.next = ListElement() self.tail = self.tail.next self.tail.item = item self.tail.next = None line continuation G. Zachmann Informatik 1 - WS 5/6 Datenstrukturen 16 8

# methods dealing with the iterator (cursor) def rewind(self): self.cursor = head def getcurrentitem(self): if self.cursor == None: return None return self.cursor.item # Spezialfall abfangen! def getnextitem(self): if self.cursor == None: return None self.cursor = self.cursor.next return getcurrentitem() # nicht etwa Code wiederholen! G. Zachmann Informatik 1 - WS 5/6 Datenstrukturen 17 def insertaftercurrent(self,item): if self.isempty(): self.append(item) return if self.cursor == None return # eigentlich nicht so gut z = ListElement() z.item = item z.next = self.cursor.next self.cursor.next = z a b Cursor a z b Cursor G. Zachmann Informatik 1 - WS 5/6 Datenstrukturen 18 9

def getnode( self, index ): z = self.head while index > and z.next: z = z.next index -= 1 return z def insert( self, node, index ):... def findnode( self, item ):... G. Zachmann Informatik 1 - WS 5/6 Datenstrukturen 19 Weitere Operationen getcursorpos(): Position (Index) des aktuellen Elementes setcursotatpos( i ): Setze aktuelles Element auf den Index i delete(): lösche ganze Liste removecurrent(): lösche aktuelles Element aus Liste insertbeforecurrent( item ): Setzt Element e vor die aktuelle Position; Achtung: Aufwand im worst-case N find( item ): Suche item und setze Cursor auf entsprechende Zelle Aufwand im worst-case N G. Zachmann Informatik 1 - WS 5/6 Datenstrukturen 2 1

removecurrent(): Entfernt Element an aktueller Position Cursor zeigt anschließend auf nächstes Element (falls vorhanden, sonst auf Head) Achtung: Aufwand kann proportional zu N sein (Man muß erst das Element vor aktueller Position finden) Nach Löschen a e b Cursor G. Zachmann Informatik 1 - WS 5/6 Datenstrukturen 21 Eingenschaften der einfach verketteten Liste man kann schnell auf Elemente hinter der aktuellen Position zugreifen will man auf Elemente davor zugreifen, muß man immer beim Anfang der Liste beginnen und die Position suchen, Problem z.b. bei removecurrent(), insertbeforecurrent() Asymmetrie im Aufwand beim Durchlaufen der Kette G. Zachmann Informatik 1 - WS 5/6 Datenstrukturen 22 11

Doppelt verkettete Liste Lösung: Doppelt verkettet Liste (doubly linked list) verkettet die Elemente in beide Richtungen Symmetrie im Aufwand beim Durchlaufen der Kette größerer Speicheraufwand Größerer Aufwand bei Entfernen / Einfügen Head Inhalt Inhalt Cursor (z.b.) Inhalt Inhalt Tail Inhalt G. Zachmann Informatik 1 - WS 5/6 Datenstrukturen 23 Multi-Listen Auch mehrdimensionale Listen genannt Menge von Elementen gleichzeitig nach mehreren Kriterien organisiert Beispiel: Liste aller Studenten, mit Teilliste aller Informatik-Studenten Ziel: Elemente nur 1x vorhalten, aber verschiedene Listen / Teillisten Lösung: jede Organisation durch eine Verkettung dargestellt Stud1 Stud2 Stud3 Stud4 Stud5 Jede Liste kann für sich getrennt verwaltet werden G. Zachmann Informatik 1 - WS 5/6 Datenstrukturen 24 12

Beispiel: Dünnbesetzte Matrizen (sparse matrix) Matrix heißt dünn besetzt, wenn nur "wenige" Elemente sind "Wenig" ist Definitionssache, z.b. 1% Multi-Liste ist gängige Methode, um dünnbesetzte Matrix zu implementieren G. Zachmann Informatik 1 - WS 5/6 Datenstrukturen 25 13