Algorithmen und Datenstrukturen (f ur...

87
Algorithmen und Datenstrukturen (f¨ ur ET/IT) Sommersemester 2015 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/2015ss/AuD/AuD-kapitel3.pdf · Beispiele f ur primitive Datentypen in C: int f ur ganze Zahlen ... 210

Algorithmen und Datenstrukturen (fur ET/IT)Sommersemester 2015

Dr. Tobias Lasser

Computer Aided Medical ProceduresTechnische Universitat Munchen

Page 2: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel3.pdf · Beispiele f ur primitive Datentypen in C: int f ur ganze Zahlen ... 210

Programm heute

1 Einfuhrung

2 Grundlagen von Algorithmen

3 Grundlagen von DatenstrukturenPrimitive Datentypen und ZahldarstellungFelder als sequentielle ListeZeichen und ZeichenfolgenFelder als verkettete ListeAbstrakte DatentypenStacksQueues

2

Page 3: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel3.pdf · Beispiele f ur primitive Datentypen in C: int f ur ganze Zahlen ... 210

Was sind primitive Datentypen?

Primitive Datentypen

Wir bezeichnen grundlegende, in Programmiersprachen eingebauteDatentypen als primitive Datentypen.

Durch Kombination von primitiven Datentypen lassen sichzusammengesetzte Datentypen bilden.

Beispiele fur primitive Datentypen in C:

• int fur ganze Zahlen

• float fur floating point Zahlen

• bool fur logische Werte

3

Page 4: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel3.pdf · Beispiele f ur primitive Datentypen in C: int f ur ganze Zahlen ... 210

Bits und Bytes

1 Byte = 8 Bit

Bit 0Bit 7

Bytes als Maßeinheit fur Speichergrossen (nach IEC, traditionell):

• 210 Bytes = 1024 Bytes = 1 KiB, ein Kilo Byte (Kibi Byte)

• 220 Bytes = 1 MiB, ein Mega Byte (bzw. MebiByte)

• 230 Bytes = 1 GiB, ein Giga Byte (bzw. GibiByte)

• 240 Bytes = 1 TiB, ein Tera Byte (bzw. TebiByte)

• 250 Bytes = 1 PiB, ein Peta Byte (bzw. PebiByte)

• 260 Bytes = 1 EiB, ein Exa Byte (bzw. ExbiByte)

4

Page 5: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel3.pdf · Beispiele f ur primitive Datentypen in C: int f ur ganze Zahlen ... 210

Bits und Bytes

1 Byte = 8 Bit

Bit 0Bit 7

Bytes als Maßeinheit fur Speichergrossen (nach IEC, metrisch):

• 103 Bytes = 1000 Bytes = 1 kB, ein kilo Byte (großes B)

• 106 Bytes = 1 MB, ein Mega Byte

• 109 Bytes = 1 GB, ein Giga Byte

• 1012 Bytes = 1 TB, ein Tera Byte

• 1015 Bytes = 1 PB, ein Peta Byte

• 1018 Bytes = 1 EB, ein Exa Byte

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

5

Page 6: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel3.pdf · Beispiele f ur primitive Datentypen in C: int f ur ganze Zahlen ... 210

1001110010001

0101001001000100010001

001000101010100100100010001

1110010001010101001001000100011

10010001 010101 00100100

01001110 00101 00010011

001001110 10011 011100101

10010001010 0100110 00111010111

010011100001001110000100111011101100110

110100 1001110010100011010001110 101001

11010 01001110010001110101100 01011

10011 000100111010010100111 10100

010100 01001110100101100 001001

10101110 010010100 10011101

100101010 010011101

001001110100110110010

0010011101011

6

Page 7: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel3.pdf · Beispiele f ur primitive Datentypen in C: int f ur ganze Zahlen ... 210

Primitive Datentypen in C-ahnlichen Sprachen

Wir betrachten im Detail primitive Datentypen fur:

1 naturliche Zahlen (unsigned integers)

2 ganze Zahlen (signed integers)

3 floating point Zahlen (floats)

7

Page 8: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel3.pdf · Beispiele f ur primitive Datentypen in C: int f ur ganze Zahlen ... 210

Zahldarstellung

• Dezimalsystem:• Basis x = 10

• Koeffizienten cn ∈ {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}• Beispiel: 12310 = 1 · 102 + 2 · 101 + 3 · 100

• Binarsystem:• Basis x = 2

• Koeffizienten cn ∈ {0, 1}• Beispiel: 11012 = 1 · 23 + 1 · 22 + 0 · 21 + 1 · 20 = 1310

8

Page 9: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel3.pdf · Beispiele f ur primitive Datentypen in C: int f ur ganze Zahlen ... 210

Zahldarstellung

• Oktalsystem:• Basis x = 8 (= 23)

• Koeffizienten cn ∈ {0, 1, 2, 3, 4, 5, 6, 7}• Beispiel: 1738 = 1 · 82 + 7 · 81 + 3 · 80 = 12310

• Hexadezimalsystem:• Basis x = 16 (= 24)

• Koeffizienten cn ∈ {0, 1, 2, 3, 4, 5, 6, 7, 8, 9,A,B,C ,D,E ,F}• Beispiel: 7B16 = 7 · 161 + B · 160 = 12310

9

Page 10: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel3.pdf · Beispiele f ur primitive Datentypen in C: int f ur ganze Zahlen ... 210

Wie viele Ziffern pro Zahl?

Problem

Gegeben Zahl z ∈ N, wie viele Ziffern m werden bezuglich Basis xbenotigt?

Losung

m = blogx(z)c+ 1

Erlauterung: (a ∈ R)

• bac = floor(a) = großte ganze Zahl kleiner gleich a

• dae = ceil(a) = kleinste ganze Zahl großer gleich a

a− 1 < bac ≤ a ≤ dae < a + 1

• logx(z) = ln(z)ln(x) , wobei

”ln“ der naturliche Logarithmus ist

10

Page 11: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel3.pdf · Beispiele f ur primitive Datentypen in C: int f ur ganze Zahlen ... 210

Wie viele Ziffern pro Zahl?

Losung

m = blogx(z)c+ 1

Beispiele: z = 123

• Basis x = 10:

m = blog10(123)c+ 1 = b2.0899 . . .c+ 1 = 3

• Basis x = 2:

m = blog2(123)c+ 1 = b6.9425 . . .c+ 1 = 7

• Basis x = 8:

m = blog8(123)c+ 1 = b2.3141 . . .c+ 1 = 3

• Basis x = 16:

m = blog16(123)c+ 1 = b1.7356 . . .c+ 1 = 2

11

Page 12: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel3.pdf · Beispiele f ur primitive Datentypen in C: int f ur ganze Zahlen ... 210

Großte Zahl pro Anzahl Ziffern?

Problem

Gegeben Basis x und m Ziffern, was ist die großte darstellbareZahl?

Losung

zmax = xm − 1

Beispiele:

• x = 2, m = 4:

zmax = 24 − 1 = 15 = 11112

• x = 2, m = 8:

zmax = 28 − 1 = 255 = 111111112

• x = 16, m = 2:

zmax = 162 − 1 = 255 = FF16

12

Page 13: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel3.pdf · Beispiele f ur primitive Datentypen in C: int f ur ganze Zahlen ... 210

Naturliche Zahlen in C-ahnlichen Sprachen

Naturliche Zahlen

In Computern verwendet man Binardarstellung mit einer fixenAnzahl Ziffern (genannt Bits).

Die primitiven Datentypen fur naturliche Zahlen sind:

• 8 Bits (ein Byte), darstellbare Zahlen: {0, . . . , 255}in C: unsigned char

• 16 Bits, darstellbare Zahlen: {0, . . . , 65535}in C: unsigned short

• 32 Bits, darstellbare Zahlen: {0, . . . , 4294967295}in C: unsigned long

• 64 Bits, darstellbare Zahlen: {0, . . . , 264 − 1}in C: unsigned long long

13

Page 14: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel3.pdf · Beispiele f ur primitive Datentypen in C: int f ur ganze Zahlen ... 210

Negative Zahlen

Darstellung durch 2-Komplement

Beispiel fur 4 Bits (darstellbare Zahlen: 24 = 16):

-8 -7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 8 9-9

Damit erhalt man:

0000 = +0 0100 = +4 1000 = -8 1100 = -40001 = +1 0101 = +5 1001 = -7 1101 = -30010 = +2 0110 = +6 1010 = -6 1110 = -20011 = +3 0111 = +7 1011 = -5 1111 = -1

Das erste Bit ist also das Vorzeichen!

14

Page 15: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel3.pdf · Beispiele f ur primitive Datentypen in C: int f ur ganze Zahlen ... 210

2-Komplement Darstellung I

2-Komplement Darstellung

Sei x ∈ N, x > 0. Die 2-Komplement Darstellung −xz von −xmittels n Bits ist gegeben durch

−xz = 2n − x .

Vorheriges Beispiel war: −5 = 1011, also x = 5 und n = 4.

Nun:−5z = 24 − 5 = 16− 5 = 11 = 10112

15

Page 16: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel3.pdf · Beispiele f ur primitive Datentypen in C: int f ur ganze Zahlen ... 210

2-Komplement Darstellung II

Sei bnbn−1 . . . b1 eine Bitfolge.

• (bnbn−1 . . . b1)z sei der Zahlwert in 2-Komplement Darstellung

• fur positive Zahlen von 0 bis 2n−1 − 1 entspricht(bnbn−1 . . . b1)z der Binardarstellung:

(0bn−1 . . . b1)z = (0bn−1 . . . b1)2

• fur negative Zahlen von −2n−1 bis −1 gilt

(1bn−1 . . . b1)z = −2n−1 + (0bn−1 . . . b1)2

• allgemein:

(bnbn−1 . . . b1)z = bn · (−2n−1) + (bn−1 . . . b1)2

16

Page 17: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel3.pdf · Beispiele f ur primitive Datentypen in C: int f ur ganze Zahlen ... 210

Eigenschaften 2-Komplement

• Fur n ∈ N gilt

(111 . . . 11)z = (−2n−1) + 2n−2 + . . . + 21 + 20

= −2n−1 + (2n−1 − 1)

= −1

• Um −x aus x in 2-Komplement Darstellung zu erhalten:

Bilde bitweises Komplement und addiere 1.

• Beispiel: Negatives von 6 = (0110)2 mit n = 4

−6 = (0110)z + 1 = (1001)z + 1 = (1010)z

• und zuruck:

6 = (1010)z + 1 = (0101)z + 1 = (0110)z

17

Page 18: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel3.pdf · Beispiele f ur primitive Datentypen in C: int f ur ganze Zahlen ... 210

Ganze Zahlen in C-ahnlichen Sprachen

Ganze Zahlen

Die primitiven Datentypen fur ganze Zahlen sind:

• 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 {−231, . . . , 231 − 1}

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

• signed kann weggelassen werden (ausser bei char!)

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

18

Page 19: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel3.pdf · Beispiele f ur primitive Datentypen in C: int f ur ganze Zahlen ... 210

Rationale Zahlen I

Festkomma Darstellung:

• Komma an fester Stelle in Zahl

• Beispiel mit n = 32:

32 1

ganzzahliger Anteil gebrochener AnteilKomma

• Nachteile:• weniger große Zahlen darstellbar• feste Genauigkeit der Nachkommastellen

19

Page 20: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel3.pdf · Beispiele f ur primitive Datentypen in C: int f ur ganze Zahlen ... 210

Rationale Zahlen II

32 1

ganzzahliger Anteil gebrochener AnteilKomma

• Interpretation fur r ∈ Q:

r = cn · 2n + . . . + c0 · 20 + c−12−1 + . . . + c−m · 2−m

mit n Vorkomma- und m Nachkomma-Ziffern

• Beispiel:

11.012 = 1 · 21 + 1 · 20 + 0 · 2−1 + 1 · 2−2

= 2 + 1 + 0 + 14 = 3.2510

20

Page 21: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel3.pdf · Beispiele f ur primitive Datentypen in C: int f ur ganze Zahlen ... 210

Floating Point Zahlen I

Wissenschaftliche Notation:

• x = a · 10b fur x ∈ R, wobei:• a ∈ R mit 1 ≤ |a| < 10• b ∈ Z

• Beispiele:• −2.7315 · 102 ◦C absoluter Nullpunkt• 1.5 · 109 Hz Taktfrequenz A8X Prozessor

• Drei Bestandteile:• Vorzeichen• Mantisse |a|• Exponent b

• Problem: bei fester Lange der Mantisse (z.B. 3 Ziffern)• zwischen 1.23 · 104 = 12300 und 1.24 · 104 = 12400 keine Zahl

darstellbar!

21

Page 22: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel3.pdf · Beispiele f ur primitive Datentypen in C: int f ur ganze Zahlen ... 210

Floating Point Zahlen II

V Exponent E Mantisse M

23 Bit8 Bit 32 Bit float64 Bit double52 Bit11 Bit

1 Bit1 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 double: bias = 1023

22

Page 23: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel3.pdf · Beispiele f ur primitive Datentypen in C: int f ur ganze Zahlen ... 210

Floating Point Zahlen III

Ubliche Floating Point Formate:

Bit Vorz. Exponent Mantisse gultigeDezimalst.

darstellbarerBereich

32 1 Bit 8 Bit 23 Bit ∼ 7 ±2 · 10−38 bis± 2 · 1038

64 1 Bit 11 Bit 52 Bit ∼ 15 ±2 · 10−308 bis± 2 · 10308

80 1 Bit 15 Bit 64 Bit ∼ 19 ±1 · 10−4932 bis± 1 · 104932

In C:

float (32 Bit), double (64 Bit), long double (80 Bit)

23

Page 24: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel3.pdf · Beispiele f ur primitive Datentypen in C: int f ur ganze Zahlen ... 210

Vorsicht mit Floating Point!

Floating Point Zahlen sind bequem, aber Vorsicht!

• Viele Dezimalzahlen haben keine Floating Point Darstellung• Beispiel: 0.110 = 0.0001100110011 . . .2 (periodisch)

• Durch feste Lange der Mantisse sind ebenfalls viele Zahlennicht darstellbar• Beispiel: mit 3 Ziffern Mantisse ist zwischen 1.23 · 104 = 12300

und 1.24 · 104 = 12400 keine Zahl darstellbar!

• Kritisch sind Vergleiche von Floating Point Zahlen• Beispiel: (0.1 + 0.2 == 0.3) ist meist FALSE!

• Zins-Berechnungen und dergleichen NIE mit Floating PointZahlen!• Stattdessen: spezielle Bibliotheken wie GMP

24

Page 25: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel3.pdf · Beispiele f ur primitive Datentypen in C: int f ur ganze Zahlen ... 210

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

25

Page 26: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel3.pdf · Beispiele f ur primitive Datentypen in C: int f ur ganze Zahlen ... 210

Primitive Datentypen in 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: &&, ||, !, ==, !=

26

Page 27: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel3.pdf · Beispiele f ur primitive Datentypen in C: int f ur ganze Zahlen ... 210

Programm heute

1 Einfuhrung

2 Grundlagen von Algorithmen

3 Grundlagen von DatenstrukturenPrimitive Datentypen und ZahldarstellungFelder als sequentielle ListeZeichen und ZeichenfolgenFelder als verkettete ListeAbstrakte DatentypenStacksQueues

27

Page 28: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel3.pdf · Beispiele f ur primitive Datentypen in C: int f ur ganze Zahlen ... 210

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.

28

Page 29: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel3.pdf · Beispiele f ur primitive Datentypen in C: int f ur ganze Zahlen ... 210

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-1] A[n-2] A[2] A[1] A[0]

Achtung: Indizierung startet meist bei 0!

29

Page 30: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel3.pdf · Beispiele f ur primitive Datentypen in C: int f ur ganze Zahlen ... 210

Beispiel sequentielle Liste

Feld A: 15 8 0

A[0]A[1]A[2]

• Feld-Deklaration in C (optionales Beispiel):

int A[3];

• Zugriff auf Elemente:

A[0] = 0;

A[1] = 8;

A[2] = A[1] + 7; // nun: A[2] == 15

30

Page 31: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel3.pdf · Beispiele f ur primitive Datentypen in C: int f ur ganze Zahlen ... 210

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 aufwendig• Hinzufugen und Loschen von Elementen aufwendig

31

Page 32: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel3.pdf · Beispiele f ur primitive Datentypen in C: int f ur ganze Zahlen ... 210

Verlangern der sequentiellen Liste

Gegeben: Feld A, Lange n+1, als sequentielle Liste

Gewunscht: Feld A erweitert auf Lange n+2

• neuen Speicher der Große n+2 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]

32

Page 33: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel3.pdf · Beispiele f ur primitive Datentypen in C: int f ur ganze Zahlen ... 210

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

33

Page 34: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel3.pdf · Beispiele f ur primitive Datentypen in C: int f ur ganze Zahlen ... 210

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

34

Page 35: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel3.pdf · Beispiele f ur primitive Datentypen in C: int f ur ganze Zahlen ... 210

Ausblick: Anwendung von sequentiellen Listen

in 2D und 3D Bildern!

35

Page 36: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel3.pdf · Beispiele f ur primitive Datentypen in C: int f ur ganze Zahlen ... 210

Programm heute

1 Einfuhrung

2 Grundlagen von Algorithmen

3 Grundlagen von DatenstrukturenPrimitive Datentypen und ZahldarstellungFelder als sequentielle ListeZeichen und ZeichenfolgenFelder als verkettete ListeAbstrakte DatentypenStacksQueues

36

Page 37: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel3.pdf · Beispiele f ur primitive Datentypen in C: int f ur ganze Zahlen ... 210

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

37

Page 38: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel3.pdf · Beispiele f ur primitive Datentypen in C: int f ur ganze Zahlen ... 210

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

38

Page 39: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel3.pdf · Beispiele f ur primitive Datentypen in C: int f ur ganze Zahlen ... 210

Zeichen und Zeichenfolgen

Reprasentation eines ASCII Zeichens in 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 Feld (sequentielle Liste) von Zeichen:

'D' 'u' 'A''\0'0123 Index

39

Page 40: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel3.pdf · Beispiele f ur primitive Datentypen in C: int f ur ganze Zahlen ... 210

Programm heute

1 Einfuhrung

2 Grundlagen von Algorithmen

3 Grundlagen von DatenstrukturenPrimitive Datentypen und ZahldarstellungFelder als sequentielle ListeZeichen und ZeichenfolgenFelder als verkettete ListeAbstrakte DatentypenStacksQueues

40

Page 41: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel3.pdf · Beispiele f ur primitive Datentypen in C: int f ur ganze Zahlen ... 210

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).

41

Page 42: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel3.pdf · Beispiele f ur primitive Datentypen in C: int f ur ganze Zahlen ... 210

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-1] A[n-2] A[2] A[1] A[0]

42

Page 43: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel3.pdf · Beispiele f ur primitive Datentypen in C: int f ur ganze Zahlen ... 210

Operationen auf sequentiellen Listen

Sei A sequentielle Liste.

Operationen:

• initialize: Initialisiere seq. Liste A mit nElementen

• elementAt(i): Zugriff auf i-tes Element von A:A[i]

• insert: fuge Element in seq. Liste A ein

(erfordert Umkopieren und evtl. Verlangernvon A)

• erase: entferne Element aus seq. Liste A

(erfordert Umkopieren)

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

25 9 4 116

25 16 8 4 19

25 16 4 1 09

25 9 4 116

43

Page 44: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel3.pdf · Beispiele f ur primitive Datentypen in C: int f ur ganze Zahlen ... 210

Feld als einfach verkettete Liste

Reprasentation von Feld A als verkettete Liste

• dynamische Anzahl von Datenelementen

• in linearer Reihenfolge gespeichert (nicht notwendigerweisezusammenhangend!)

• mit Referenzen oder Zeigern verkettet

Daten Daten DatenDatenstart

nullnext next next next

auf Englisch: linked list

44

Page 45: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel3.pdf · Beispiele f ur primitive Datentypen in C: int f ur ganze Zahlen ... 210

Verkettete Liste

Daten Daten DatenDatenstart

nullnext next next next

• Folge von miteinander verbundenen Elementen

• jedes Element di besteht aus• Daten: Wert des Feldes an Position i• next: Referenz auf das nachste Element di+1

Daten

next

Node:

• start ist Referenz auf erstes Element des Feldes d1

• letztes Element dn hat keinen Nachfolger• symbolisiert durch null-Referenz

45

Page 46: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel3.pdf · Beispiele f ur primitive Datentypen in C: int f ur ganze Zahlen ... 210

Operationen auf verketteter Liste

Zugriff auf Element i:

• beginne bei start Referenz

• “vorhangeln” entlang next Referenzen bis zum i-ten Element

Beispiel fur i=3:

Daten Daten DatenDatenstart

nullnext next next next

Hilfsreferenz

46

Page 47: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel3.pdf · Beispiele f ur primitive Datentypen in C: int f ur ganze Zahlen ... 210

Operationen auf verketteter Liste

Loschen von Element i:

• Zugriff auf Element i-1

• “umhangen” von next Referenz von Element i-1 auf Elementi+1

Beispiel fur i=3:

Daten Daten DatenDatenstart

nullnext next next next

Hilfsreferenz

47

Page 48: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel3.pdf · Beispiele f ur primitive Datentypen in C: int f ur ganze Zahlen ... 210

Operationen auf verketteter ListeEinfugen von Element an Stelle i:

• Zugriff auf Element i-1

• “umhangen” von next Referenz von Element i-1 auf neuesElement

• next Referenz von neuem Element setzen auf altes Element i

Beispiel fur i=3:

Daten Daten DatenDatenstart

nullnext next next next

HilfsreferenzDaten

next

neues Element

48

Page 49: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel3.pdf · Beispiele f ur primitive Datentypen in C: int f ur ganze Zahlen ... 210

Gegenuberstellung sequentielle Liste und verkettete Liste

Sequentielle Liste Verkettete Liste

⊕ Direkter Zugriff auf i-tesElement

Zugriff auf i-tes Element er-fordert i Iterationen

⊕ sequentielles Durchlaufensehr einfach

⊕ sequentielles Durchlaufensehr einfach

statische Lange, kann Spei-cher verschwenden

⊕ dynamische Lange

zusatzlicher Speicher furZeiger benotigt

Einfugen/Loschen erforderterheblich Kopieraufwand

⊕ Einfugen/Loschen einfach

49

Page 50: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel3.pdf · Beispiele f ur primitive Datentypen in C: int f ur ganze Zahlen ... 210

Feld als doppelt verkettete Liste

Reprasentation von Feld A als doppelt verkettete Liste

• verkettete Liste

• jedes Element mit Referenzen doppelt verkettet

Daten Daten DatenDatenstart

null

null

next next next next

prev prev prev prev

stop

auf Englisch: doubly linked list

50

Page 51: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel3.pdf · Beispiele f ur primitive Datentypen in C: int f ur ganze Zahlen ... 210

Doppelt verkettete Liste

Daten Daten DatenDatenstart

null

null

next next next next

prev prev prev prev

stop

• Folge von miteinander verbundenen Elementen• jedes Element di besteht aus

• Daten: Wert des Feldes an Position i• next: Referenz auf das nachste Element di+1

• prev: Referenz auf das vorherige Element di−1

Daten

next

Node:

prev

• start/stop sind Referenzen auf erstes/letztes Element desFeldes

• letztes Element dn hat keinen Nachfolger• symbolisiert durch null-Referenz

51

Page 52: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel3.pdf · Beispiele f ur primitive Datentypen in C: int f ur ganze Zahlen ... 210

Operationen auf doppelt verketteter Liste

Loschen von Element i:

• Zugriff auf Element i

• “umhangen” von next von Element i-1 auf Element i+1

• “umhangen” von prev von Element i+1 auf Element i-1

Beispiel fur i=3:

Daten Daten DatenDatenstart

null

null

next next next next

prev prev prev prev

stop

52

Page 53: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel3.pdf · Beispiele f ur primitive Datentypen in C: int f ur ganze Zahlen ... 210

Operationen auf doppelt verketteter ListeEinfugen von Element an Stelle i:• Zugriff auf Element i• “umhangen” von next von Element i-1 auf neues Element,

sowie “umhangen” von prev von altem Element i auf neuesElement

• next bzw. prev von neuem Element setzen auf altes Element ibzw. Element i-1

Beispiel fur i=3:

Daten Daten DatenDatenstart

null

null

next next next next

prev prev prev prev

stop

Daten

next

prev

53

Page 54: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel3.pdf · Beispiele f ur primitive Datentypen in C: int f ur ganze Zahlen ... 210

Eigenschaften doppelt verkettete Liste

Feld A als doppelt verkettete Liste

• Vorteile:• Durchlauf in beiden Richtungen moglich• Einfugen/Loschen potentiell einfacher, da man sich Vorganger

nicht extra merken muss

• Nachteile:• zusatzlicher Speicher erforderlich fur zwei Referenzen• Referenzverwaltung komplizierter und fehleranfallig

54

Page 55: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel3.pdf · Beispiele f ur primitive Datentypen in C: int f ur ganze Zahlen ... 210

Zusammenfassung Felder

Ein Feld A kann reprasentiert werden als:

• sequentielle Liste (array)• mit fixer Lange

• verkettete Liste (linked list)• mit dynamischer Lange

• doppelt verkettete Liste (doubly linked list)• mit dynamischer Lange

Eigenschaften:

• einfach und flexibel

• aber manche Operationen aufwendig

Als nachstes −→ Aufgabe von Flexibilitat fur Effizienz

55

Page 56: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel3.pdf · Beispiele f ur primitive Datentypen in C: int f ur ganze Zahlen ... 210

Programm heute

1 Einfuhrung

2 Grundlagen von Algorithmen

3 Grundlagen von DatenstrukturenPrimitive Datentypen und ZahldarstellungFelder als sequentielle ListeZeichen und ZeichenfolgenFelder als verkettete ListeAbstrakte DatentypenStacksQueues

56

Page 57: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel3.pdf · Beispiele f ur primitive Datentypen in C: int f ur ganze Zahlen ... 210

Definition Abstrakter Datentyp

Abstrakter Datentyp (englisch: abstract data type, ADT)

Ein abstrakter Datentyp ist ein mathematisches Modell furbestimmte Datenstrukturen mit vergleichbarem Verhalten.

Ein abstrakter Datentyp wird indirekt definiert uber

• mogliche Operationen auf ihm sowie

• mathematische Bedingungen (oder: constraints) uber dieAuswirkungen der Operationen (u.U. auch die Kosten derOperationen).

57

Page 58: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel3.pdf · Beispiele f ur primitive Datentypen in C: int f ur ganze Zahlen ... 210

Beispiel abstrakter Datentyp: abstrakte Variable

Abstrakte Variable V ist eine veranderliche Dateneinheit

mit zwei Operationen

• load(V) liefert einen Wert

• store(V, x) wobei x ein Wert

und der Bedingung

• load(V) liefert immer den Wert x der letzten Operationstore(V, x)

58

Page 59: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel3.pdf · Beispiele f ur primitive Datentypen in C: int f ur ganze Zahlen ... 210

Beispiel abstrakter Datentyp: abstrakte Liste (Teil 1)

Abstrakte Liste L ist ein Datentyp

mit Operationen

• pushFront(L, x) liefert eine Liste

• front(L) liefert ein Element

• rest(L) liefert eine Liste

und den Bedingungen

• ist x Element, L Liste, dann liefert front(pushFront(L, x)) dasElement x.

• ist x Element, L Liste, dann liefert rest(pushFront(L, x)) dieListe L.

59

Page 60: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel3.pdf · Beispiele f ur primitive Datentypen in C: int f ur ganze Zahlen ... 210

Beispiel abstrakter Datentyp: abstrakte Liste (Teil 2)

Abstrakte Liste L. Weitere Operationen sind

• isEmpty(L) liefert true oder false

• initialize() liefert eine Listen Instanz

mit den Bedingungen

• initialize() 6= L fur jede Liste L (d.h. jede neue Liste istseparat von alten Listen)

• isEmpty(initialize()) == true (d.h. eine neue Liste ist leer)

• isEmpty(pushFront(L, x)) == false (d.h. eine Liste ist nacheinem pushFront nicht leer)

60

Page 61: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel3.pdf · Beispiele f ur primitive Datentypen in C: int f ur ganze Zahlen ... 210

Programm heute

1 Einfuhrung

2 Grundlagen von Algorithmen

3 Grundlagen von DatenstrukturenPrimitive Datentypen und ZahldarstellungFelder als sequentielle ListeZeichen und ZeichenfolgenFelder als verkettete ListeAbstrakte DatentypenStacksQueues

61

Page 62: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel3.pdf · Beispiele f ur primitive Datentypen in C: int f ur ganze Zahlen ... 210

Definition Stack

Stack (oder deutsch: Stapel, Keller)

Ein Stack ist ein abstrakter Datentyp. Er beschreibt eine spezielleListenstruktur nach dem Last In – First Out (LIFO) Prinzip mitden Eigenschaften

• loschen, einfugen ist nur am Ende der Liste erlaubt,

• nur das letzte Element darf manipuliert werden.

Operationen auf Stacks:

• push: legt ein Element auf den Stack (einfugen)

• pop: entfernt das letzte Element vom Stack (loschen)

• top: liefert das letzte Stack-Element

• isEmpty: liefert true falls Stack leer

• initialize: Stack erzeugen und in Anfangszustand (leer) setzen

62

Page 63: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel3.pdf · Beispiele f ur primitive Datentypen in C: int f ur ganze Zahlen ... 210

Definition Stack

Stack (oder deutsch: Stapel, Keller)

Ein Stack ist ein abstrakter Datentyp. Er beschreibt eine spezielleListenstruktur nach dem Last In – First Out (LIFO) Prinzip mitden Eigenschaften

• loschen, einfugen ist nur am Ende der Liste erlaubt,

• nur das letzte Element darf manipuliert werden.

Pizza #1

Pizza #2

neue Pizza

Pizza #3

"push"

63

Page 64: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel3.pdf · Beispiele f ur primitive Datentypen in C: int f ur ganze Zahlen ... 210

Definition Stack (exakter)

Stack S ist ein abstrakter Datentyp mit Operationen

• pop(S) liefert einen Wert

• push(S, x) wobei x ein Wert

mit der Bedingung

• ist x Wert und V abstrakte Variable, dann ist die Sequenzpush(S, x); store(V, pop(S)) aquivalent zu store(V, x)

sowie der Operation

• top(S) liefert einen Wert

mit der Bedingung

• ist x Wert und V abstrakte Variable, dann ist die Sequenzpush(S, x); store(V, top(S)); aquivalent zupush(S, x); store(V, x)

64

Page 65: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel3.pdf · Beispiele f ur primitive Datentypen in C: int f ur ganze Zahlen ... 210

Definition Stack (exakter, Teil 2)

Stack S. Weitere Operationen sind

• isEmpty(S) liefert true oder false

• initialize() liefert eine Stack Instanz

mit den Bedingungen

• initialize() 6= S fur jeden Stack S (d.h. jeder neue Stack istseparat von alten Stacks)

• isEmpty(initialize()) == true (d.h. ein neuer Stack ist leer)

• isEmpty(push(S, x)) == false (d.h. ein Stack nach push istnicht leer)

65

Page 66: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel3.pdf · Beispiele f ur primitive Datentypen in C: int f ur ganze Zahlen ... 210

Anwendungsbeispiele Stack

• Auswertung arithmetischer Ausdrucke (s. nachste Folie)

• Call-Stack bei Funktionsaufrufen

• Einfache Vorwarts- / Ruckwarts Funktion in Software• z.B. im Internet-Browser

• Syntaxanalyse eines Programms• z.B. zur Erkennung von Syntax-Fehlern durch Compiler

66

Page 67: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel3.pdf · Beispiele f ur primitive Datentypen in C: int f ur ganze Zahlen ... 210

Auswertung arithmetischer Ausdrucke

Gegeben sei ein vollstandig geklammerter, einfacher arithmetischerAusdruck mit Bestandteilen Zahl, +, *, =

Beispiel: (3 * (4 + 5)) =

Schema:

• arbeite Ausdruck von links nach rechts ab, speichere jedesZeichen ausser ) und = in Stack S

• bei ) werte die 3 obersten Elemente von S aus, dann entfernedie passende Klammer ( vom Stack S und speichere Ergebnisin Stack S

• bei = steht das Ergebnis im obersten Stack-Element von S

67

Page 68: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel3.pdf · Beispiele f ur primitive Datentypen in C: int f ur ganze Zahlen ... 210

Implementation Stack

Stack ist abstrakter Datentyp.

• Implementation ist nicht festgelegt

• nur Operationen und Bedingungen sind festgelegt

Stack kann auf viele Arten implementiert werden, zum Beispiel als:

• sequentielle Liste

• verkettete Liste

69

Page 69: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel3.pdf · Beispiele f ur primitive Datentypen in C: int f ur ganze Zahlen ... 210

Implementation Stack als sequentielle Liste

• Stack-Elemente speichern in sequentieller Liste A (Lange n)

• oberstes Stack-Element merken mittels Variable top

• falls Stack leer ist top == -1

01n-2n-1 ...

top

-1

• push(x) inkrementiert top und speichert x in A[top]

• pop() liefert A[top] zuruck und dekrementiert top

• top() liefert A[top] zuruck

70

Page 70: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel3.pdf · Beispiele f ur primitive Datentypen in C: int f ur ganze Zahlen ... 210

Implementation Stack als sequentielle Liste

01n-2n-1 ...

top

-1

9 4 101n-2n-1 ...

top

-1

9 4 101n-2n-1 ...

top

-1

push(1);push(4);push(9);

initialize();

pop();

71

Page 71: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel3.pdf · Beispiele f ur primitive Datentypen in C: int f ur ganze Zahlen ... 210

Implementation Stack als verkettete Liste

• Stack-Elemente speichern in verketteter Liste L

• oberstes Stack-Element wird durch start Referenz markiert

Daten Daten DatenDatenstart

nullnext next next next

• push(x) fugt Element an erster Position ein

• pop() liefert Element an erster Position zuruck und entfernt es

• top() liefert Element an erster Position zuruck

72

Page 72: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel3.pdf · Beispiele f ur primitive Datentypen in C: int f ur ganze Zahlen ... 210

Zusammenfassung Stack

• Stack ist abstrakter Datentyp als Metapher fur einen Stapel• wesentliche Operationen: push, pop

• Implementation als sequentielle Liste• fixe Große (entweder Speicher verschwendet oder zu klein)• push, pop sehr effizient

• Implementation als verkettete Liste• dynamische Große, aber Platz fur Zeiger “verschwendet”• push, pop sehr effizient

73

Page 73: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel3.pdf · Beispiele f ur primitive Datentypen in C: int f ur ganze Zahlen ... 210

Programm heute

1 Einfuhrung

2 Grundlagen von Algorithmen

3 Grundlagen von DatenstrukturenPrimitive Datentypen und ZahldarstellungFelder als sequentielle ListeZeichen und ZeichenfolgenFelder als verkettete ListeAbstrakte DatentypenStacksQueues

74

Page 74: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel3.pdf · Beispiele f ur primitive Datentypen in C: int f ur ganze Zahlen ... 210

Definition Queue

Queue (oder deutsch: Warteschlange)

Eine Queue ist ein abstrakter Datentyp. Sie beschreibt einespezielle Listenstruktur nach dem First In – First Out (FIFO)Prinzip mit den Eigenschaften

• einfugen ist nur am Ende der Liste erlaubt,

• entfernen ist nur am Anfang der Liste erlaubt.

Person stellt sich anPerson verlässt Schlange

75

Page 75: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel3.pdf · Beispiele f ur primitive Datentypen in C: int f ur ganze Zahlen ... 210

Definition Queue

Queue (oder deutsch: Warteschlange)

Eine Queue ist ein abstrakter Datentyp. Sie beschreibt einespezielle Listenstruktur nach dem First In – First Out (FIFO)Prinzip mit den Eigenschaften

• einfugen ist nur am Ende der Liste erlaubt,

• entfernen ist nur am Anfang der Liste erlaubt.

Operationen auf Queues:

• enqueue: fugt ein Element am Ende der Schlange hinzu

• dequeue: entfernt das erste Element der Schlange

• isEmpty: liefert true falls Queue leer

• initialize: Queue erzeugen und in Anfangszustand (leer) setzen

76

Page 76: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel3.pdf · Beispiele f ur primitive Datentypen in C: int f ur ganze Zahlen ... 210

Definition Queue (exakter)Queue Q ist ein abstrakter Datentyp mit Operationen

• dequeue(Q) liefert einen Wert

• enqueue(Q, x) wobei x ein Wert

• isEmpty(Q) liefert true oder false

• initialize liefert eine Queue Instanz

und mit Bedingungen

• ist x Wert, V abstrakte Variable und Q eine leere Queue,dann ist die Sequenz enqueue(Q, x); store(V, dequeue(Q))aquivalent zu store(V, x)

• sind x,y Werte, V abstrakte Variable und Q eine leere Queue,dann ist die Sequenz enqueue(Q, x); enqueue(Q, y); store(V,dequeue(Q)) aquivalent zu store(V, x); enqueue(Q, y)

• initialize() 6= Q fur jede Queue Q

• isEmpty(initialize()) == true

• isEmpty(enqueue(Q, x)) == false

77

Page 77: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel3.pdf · Beispiele f ur primitive Datentypen in C: int f ur ganze Zahlen ... 210

Beispiel: Queue

Q:

Anfang

Q:

Anfang

Q:

Anfang

Q:

Anfang

Q:

Anfang

1

2

32

1

1

Q:

Anfang

2

3

3

Q = initialize();

enqueue(1);

enqueue(2);

enqueue(3);

dequeue();

dequeue();

78

Page 78: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel3.pdf · Beispiele f ur primitive Datentypen in C: int f ur ganze Zahlen ... 210

Anwendungsbeispiele Queue

• Druckerwarteschlange

• Playlist von iTunes (oder ahnlichem Musikprogramm)

• Kundenauftrage bei Webshops

• Warteschlange fur Prozesse im Betriebssystem (Multitasking)

79

Page 79: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel3.pdf · Beispiele f ur primitive Datentypen in C: int f ur ganze Zahlen ... 210

Anwendungsbeispiel Stack und Queue

Palindrom

Ein Palindrom ist eine Zeichenkette, die von vorn und von hintengelesen gleich bleibt.

Beispiel: Reittier

• Erkennung ob Zeichenkette ein Palindrom ist

• ein Stack kann die Reihenfolge der Zeichen umkehren

• eine Queue behalt die Reihenfolge der Zeichen

80

Page 80: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel3.pdf · Beispiele f ur primitive Datentypen in C: int f ur ganze Zahlen ... 210

Palindrom Erkennung

Algorithmus:

• Eingabe: Zeichenkette k

• durchlaufe k von links nach rechts• fuge dabei jedes Zeichen in Stack S

(push) und Queue Q (enqueue) ein

• leere den Stack S (pop) und die Queue Q(dequeue) und vergleiche die Zeichen• falls die Zeichen nicht gleich sind, ist k

kein Palindrom• ansonsten ist k Palindrom

• Ausgabe: k ist Palindrom oder nicht

Zeichenkette k: RADAR

Queue Q:

RADAR

Stack S:

R A D A R

Anfang

top

81

Page 81: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel3.pdf · Beispiele f ur primitive Datentypen in C: int f ur ganze Zahlen ... 210

Implementation Queue

Auch Queue ist abstrakter Datentyp.

• Implementation ist nicht festgelegt

• nur Operationen und Bedingungen sind festgelegt

Queue kann auf viele Arten implementiert werden, zum Beispielals:

• verkettete Liste

• sequentielle Liste

82

Page 82: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel3.pdf · Beispiele f ur primitive Datentypen in C: int f ur ganze Zahlen ... 210

Implementation Queue als verkettete Liste

• Queue-Elemente speichern in verketteter Liste L

• Anfang der Queue wird durch anfang Referenz markiert

• Ende der Queue wird durch extra ende Referenz markiert

Daten Daten DatenDatenanfang

NULLnext next next next

ende

• enqueue(x) fugt Element bei ende Referenz ein

• dequeue() liefert Element bei anfang Referenz zuruck undentfernt es

83

Page 83: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel3.pdf · Beispiele f ur primitive Datentypen in C: int f ur ganze Zahlen ... 210

Implementation Queue als sequentielle Liste

• Queue-Element speichern in sequentieller Liste L (Lange n)

• Anfang der Queue wird durch Index anfang markiert

• Ende der Queue wird durch Index ende markiert

15 8 001n-2n-1 2

anfang

...

ende

• enqueue(x) fugt Element bei Index ende+1 ein

• dequeue liefert Element bei Index anfang zuruck und entferntes durch Inkrement von anfang

84

Page 84: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel3.pdf · Beispiele f ur primitive Datentypen in C: int f ur ganze Zahlen ... 210

Implementation Queue als sequentielle Liste 2

Problem:

15 8 001n-2n-1 2

anfang

...

ende

wird nach ein paar Operationen zu

47 11 301n-2n-1 2

anfang

...

ende

Linksdrift!

Losungsansatz: zirkulare sequentielle Liste.

85

Page 85: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel3.pdf · Beispiele f ur primitive Datentypen in C: int f ur ganze Zahlen ... 210

Implementation Queue als zwei Stacks

• Queue Q kann mittels zwei Stacks implementiert werden

• erster Stack inbox wird fur enqueue benutzt:• Q.enqueue(x) resultiert in inbox.push(x)

• zweiter Stack outbox wird fur dequeue benutzt:• falls outbox leer, kopiere alle Elemente von inbox zu outbox:

outbox.push( inbox.pop() )

• Q.dequeue liefert outbox.pop() zuruck

1

2

3

inbox outbox

enqueue

3

2

1

inbox outbox

dequeue

86

Page 86: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel3.pdf · Beispiele f ur primitive Datentypen in C: int f ur ganze Zahlen ... 210

Zusammenfassung Queue

• Queue ist abstrakter Datentyp als Metapher fur eineWarteschlange• wesentliche Operationen: enqueue, dequeue

• Implementation als verkettete Liste• dynamische Große, aber Platz fur Referenzen “verschwendet”• enqueue, dequeue sehr effizient

• Implementation als sequentielle Liste• fixe Große (entweder Speicher verschwendet oder zu klein)• enqueue, dequeue sehr effizient• Queue sehr schnell voll durch “Linksdrift”

(ist aber durch zirkulare sequentielle Liste losbar)

87

Page 87: Algorithmen und Datenstrukturen (f ur ET/IT)campar.in.tum.de/files/teaching/2015ss/AuD/AuD-kapitel3.pdf · Beispiele f ur primitive Datentypen in C: int f ur ganze Zahlen ... 210

Zusammenfassung

1 Einfuhrung

2 Grundlagen von Algorithmen

3 Grundlagen von DatenstrukturenPrimitive Datentypen und ZahldarstellungFelder als sequentielle ListeZeichen und ZeichenfolgenFelder als verkettete ListeAbstrakte DatentypenStacksQueues

88