Algorithmen und Datenstrukturen (f¨ur...

42
Algorithmen und Datenstrukturen (f¨ ur ET/IT) Wintersemester 2012/13 Dr. Tobias Lasser Computer Aided Medical Procedures Technische Universit¨ at M¨ unchen

Transcript of Algorithmen und Datenstrukturen (f¨ur...

Page 1: Algorithmen und Datenstrukturen (f¨ur ET/IT)campar.in.tum.de/files/teaching/2012ws/AlgoDs/2012-10-25-annotated.pdf · • in Europa ist ISO Latin-1 verbreitet (ISO Norm 8859-1) •

Algorithmen und Datenstrukturen (fur ET/IT)Wintersemester 2012/13

Dr. Tobias Lasser

Computer Aided Medical ProceduresTechnische Universitat Munchen

Page 2: Algorithmen und Datenstrukturen (f¨ur ET/IT)campar.in.tum.de/files/teaching/2012ws/AlgoDs/2012-10-25-annotated.pdf · • in Europa ist ISO Latin-1 verbreitet (ISO Norm 8859-1) •

Organisatorisches

Nachste Woche keine Vorlesung!

Es finden nachste Woche keine Vorlesungen statt!

• Mittwoch, 31. Oktober 2012: FVV(Fachschaftsvollversammlung)

• Donnerstag, 1. November 2012: Feiertag (Allerheiligen)

Der Ubungsbetrieb (Zentralubung, Montag 29. Oktober 2012,sowie die Fragestunden, Freitag, 2. November 2012) findet statt!

2

Page 3: Algorithmen und Datenstrukturen (f¨ur ET/IT)campar.in.tum.de/files/teaching/2012ws/AlgoDs/2012-10-25-annotated.pdf · • in Europa ist ISO Latin-1 verbreitet (ISO Norm 8859-1) •

Wiederholung letzte Vorlesung

Ganze Zahlen in C, C++

Ganze Zahlen in C, C++

• 8 Bits: unsigned char {0, . . . , 255}signed char {−128, . . . , 127}

• 16 Bits: unsigned short {0, . . . , 65535}signed short {−32768, . . . , 32767}

• 32 Bits: unsigned long {0, . . . , 232 − 1}signed long {−232, . . . , 232 − 1}

• 64 Bits: unsigned long long {0, . . . , 264 − 1}signed long long {−264, . . . , 264 − 1}

• signed kann weggelassen werden (ausser bei char!)

• unsigned int und signed int sind je nach System 16, 32oder 64 Bit

11

3

Page 4: Algorithmen und Datenstrukturen (f¨ur ET/IT)campar.in.tum.de/files/teaching/2012ws/AlgoDs/2012-10-25-annotated.pdf · • in Europa ist ISO Latin-1 verbreitet (ISO Norm 8859-1) •

Wiederholung letzte Vorlesung

Ganze Zahlen in C, C++

Ganze Zahlen in C, C++

• 8 Bits: unsigned char {0, . . . , 255}signed char {−128, . . . , 127}

• 16 Bits: unsigned short {0, . . . , 65535}signed short {−32768, . . . , 32767}

• 32 Bits: unsigned long {0, . . . , 232 − 1}signed long {−232, . . . , 232 − 1}

• 64 Bits: unsigned long long {0, . . . , 264 − 1}signed long long {−264, . . . , 264 − 1}

• signed kann weggelassen werden (ausser bei char!)

• unsigned int und signed int sind je nach System 16, 32oder 64 Bit

11

Floating Point Zahlen II

V Exponent E Mantisse M

23 Bit8 Bit 32 Bit float

64 Bit double52 Bit11 Bit

1 Bit

1 Bit

• wissenschaftliche Darstellung mit Basis 2

f = (−1)V · (1 + M) · 2E−bias

• Vorzeichen Bit V

• Mantisse M hat immer die Form 1.abc , also wird erste Stelleweggelassen (

”hidden bit“)

• Exponent E wird vorzeichenlos abgespeichert, verschoben umbias

• bei 32 bit float: bias = 127, bei 64 bit float: bias = 1023

15

3

Page 5: Algorithmen und Datenstrukturen (f¨ur ET/IT)campar.in.tum.de/files/teaching/2012ws/AlgoDs/2012-10-25-annotated.pdf · • in Europa ist ISO Latin-1 verbreitet (ISO Norm 8859-1) •

Wiederholung letzte Vorlesung

Ganze Zahlen in C, C++

Ganze Zahlen in C, C++

• 8 Bits: unsigned char {0, . . . , 255}signed char {−128, . . . , 127}

• 16 Bits: unsigned short {0, . . . , 65535}signed short {−32768, . . . , 32767}

• 32 Bits: unsigned long {0, . . . , 232 − 1}signed long {−232, . . . , 232 − 1}

• 64 Bits: unsigned long long {0, . . . , 264 − 1}signed long long {−264, . . . , 264 − 1}

• signed kann weggelassen werden (ausser bei char!)

• unsigned int und signed int sind je nach System 16, 32oder 64 Bit

11

Floating Point Zahlen II

V Exponent E Mantisse M

23 Bit8 Bit 32 Bit float

64 Bit double52 Bit11 Bit

1 Bit

1 Bit

• wissenschaftliche Darstellung mit Basis 2

f = (−1)V · (1 + M) · 2E−bias

• Vorzeichen Bit V

• Mantisse M hat immer die Form 1.abc , also wird erste Stelleweggelassen (

”hidden bit“)

• Exponent E wird vorzeichenlos abgespeichert, verschoben umbias

• bei 32 bit float: bias = 127, bei 64 bit float: bias = 1023

15

Logische Werte und Verknupfungen

”Grundrechenarten“ mit logischen Werten:

• Konjunktion: ∧ : B × B → B• ahnlich zu Multiplikation bei Zahlen• auch bezeichnet als UND bzw. AND

• Disjunktion: ∨ : B × B → B• ahnlich zu Addition bei Zahlen• auch bezeichnet als ODER bzw. OR

• Negation: ¬ : B → B• auch bezeichnet als NICHT bzw. NOT

Wahrheitstabelle:

a b a ∧ b0 0 00 1 01 0 01 1 1

a b a ∨ b0 0 00 1 11 0 11 1 1

a ¬a0 11 0

21

3

Page 6: Algorithmen und Datenstrukturen (f¨ur ET/IT)campar.in.tum.de/files/teaching/2012ws/AlgoDs/2012-10-25-annotated.pdf · • in Europa ist ISO Latin-1 verbreitet (ISO Norm 8859-1) •

Wiederholung letzte Vorlesung

Ganze Zahlen in C, C++

Ganze Zahlen in C, C++

• 8 Bits: unsigned char {0, . . . , 255}signed char {−128, . . . , 127}

• 16 Bits: unsigned short {0, . . . , 65535}signed short {−32768, . . . , 32767}

• 32 Bits: unsigned long {0, . . . , 232 − 1}signed long {−232, . . . , 232 − 1}

• 64 Bits: unsigned long long {0, . . . , 264 − 1}signed long long {−264, . . . , 264 − 1}

• signed kann weggelassen werden (ausser bei char!)

• unsigned int und signed int sind je nach System 16, 32oder 64 Bit

11

Floating Point Zahlen II

V Exponent E Mantisse M

23 Bit8 Bit 32 Bit float

64 Bit double52 Bit11 Bit

1 Bit

1 Bit

• wissenschaftliche Darstellung mit Basis 2

f = (−1)V · (1 + M) · 2E−bias

• Vorzeichen Bit V

• Mantisse M hat immer die Form 1.abc , also wird erste Stelleweggelassen (

”hidden bit“)

• Exponent E wird vorzeichenlos abgespeichert, verschoben umbias

• bei 32 bit float: bias = 127, bei 64 bit float: bias = 1023

15

Logische Werte und Verknupfungen

”Grundrechenarten“ mit logischen Werten:

• Konjunktion: ∧ : B × B → B• ahnlich zu Multiplikation bei Zahlen• auch bezeichnet als UND bzw. AND

• Disjunktion: ∨ : B × B → B• ahnlich zu Addition bei Zahlen• auch bezeichnet als ODER bzw. OR

• Negation: ¬ : B → B• auch bezeichnet als NICHT bzw. NOT

Wahrheitstabelle:

a b a ∧ b0 0 00 1 01 0 01 1 1

a b a ∨ b0 0 00 1 11 0 11 1 1

a ¬a0 11 0

21

Logische Ausdrucke in C, C++

• logische Variablen: bool a,b;

• logische Werte: true und false

• NOT Operator: !a

• AND Operator: a && b

• OR Operator: a || b

Beispiele:

• ( (2 == 2) && (3 > 1) )

ergibt (true && false), also false

• ( !(2 == 2) || (3 < 1) )

ergibt (false || true), also true

• Kurzform fur !(2 == 2) ist (2 != 2)

27

3

Page 7: Algorithmen und Datenstrukturen (f¨ur ET/IT)campar.in.tum.de/files/teaching/2012ws/AlgoDs/2012-10-25-annotated.pdf · • in Europa ist ISO Latin-1 verbreitet (ISO Norm 8859-1) •

Programm heute

1 Einfuhrung

2 Mathematische GrundlagenMengenAbbildungenZahldarstellungBoolesche Logik

3 Elementare DatenstrukturenZeichenfolgenFelder

4

Page 8: Algorithmen und Datenstrukturen (f¨ur ET/IT)campar.in.tum.de/files/teaching/2012ws/AlgoDs/2012-10-25-annotated.pdf · • in Europa ist ISO Latin-1 verbreitet (ISO Norm 8859-1) •

Definition Datenstruktur

Definition Datenstruktur (nach Prof. Eckert)

Eine Datenstruktur ist eine

• logische Anordnung von Datenobjekten,

• die Informationen reprasentieren,

• den Zugriff auf die reprasentierte Information uberOperationen auf Daten ermoglichen und

• die Information verwalten.

Zwei Hauptbestandteile:

• Datenobjekte• z.B. definiert uber primitive Datentypen

• Operationen auf den Objekten• z.B. definiert als Funktionen

5

Page 9: Algorithmen und Datenstrukturen (f¨ur ET/IT)campar.in.tum.de/files/teaching/2012ws/AlgoDs/2012-10-25-annotated.pdf · • in Europa ist ISO Latin-1 verbreitet (ISO Norm 8859-1) •

Primitive Datentypen in C, C++

• Naturliche Zahlen, z.B. unsigned short, unsigned long

• Wertebereich: bei n Bit von 0 bis 2n − 1• Operationen: +, -, *, /, %, <, ==, !=, >

• Ganze Zahlen, z.B. int, long• Wertebereich: bei n Bit von −2n−1 bis 2n−1 − 1• Operationen: +, -, *, /, %, <, ==, !=, >

• Floating Point Zahlen, z.B. double, float• Wertebereich: abhangig von Große• Operationen: +, -, *, /, <, ==, !=, >

• Logische Werte, bool

• Wertebereich: true, false• Operationen: &&, ||, !, ==, !=

Was ist mit Zeichen und Zeichenfolgen?

6

Page 10: Algorithmen und Datenstrukturen (f¨ur ET/IT)campar.in.tum.de/files/teaching/2012ws/AlgoDs/2012-10-25-annotated.pdf · • in Europa ist ISO Latin-1 verbreitet (ISO Norm 8859-1) •

Bits und Bytes

1 Byte = 8 Bit

Bit 0Bit 7

Bytes als Maßeinheit fur Speichergrossen:

• 210 Bytes = 1024 Bytes = 1 kB, ein kilo Byte (großes B)

• 220 Bytes = 1 MB, ein Mega Byte

• 230 Bytes = 1 GB, ein Giga Byte

• 240 Bytes = 1 TB, ein Tera Byte

• 250 Bytes = 1 PB, ein Peta Byte

• 260 Bytes = 1 EB, ein Exa Byte

Hinweis: auch Bits werden als Maßangabe verwendet, z.B. 16 Mbitoder 16 Mb (kleines b).

7

Page 11: Algorithmen und Datenstrukturen (f¨ur ET/IT)campar.in.tum.de/files/teaching/2012ws/AlgoDs/2012-10-25-annotated.pdf · • in Europa ist ISO Latin-1 verbreitet (ISO Norm 8859-1) •

Bits und Bytes

1 Byte = 8 Bit

Bit 0Bit 7

Bytes als Maßeinheit fur Speichergrossen:

• 210 Bytes = 1024 Bytes = 1 kB, ein kilo Byte (großes B)

• 220 Bytes = 1 MB, ein Mega Byte

• 230 Bytes = 1 GB, ein Giga Byte

• 240 Bytes = 1 TB, ein Tera Byte

• 250 Bytes = 1 PB, ein Peta Byte

• 260 Bytes = 1 EB, ein Exa Byte

Hinweis: auch Bits werden als Maßangabe verwendet, z.B. 16 Mbitoder 16 Mb (kleines b).

7

Page 12: Algorithmen und Datenstrukturen (f¨ur ET/IT)campar.in.tum.de/files/teaching/2012ws/AlgoDs/2012-10-25-annotated.pdf · • in Europa ist ISO Latin-1 verbreitet (ISO Norm 8859-1) •

Bytes und ASCII

Interpretation eines Bytes als Zeichen (anstatt Zahlen)−→ z.B. ASCII Code

7 Bit ASCII Code:

Code ..0 ..1 ..2 ..3 ..4 ..5 ..6 ..7 ..8 ..9 ..A ..B ..C ..D ..E ..F

0.. nul soh stx etx eot enq ack bel bs ht lf vt ff cr so si

1.. dle dc1 dc2 dc3 dc4 nak syn etb can em sub esc fs gs rs us

2.. sp ! “ # $ % & ’ ( ) * + , - . /

3.. 0 1 2 3 4 5 6 7 8 9 : ; < = > ?

4.. @ A B C D E F G H I J K L M N O

5.. P Q R S T U V W X Y Z [ \ ] ˆ

6.. ‘ a b c d e f g h i j k l m n o

7.. p q r s t u v w x y z { ! } ˜ del

8

Page 13: Algorithmen und Datenstrukturen (f¨ur ET/IT)campar.in.tum.de/files/teaching/2012ws/AlgoDs/2012-10-25-annotated.pdf · • in Europa ist ISO Latin-1 verbreitet (ISO Norm 8859-1) •

ASCII Erweiterungen, Unicode

• ASCII verwendet nur 7 Bit von einem Byte• enthalt z.B. keine Umlaute (a, o, u) oder Akzente (e, c)

• es gibt verschiedene Erweiterungen von ASCII auf 8 Bit• in Europa ist ISO Latin-1 verbreitet (ISO Norm 8859-1)• belegt die Codes von 128-255 (bzw. 80-FF in hex)

• Unicode wurde als 16 Bit Codierung eingefuhrt• erste 128 Zeichen stimmen mit ASCII uberein• die nachsten 128 Zeichen mit ISO Latin-1• danach z.B. kyrillische, arabische, japanische Schriftzeichen

• UTF-8 ist eine Mehrbyte-Codierung von Unicode (1-6 Bytes)• Code-Lange wird durch die ersten Bits codiert

9

Page 14: Algorithmen und Datenstrukturen (f¨ur ET/IT)campar.in.tum.de/files/teaching/2012ws/AlgoDs/2012-10-25-annotated.pdf · • in Europa ist ISO Latin-1 verbreitet (ISO Norm 8859-1) •

ASCII Erweiterungen, Unicode

• ASCII verwendet nur 7 Bit von einem Byte• enthalt z.B. keine Umlaute (a, o, u) oder Akzente (e, c)

• es gibt verschiedene Erweiterungen von ASCII auf 8 Bit• in Europa ist ISO Latin-1 verbreitet (ISO Norm 8859-1)• belegt die Codes von 128-255 (bzw. 80-FF in hex)

• Unicode wurde als 16 Bit Codierung eingefuhrt• erste 128 Zeichen stimmen mit ASCII uberein• die nachsten 128 Zeichen mit ISO Latin-1• danach z.B. kyrillische, arabische, japanische Schriftzeichen

• UTF-8 ist eine Mehrbyte-Codierung von Unicode (1-6 Bytes)• Code-Lange wird durch die ersten Bits codiert

9

Page 15: Algorithmen und Datenstrukturen (f¨ur ET/IT)campar.in.tum.de/files/teaching/2012ws/AlgoDs/2012-10-25-annotated.pdf · • in Europa ist ISO Latin-1 verbreitet (ISO Norm 8859-1) •

ASCII Erweiterungen, Unicode

• ASCII verwendet nur 7 Bit von einem Byte• enthalt z.B. keine Umlaute (a, o, u) oder Akzente (e, c)

• es gibt verschiedene Erweiterungen von ASCII auf 8 Bit• in Europa ist ISO Latin-1 verbreitet (ISO Norm 8859-1)• belegt die Codes von 128-255 (bzw. 80-FF in hex)

• Unicode wurde als 16 Bit Codierung eingefuhrt• erste 128 Zeichen stimmen mit ASCII uberein• die nachsten 128 Zeichen mit ISO Latin-1• danach z.B. kyrillische, arabische, japanische Schriftzeichen

• UTF-8 ist eine Mehrbyte-Codierung von Unicode (1-6 Bytes)• Code-Lange wird durch die ersten Bits codiert

9

Page 16: Algorithmen und Datenstrukturen (f¨ur ET/IT)campar.in.tum.de/files/teaching/2012ws/AlgoDs/2012-10-25-annotated.pdf · • in Europa ist ISO Latin-1 verbreitet (ISO Norm 8859-1) •

ASCII Erweiterungen, Unicode

• ASCII verwendet nur 7 Bit von einem Byte• enthalt z.B. keine Umlaute (a, o, u) oder Akzente (e, c)

• es gibt verschiedene Erweiterungen von ASCII auf 8 Bit• in Europa ist ISO Latin-1 verbreitet (ISO Norm 8859-1)• belegt die Codes von 128-255 (bzw. 80-FF in hex)

• Unicode wurde als 16 Bit Codierung eingefuhrt• erste 128 Zeichen stimmen mit ASCII uberein• die nachsten 128 Zeichen mit ISO Latin-1• danach z.B. kyrillische, arabische, japanische Schriftzeichen

• UTF-8 ist eine Mehrbyte-Codierung von Unicode (1-6 Bytes)• Code-Lange wird durch die ersten Bits codiert

9

Page 17: Algorithmen und Datenstrukturen (f¨ur ET/IT)campar.in.tum.de/files/teaching/2012ws/AlgoDs/2012-10-25-annotated.pdf · • in Europa ist ISO Latin-1 verbreitet (ISO Norm 8859-1) •

Zeichen und Strings

Reprasentation eines ASCII Zeichens in C, C++: char

• Zeichen-Literale in einfachen Anfuhrungszeichen

Beispiele: ’A’, ’u’, ’D’

char zeichen = ’A’;

• Vorsicht bei nicht-ASCII Zeichen!

Reprasentation einer Zeichenfolge? (Englisch: String)

• String-Literale in doppelten Anfuhrungszeichen

Beispiel: “AuD“

• in C gespeichert als Folge von Zeichen, terminiert durch ’\0’

10

Page 18: Algorithmen und Datenstrukturen (f¨ur ET/IT)campar.in.tum.de/files/teaching/2012ws/AlgoDs/2012-10-25-annotated.pdf · • in Europa ist ISO Latin-1 verbreitet (ISO Norm 8859-1) •

Zeichen und Strings

Reprasentation eines ASCII Zeichens in C, C++: char

• Zeichen-Literale in einfachen Anfuhrungszeichen

Beispiele: ’A’, ’u’, ’D’

char zeichen = ’A’;

• Vorsicht bei nicht-ASCII Zeichen!

Reprasentation einer Zeichenfolge? (Englisch: String)

• String-Literale in doppelten Anfuhrungszeichen

Beispiel: “AuD“

• in C gespeichert als Folge von Zeichen, terminiert durch ’\0’

'A' 'u' 'D' '\0'

10

Page 19: Algorithmen und Datenstrukturen (f¨ur ET/IT)campar.in.tum.de/files/teaching/2012ws/AlgoDs/2012-10-25-annotated.pdf · • in Europa ist ISO Latin-1 verbreitet (ISO Norm 8859-1) •

Strings in C

Strings in C:

• dargestellt als Array von chars fester Lange:

char test_string [8];

• C Arrays werden indiziert von 0! (hier also von 0 bis 7)• immer genug Platz fur terminierendes ’\0’ einplanen!

• dargestellt als Array von chars dynamischer Lange (mittelsPointer):

char *test_string;

• Speicher muss explizit uber malloc/freeangefordert/freigegeben werden!

• Große des Arrays komplett in eigener Verantwortung!• sehr fehleranfallig, bitte vermeiden wenn moglich!

11

Page 20: Algorithmen und Datenstrukturen (f¨ur ET/IT)campar.in.tum.de/files/teaching/2012ws/AlgoDs/2012-10-25-annotated.pdf · • in Europa ist ISO Latin-1 verbreitet (ISO Norm 8859-1) •

Strings in C

Strings in C:

• dargestellt als Array von chars fester Lange:

char test_string [8];

• C Arrays werden indiziert von 0! (hier also von 0 bis 7)• immer genug Platz fur terminierendes ’\0’ einplanen!

• dargestellt als Array von chars dynamischer Lange (mittelsPointer):

char *test_string;

• Speicher muss explizit uber malloc/freeangefordert/freigegeben werden!

• Große des Arrays komplett in eigener Verantwortung!• sehr fehleranfallig, bitte vermeiden wenn moglich!

11

Page 21: Algorithmen und Datenstrukturen (f¨ur ET/IT)campar.in.tum.de/files/teaching/2012ws/AlgoDs/2012-10-25-annotated.pdf · • in Europa ist ISO Latin-1 verbreitet (ISO Norm 8859-1) •

Programm: Strings in C

#include <stdio.h>

#include <string.h>

int main()

{

char test_string [5] = "test"; // Laenge ist 4+1

printf("test_string:!%s\n", test_string );

char AuD_string [4];

AuD_string [0] = ’A’;

AuD_string [1] = ’u’;

AuD_string [2] = ’D’;

AuD_string [3] = ’\0’; // terminierende 0

printf("AuD_string:!%s\n", AuD_string );

printf("Laenge:!%lu\n", strlen(AuD_string) );

return 0;

}

12

Page 22: Algorithmen und Datenstrukturen (f¨ur ET/IT)campar.in.tum.de/files/teaching/2012ws/AlgoDs/2012-10-25-annotated.pdf · • in Europa ist ISO Latin-1 verbreitet (ISO Norm 8859-1) •

Strings in C - Operationen

Operationen auf C Strings: definiert in string.h

• strlen(str): liefert Lange des Strings str

• strcpy(ziel, quelle): kopiert String quelle nach ziel

• ziel wird als groß genug vorausgesetzt!

• strcat(ziel, quelle): hangt String quelle an Stringziel hinten an

• ziel wird als groß genug vorausgesetzt!

• strcmp(str1, str2): vergleicht die Strings str1 und str2

• ist das Ergebnis 0, sind die Strings gleich

13

Page 23: Algorithmen und Datenstrukturen (f¨ur ET/IT)campar.in.tum.de/files/teaching/2012ws/AlgoDs/2012-10-25-annotated.pdf · • in Europa ist ISO Latin-1 verbreitet (ISO Norm 8859-1) •

Programm: Strings in C (Fortsetzung)

#include <stdio.h>

#include <string.h>

int main()

{

char test_string [] = "test";

char AuD_string [] = "AuD";

char resultat_string [20]; // gross genug

strcpy(resultat_string , AuD_string );

printf("strcpy!Ergebnis:!%s\n", resultat_string );

int vergleich = strcmp(resultat_string , AuD_string );

printf("strcmp!Ergebnis:!%d\n", vergleich );

strcat(resultat_string , test_string );

printf("strcat!Ergebnis:!%s\n", resultat_string );

return 0;

}

14

Page 24: Algorithmen und Datenstrukturen (f¨ur ET/IT)campar.in.tum.de/files/teaching/2012ws/AlgoDs/2012-10-25-annotated.pdf · • in Europa ist ISO Latin-1 verbreitet (ISO Norm 8859-1) •

Strings in C - Probleme

Probleme mit C Strings:

• terminierende ’\0’ wird vergessen

• Zuweisung nach Initialisierung schwierig

• Großenvoraussetzungen werden nicht automatisch gepruft

• Verwaltung von Strings dynamischer Lange eine Quelle derhaufigsten Programmierfehler

• aber gerade Strings dynamischer Lange werden gebraucht!

15

Page 25: Algorithmen und Datenstrukturen (f¨ur ET/IT)campar.in.tum.de/files/teaching/2012ws/AlgoDs/2012-10-25-annotated.pdf · • in Europa ist ISO Latin-1 verbreitet (ISO Norm 8859-1) •

Strings in C++

Strings in C++:

• dargestellt als std::string

std:: string test_string;

• Zugriff wie bei C Strings uber [] Operator, indiziert von 0

std:: string test_string = "test";

test_string [1] = ’a’;

• automatische Verwaltung der Große

• nicht terminiert mit ’\0’, sondern speichert Große direkt

• Operationen direkt in std::string eingebaut

16

Page 26: Algorithmen und Datenstrukturen (f¨ur ET/IT)campar.in.tum.de/files/teaching/2012ws/AlgoDs/2012-10-25-annotated.pdf · • in Europa ist ISO Latin-1 verbreitet (ISO Norm 8859-1) •

Programm: Strings in C++

#include <iostream >

#include <string >

using namespace std;

int main()

{

string test_string = "test";

cout << "test_string:!" << test_string << endl;

string AuD_string = "BvE";

AuD_string [0] = ’A’;

AuD_string [1] = ’u’;

AuD_string [2] = ’D’;

cout << "AuD_string:!" << AuD_string << endl;

cout << "Laenge:!" << AuD_string.length () << endl;

...

17

Page 27: Algorithmen und Datenstrukturen (f¨ur ET/IT)campar.in.tum.de/files/teaching/2012ws/AlgoDs/2012-10-25-annotated.pdf · • in Europa ist ISO Latin-1 verbreitet (ISO Norm 8859-1) •

Programm: Strings in C++ (Fortsetzung)

...

string resultat_string;

resultat_string = AuD_string;

cout << "Kopieren:!" << resultat_string << endl;

bool vergleich = (resultat_string == AuD_string );

cout << "Vergleich:!" << vergleich << endl;

resultat_string = resultat_string + test_string;

// oder kuerzer:

// resultat_string += test_string;

cout << "Anhaengen:!" << resultat_string << endl;

return 0;

}

18

Page 28: Algorithmen und Datenstrukturen (f¨ur ET/IT)campar.in.tum.de/files/teaching/2012ws/AlgoDs/2012-10-25-annotated.pdf · • in Europa ist ISO Latin-1 verbreitet (ISO Norm 8859-1) •

Programm heute

1 Einfuhrung

2 Mathematische GrundlagenMengenAbbildungenZahldarstellungBoolesche Logik

3 Elementare DatenstrukturenZeichenfolgenFelder

19

Page 29: Algorithmen und Datenstrukturen (f¨ur ET/IT)campar.in.tum.de/files/teaching/2012ws/AlgoDs/2012-10-25-annotated.pdf · • in Europa ist ISO Latin-1 verbreitet (ISO Norm 8859-1) •

Definition Feld

Definition Feld

Ein Feld A ist eine Folge von n Datenelementen (di )i=1,...,n,

A = d1, d2, . . . , dn

mit n ∈ N0.

Die Datenelemente di sind beliebige Datentypen (z.B. primitive).

Beispiele:

• A sind die naturlichen Zahlen von 1 bis 10, aufsteigendgeordnet:

A = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10

• Ist n = 0, so ist das Feld leer.

20

Page 30: Algorithmen und Datenstrukturen (f¨ur ET/IT)campar.in.tum.de/files/teaching/2012ws/AlgoDs/2012-10-25-annotated.pdf · • in Europa ist ISO Latin-1 verbreitet (ISO Norm 8859-1) •

Feld als sequentielle Liste

Reprasentation von Feld A als sequentielle Liste (oder Array)

• feste Anzahl n von Datenelementen

• zusammenhangend gespeichert

• in linearer Reihenfolge mit Index

• Zugriff auf i-tes Element uber Index i: A[i]

...Feld A: A[n] A[n-1] A[2] A[1] A[0]

21

Page 31: Algorithmen und Datenstrukturen (f¨ur ET/IT)campar.in.tum.de/files/teaching/2012ws/AlgoDs/2012-10-25-annotated.pdf · • in Europa ist ISO Latin-1 verbreitet (ISO Norm 8859-1) •

Beispiel sequentielle Liste

Feld A=0,8,15, Lange 3

• Beispiel in C:

int A[3];

A[0] = 0; A[1] = 8; A[2] = 15;

• Beispiel in C++:

std::vector <int > A(3);

A[0] = 0; A[1] = 8; A[2] = 15;

22

Page 32: Algorithmen und Datenstrukturen (f¨ur ET/IT)campar.in.tum.de/files/teaching/2012ws/AlgoDs/2012-10-25-annotated.pdf · • in Europa ist ISO Latin-1 verbreitet (ISO Norm 8859-1) •

Eigenschaften sequentielle Liste

Feld A mit Lange n als sequentielle Liste (Array)

• Vorteile:• direkter Zugriff auf Elemente in konstanter Zeit mittels A[i]• sequentielles Durchlaufen sehr einfach

• Nachteile:• Verschwendung von Speicher falls Liste nicht voll belegt• Verlangern der sequentiellen Liste sehr aufwendig• Hinzufugen und Loschen von Elementen sehr aufwendig

23

Page 33: Algorithmen und Datenstrukturen (f¨ur ET/IT)campar.in.tum.de/files/teaching/2012ws/AlgoDs/2012-10-25-annotated.pdf · • in Europa ist ISO Latin-1 verbreitet (ISO Norm 8859-1) •

C Beispiel: sequentielles Durchlaufen

Code:

int feldA [5];

int i;

// sequentielles Durchlaufen

printf("feldA:!");

for (i = 0; i < 5; ++i) {

feldA[i] = i * i;

printf("%d!", feldA[i]);

}

printf("\n");

Ausgabe:

feldA: 0 1 4 9 16

24

Page 34: Algorithmen und Datenstrukturen (f¨ur ET/IT)campar.in.tum.de/files/teaching/2012ws/AlgoDs/2012-10-25-annotated.pdf · • in Europa ist ISO Latin-1 verbreitet (ISO Norm 8859-1) •

Verlangern der sequentiellen Liste

Gegeben: Feld A, Lange n, als sequentielle Liste

Gewunscht: Feld A erweitert auf Lange n+1

• neuen Speicher der Große n+1 reservieren

• alte Liste in neuen Speicher kopieren

...Feld A: A[n] A[n-1] A[2] A[1] A[0]

...neuesFeld A: A[n] A[n-1] A[2] A[1]A[n+1] A[0]

25

Page 35: Algorithmen und Datenstrukturen (f¨ur ET/IT)campar.in.tum.de/files/teaching/2012ws/AlgoDs/2012-10-25-annotated.pdf · • in Europa ist ISO Latin-1 verbreitet (ISO Norm 8859-1) •

C Beispiel: Verlangern der Liste

Code:

int neuesFeldA [6];

// altes Feld kopieren:

for (i = 0; i < 5; ++i)

neuesFeldA[i] = feldA[i];

// neues Element:

neuesFeldA [5] = 25;

// neuesFeldA ausgeben:

printf("neuesFeldA!nach!Verlaengern:!");

for (i = 0; i < 6; ++i)

printf("%d!", neuesFeldA[i]);

printf("\n");

Ausgabe:

neuesFeldA nach Verlaengern: 0 1 4 9 16 25

26

Page 36: Algorithmen und Datenstrukturen (f¨ur ET/IT)campar.in.tum.de/files/teaching/2012ws/AlgoDs/2012-10-25-annotated.pdf · • in Europa ist ISO Latin-1 verbreitet (ISO Norm 8859-1) •

Loschen von Element aus Liste

Gegeben: Feld A, Lange n, als sequentielle Liste

Gewunscht: Element i aus Feld A loschen

• Element i entfernen

• Listenelemente nach i umkopieren

25 16 4 1 09

- 25 9 4 116

27

Page 37: Algorithmen und Datenstrukturen (f¨ur ET/IT)campar.in.tum.de/files/teaching/2012ws/AlgoDs/2012-10-25-annotated.pdf · • in Europa ist ISO Latin-1 verbreitet (ISO Norm 8859-1) •

C Beispiel: Loschen von Element

Code:

// loesche erstes Element

for (i = 1; i < 6; ++i)

neuesFeldA[i-1] = neuesFeldA[i];

// setze letztes Element auf -1

neuesFeldA [5] = -1;

// neuesFeldA ausgeben:

printf("neuesFeldA!nach!Loeschen:!");

for (i = 0; i < 6; ++i)

printf("%d!", neuesFeldA[i]);

printf("\n");

Ausgabe:

neuesFeldA nach Loeschen: 1 4 9 16 25 -1

28

Page 38: Algorithmen und Datenstrukturen (f¨ur ET/IT)campar.in.tum.de/files/teaching/2012ws/AlgoDs/2012-10-25-annotated.pdf · • in Europa ist ISO Latin-1 verbreitet (ISO Norm 8859-1) •

Einfugen von Element in Liste

Gegeben: Feld A, Lange n, als sequentielle Liste

Gewunscht: neues Element in Feld A an Stelle i einfugen

• Listenelemente nach i umkopieren

• Element i einfugen

- 25 9 4 116

25 16 8 4 19

29

Page 39: Algorithmen und Datenstrukturen (f¨ur ET/IT)campar.in.tum.de/files/teaching/2012ws/AlgoDs/2012-10-25-annotated.pdf · • in Europa ist ISO Latin-1 verbreitet (ISO Norm 8859-1) •

C Beispiel: Einfugen von Element

Code:

// neues Element (8) an 3. Stelle einfuegen

for (i = 5; i > 2; --i)

neuesFeldA[i] = neuesFeldA[i-1];

neuesFeldA [2] = 8;

// neuesFeldA ausgeben:

printf("neuesFeldA!nach!Einfuegen:!");

for (i = 0; i < 6; ++i)

printf("%d!", neuesFeldA[i]);

printf("\n");

Ausgabe:

neuesFeldA nach Einfuegen: 1 4 8 9 16 25

30

Page 40: Algorithmen und Datenstrukturen (f¨ur ET/IT)campar.in.tum.de/files/teaching/2012ws/AlgoDs/2012-10-25-annotated.pdf · • in Europa ist ISO Latin-1 verbreitet (ISO Norm 8859-1) •

C++ Beispiel: sequentielle Listen

Code:

vector <int > feldA (5);

// sequentielles Durchlaufen

for (int i = 0; i < 5; ++i) {

feldA[i] = i * i;

}

// Verlaengern der Liste

feldA.resize (6);

feldA [5] = 25;

// loesche erstes Element

feldA.erase( feldA.begin() );

feldA [5] = -1;

// neues Element (8) an 3. Stelle einfuegen

feldA.insert( feldA.begin() + 2, 8);

31

Page 41: Algorithmen und Datenstrukturen (f¨ur ET/IT)campar.in.tum.de/files/teaching/2012ws/AlgoDs/2012-10-25-annotated.pdf · • in Europa ist ISO Latin-1 verbreitet (ISO Norm 8859-1) •

Ausblick: Anwendung von sequentiellen Listen

in 2D und 3D Bildern!

32

Page 42: Algorithmen und Datenstrukturen (f¨ur ET/IT)campar.in.tum.de/files/teaching/2012ws/AlgoDs/2012-10-25-annotated.pdf · • in Europa ist ISO Latin-1 verbreitet (ISO Norm 8859-1) •

Zusammenfassung

1 Einfuhrung

2 Mathematische GrundlagenMengenAbbildungenZahldarstellungBoolesche Logik

3 Elementare DatenstrukturenZeichenfolgenFelder

33