Algorithmen und Datenstrukturen (für ET/IT) Wiederholung: Ziele der Vorlesung. Wintersemester 2012/13. Dr. Tobias Lasser

Ähnliche Dokumente
Algorithmen und Datenstrukturen (für ET/IT)

Algorithmen und Datenstrukturen (für ET/IT)

Algorithmen und Datenstrukturen (für ET/IT)

Programm heute. Algorithmen und Datenstrukturen (für ET/IT) Definition Feld. Feld als sequentielle Liste

Wiederholung: Zusammenfassung Felder. Algorithmen und Datenstrukturen (für ET/IT) Definition Abstrakter Datentyp. Programm heute

Organisatorisches. Algorithmen und Datenstrukturen (für ET/IT) Programm heute. Definition Datenstruktur. Nächste Woche keine Vorlesung!

Advanced Programming in C

C++ Teil 7. Sven Groß. 3. Juni Sven Groß (IGPM, RWTH Aachen) C++ Teil 7 3. Juni / 16

C- Kurs 09 Dynamische Datenstrukturen

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12 1. Kapitel 11. Listen. Listen

Algorithmen und Datenstrukturen (für ET/IT)

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 16/17. Kapitel 13. Listen. Listen 1

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 15/16. Kapitel 12. Listen. Listen 1

Stand der Vorlesung. Vergleich verkettete Liste und sequentielle Liste

Technische Universität München

13. Dynamische Datenstrukturen

Algorithmen und Datenstrukturen

Vorlesung Datenstrukturen

ALP II Dynamische Datenmengen

3. Übungsblatt zu Algorithmen I im SoSe 2017

Programm heute. Algorithmen und Datenstrukturen (für ET/IT) Was sind primitive Datentypen? Bits und Bytes. Primitive Datentypen. Sommersemester 2014

Programmierkurs C++ Templates & STL (1/2)

12. Dynamische Datenstrukturen

12.3 Ein Datenmodell für Listen

Übungspaket 32 Einfach verkettete, sortierte Liste

Theoretische Informatik 1 WS 2007/2008. Prof. Dr. Rainer Lütticke

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

Problem: Was ist, wenn der Stapel voll ist? Idee: Erzeuge dynamisch ein grösseres Array und kopiere um. Dynamische Anpassung der Größe

Verkettete Datenstrukturen: Listen

7. Organisation von Informationen

11. Elementare Datenstrukturen

5. Behälter und Iteratoren. Programmieren in C++ Überblick. 5.1 Einleitung. Programmieren in C++ Überblick: 5. Behälter und Iteratoren

Programmieren in C++ Überblick

Programm heute. Algorithmen und Datenstrukturen (für ET/IT) Übersicht: Graphen. Definition: Ungerichteter Graph. Definition: Ungerichteter Graph

Algorithmen und Datenstrukturen

Zeiger und dynamischer Speicher

Programmieren 2 C++ Überblick

Variablen. Deklaration: «Datentyp» «Variablenname» Datentyp bestimmt Größe in Bytes: sizeof Beispiel: long int v; Größe: 4 Bytes

Übungen zu Programmierung I - Blatt 8

Praxis der Programmierung

Counting - Sort [ [ ] [ [ ] 1. SS 2008 Datenstrukturen und Algorithmen Sortieren in linearer Zeit

Informatik II, SS 2014

Programmieren I. Kapitel 13. Listen

Nachname: Vorname: Matr.-Nr.: Punkte: 1. Aufgabe: ( / 25 Pkt.) Gegeben ist das folgende Struktogramm zur Berechnung von sin(x) mit Hilfe einer Reihe.

Algorithmen und Datenstrukturen (fu r ET/IT) Personen. Programm heute. Wintersemester 2012/13. Wintersemester 2012/13. Dr.

Vorlesung Datenstrukturen

5. Strukturen und Algorithmen

Vorlesung Datenstrukturen

Kapitel 12: Induktive

Teil 8: Dynamische Speicherverwaltung. Prof. Dr. Herbert Fischer Fachhochschule Deggendorf Prof. Dr. Manfred Beham Fachhochschule Amberg-Weiden

Beispiellösung zu den Übungen Datenstrukturen und Algorithmen SS 2008 Blatt 5

ADT: Verkettete Listen

Algorithmen und Datenstrukturen (für ET/IT)

Willkommen zur Vorlesung. Algorithmen und Datenstrukturen

Abstrakter Datentyp (ADT): Besteht aus einer Menge von Objekten, sowie Operationen, die auf diesen Objekten wirken.

C++ Teil 6. Sven Groß. 27. Mai Sven Groß (IGPM, RWTH Aachen) C++ Teil Mai / 14

Einführung in die STL

Datenstrukturen Teil 2. Bäume. Definition. Definition. Definition. Bäume sind verallgemeinerte Listen. Sie sind weiter spezielle Graphen

Algorithmen und Datenstrukturen 2. Dynamische Datenstrukturen

Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung)

Algorithmen I. Tutorium 1-3. Sitzung. Dennis Felsing

Teil 1: Suchen. Ausgeglichene Bäume B-Bäume Digitale Suchbäume. M.O.Franz, Oktober 2007 Algorithmen und Datenstrukturen - Binärbäume 1-1

Algorithmen & Datenstrukturen Midterm Test 2

Informatik II, SS 2018

Datenstrukturen. einfach verkettete Liste

Verkettete Listen. DVG Verkettete Listen 1

Grundlagen der Informatik 12. Strukturen

Datenstrukturen und Algorithmen

Algorithmen und Datenstrukturen

Binärbäume: Beispiel

Listen. Arrays. Deklaration. Einfach verkettete Listen

Schwerpunkte. Verkettete Listen. Verkettete Listen: 7. Verkettete Strukturen: Listen. Überblick und Grundprinzip. Vergleich: Arrays verkettete Listen

Listen. M. Jakob. 20. September Gymnasium Pegnitz

Einfach verkettete Liste

ALP II Dynamische Datenmengen Datenabstraktion (Teil 2)

Doppelt verkettete Listen (1)

Vorlesung Informatik 2 Algorithmen und Datenstrukturen. (20 Graphen) T. Lauer

7. Sortieren Lernziele. 7. Sortieren

Grundlagen: Algorithmen und Datenstrukturen

Vorlesung Datenstrukturen

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

Datenstrukturen und Algorithmen. 7. Suchen in linearen Feldern

C für Java-Programmierer

Algorithmen und Datenstrukturen (für ET/IT)

Programmierkurs C/C++

Übung Algorithmen und Datenstrukturen

8 Elementare Datenstrukturen

C/C++-Programmierung

Einführung in die STL

1 Abstrakte Datentypen

Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen

Zusammengesetzte Datentypen -- Arrays und Strukturen

Einführung in die Programmierung für Physiker. Die Programmiersprache C Strukturen ("struct...")

Gliederung. 5. Compiler. 6. Sortieren und Suchen. 7. Graphen

Übungsblatt Programmierung und Software-Entwicklung Generizität, Interfaces, Listen, Sortieralgorithmen & JUnit

Informatik II Prüfungsvorbereitungskurs

6. Verkettete Strukturen: Listen

Es sei a 2 und b 2a 1. Definition Ein (a, b)-baum ist ein Baum mit folgenden Eigenschaften:

Übung Algorithmen und Datenstrukturen

Transkript:

Algorithmen und Datenstrukturen (für ET/IT) Wintersemester 2012/13 Dr. Tobias Lasser Computer Aided Medical Procedures Technische Universität München Wiederholung: Ziele der Vorlesung Wissen: Algorithmische Prinzipien verstehen und anwenden Kapitel 1, 2, 4 6 Grundlegende Algorithmen kennen lernen Kapitel 4 10 Grundlegende Datenstrukturen kennen lernen Kapitel 3, 7 Bewertung von Effizienz und Korrektheit lernen Kapitel 4, 5 Methodenkompetenz: für Entwurf von effizienten und korrekten Algorithmen Kapitel 4, 5, 6 zur Umsetzung auf dem Computer laufend 6

Wiederholung Beschreibung von Algorithmen und Datenstrukturen benötigt Sprache Churchsche These: alle gängigen Sprachen sind äquivalent! Beispiele von Sprachen : Pseudocode Flussdiagramme C C++ Java, C#, Objective-C und vieles mehr! Manche Sprachen eignen sich besser für bestimmte Zwecke als andere. in AuD: C und C++ 7 Programm heute 1 Einführung 2 Mathematische Grundlagen Mengen Abbildungen Zahldarstellung Boolesche Logik 3 Elementare Datenstrukturen Zeichenfolgen Felder 10

Definition Feld Definition Feld Ein Feld A ist eine Folge von n Datenelementen (d i ) i=1,...,n, A = d 1, d 2,..., d n mit n N 0. Die Datenelemente d i sind beliebige Datentypen (z.b. primitive). 11 Feld als sequentielle Liste Repräsentation von Feld A als sequentielle Liste (oder Array) feste Anzahl n von Datenelementen zusammenhängend gespeichert in linearer Reihenfolge mit Index Zugriff auf i-tes Element über Index i: A[i]... Feld A: A[n-1] A[n-2] A[2] A[1] A[0] Deklaration: in C: in C++: int feld[n]; std::vector<int> feld(n); 12

Operationen auf sequentiellen Listen Sei A sequentielle Liste. Operationen: initialize: Initialisiere seq. Liste A mit n Elementen destruct: vernichte seq. Liste A elementat(i): greife auf i-tes Element von A zu: A[i] insert: füge Element in seq. Liste A ein (erfordert Umkopieren und evtl. Verlängern von A) erase: entferne Element aus seq. Liste A (erfordert Umkopieren) A[n-1] A[n-2].... A[1] A[0] - 25 16 9 4 1 25 16 9 8 4 1 25 16 9 4 1 0-25 16 9 4 1 13 Feld als einfach verkettete Liste Repräsentation von Feld A als verkettete Liste dynamische Anzahl n von Datenelementen in linearer Reihenfolge gespeichert (nicht notwendigerweise zusammenhängend!) mit Zeigern verkettet auf Englisch: linked list 14

Verkettete Liste Folge von miteinander verbundenen Elementen jedes Element d i besteht aus Daten: Wert des Feldes an Position i next: Zeiger auf das nächste Element d i+1 Node: Daten next ist Zeiger auf erstes Element des Feldes d 1 letztes Element d n hat keinen Nachfolger symbolisiert durch -Zeiger 15 Operationen auf verketteter Liste Zugriff auf Element i: beginne bei Zeiger vorhangeln entlang next Zeigern bis zum i-ten Element Beispiel für i=3: Hilfszeiger 16

Operationen auf verketteter Liste Löschen von Element i: Zugriff auf Element i-1 umhängen von next Zeiger von Element i-1 auf Element i+1 Beispiel für i=3: Hilfszeiger 17 Operationen auf verketteter Liste Einfügen von Element an Stelle i: Zugriff auf Element i-1 umhängen von next Zeiger von Element i-1 auf neues Element next Zeiger von neuem Element setzen auf altes Element i Beispiel für i=3: Hilfszeiger Daten neues Element next 18

Verkettete Liste in C (Auszug) // Datenstruktur fuer verkettete Liste struct node { struct node * next ; int Daten ; }; // Funktion zum Anlegen eines Nodes struct node * initnode ( int daten ); // Funktion zum Freigeben einer Liste void destructlist ( struct node * anfang ); // Funktion zur Listenausgabe void printlist ( struct node * anfang ); 19 Verkettete Liste in C (Auszug) struct node * = ; // Startknoten der Liste struct node * hilfszeiger ; // Hilfsvariablen int i; // Liste fuellen = initnode (0); - > next = ; // Listenende markieren hilfszeiger = ; for ( i = 1; i <= 5; ++ i) { hilfszeiger -> next = initnode (i*i); hilfszeiger = hilfszeiger - > next ; hilfszeiger - > next = ; // neues Ende der Liste } printlist ( ); // Liste durchlaufen und ausgeben destructlist ( ); // Liste freigeben = ; // und wirklich als leer markieren 20

Verkettete Liste in C (Auszug) // Funktion zum Anlegen eines Nodes struct node * initnode ( int daten ) { struct node * ptr ; // neuen Knoten anlegen ptr = ( struct node *) malloc ( sizeof ( struct node ) ); if ( ptr == ) { // falls malloc fehlgeschlagen //!! ACHTUNG!! // hier braeuchten wir Fehlerbehandlung! // machen wir hier der Einfachheit halber nicht } // Daten zuweisen ptr -> Daten = daten ; } return ptr ; 21 Verkettete Liste in C (Auszug) // Funktion zum Freigeben einer Liste void destructlist ( struct node * anfang ) { struct node * ptr ; // Hilfsvariablen struct node * temp ; } // Liste durchlaufen und freigeben ptr = anfang ; while ( ptr!= ) { temp = ptr - > next ; // Nachfolger in temp speichern free ( ptr ); // aktuellen Knoten freigeben ptr = temp ; // zum naechsten Knoten } 22

Verkettete Liste in C (Auszug) // Funktion zur Listenausgabe void printlist ( struct node * anfang ) { struct node * ptr ; // Hilfsvariable printf (" Listen - Inhalt : "); } // Liste durchlaufen von anfang ptr = anfang ; while ( ptr!= ) { printf ("%d ", ptr -> Daten ); // Wert ausgeben ptr = ptr - > next ; // zum naechsten Knoten } printf ("\n"); 23 Verkettete Liste in C++ (Auszug) std :: list < int > feld ; // Liste initialisieren // Iterator it als Hilfs " zeiger " auf Listenelemente std :: list <int >:: iterator it; // Liste fuellen for ( int i = 5; i >= 0; --i) feld. push_front (i*i); // push_ front fuegt Element am Anfang ein // alternativ : feld. insert ( feld. begin (), i*i); // Liste durchlaufen und ausgeben std :: cout << " Listen - Inhalt : "; for (it = feld. begin (); it!= feld. end (); ++ it) std :: cout << *it << " "; // * it gibt das Datenelement von Listeneintrag // an Stelle it aus std :: cout << std :: endl ; 24

Gegenüberstellung sequentielle Liste und verkettete Liste Sequentielle Liste Direkter Zugriff auf i-tes Element sequentielles Durchlaufen sehr einfach statische Länge, kann Speicher verschwenden Einfügen/Löschen erfordert erheblich Kopieraufwand Verkettete Liste Zugriff auf i-tes Element erfordert i Iterationen sequentielles Durchlaufen sehr einfach dynamische Länge zusätzlicher Speicher für Zeiger benötigt Einfügen/Löschen einfach 25 Feld als doppelt verkettete Liste Repräsentation von Feld A als doppelt verkettete Liste verkettete Liste jedes Element mit Zeigern doppelt verkettet prev prev prev prev stop auf Englisch: doubly linked list 26

Doppelt verkettete Liste prev prev prev prev stop Folge von miteinander verbundenen Elementen jedes Element d i besteht aus Daten: Wert des Feldes an Position i next: Zeiger auf das nächste Element d i+1 prev: Zeiger auf das vorherige Element d i 1 Node: prev Daten next /stop sind Zeiger auf erstes/letztes Element des Feldes 27 letztes Element d n hat keinen Nachfolger symbolisiert durch -Zeiger Operationen auf doppelt verketteter Liste Löschen von Element i: Zugriff auf Element i umhängen von next Zeiger von Element i-1 auf Element i+1 umhängen von prev Zeiger von Element i+1 auf Element i-1 Beispiel für i=3: prev prev prev prev stop 28

Operationen auf doppelt verketteter Liste Einfügen von Element an Stelle i: Zugriff auf Element i umhängen von next Zeiger von Element i-1 auf neues Element, sowie umhängen von prev Zeiger von altem Element i auf neues Element next bzw. prev Zeiger von neuem Element setzen auf altes Element i bzw. Element i-1 Beispiel für i=3: prev prev prev prev stop prev Daten next 29 Eigenschaften doppelt verkettete Liste Feld A als doppelt verkettete Liste Vorteile: Durchlauf in beiden Richtungen möglich Einfügen/Löschen potentiell einfacher, da man sich Vorgänger nicht extra merken muss Nachteile: zusätzlicher Speicher erforderlich für zwei Zeiger Zeigerverwaltung komplizierter und fehleranfällig 30

Doppelt verkettete Liste in C und C++ in C: struct node { int Daten ; struct node * prev ; struct node * next ; }; struct node * ; struct node * stop ; in C++: std :: list <int > feld ; 31 Zusammenfassung Felder Ein Feld A kann repräsentiert werden als: sequentielle Liste (array) mit fixer Länge verkettete Liste (linked list) mit dynamischer Länge doppelt verkettete Liste (doubly linked list) mit dynamischer Länge Eigenschaften: einfach und flexibel aber manche Operationen aufwendig Als nächstes Aufgabe von Flexibilität für Effizienz 32

Zusammenfassung 1 Einführung 2 Mathematische Grundlagen Mengen Abbildungen Zahldarstellung Boolesche Logik 3 Elementare Datenstrukturen Zeichenfolgen Felder 33