Algorithmen & Datenstrukturen Dr. Ing.Jiri Spale 2008 Jiri Spale, Algorithmen und Datenstrukturen - Einführung 1 Fundamentale Datenstrukturen 2008 Jiri Spale, Algorithmen und Datenstrukturen - Einführung 2 Ansatz Computer: Aufgabe große Datenmengen zu verarbeiten wichtiger als Aufgabe zu Rechnen Auswahl relevanter Daten (Bsp. Mitarbeiterkartei) Festlegung der Darstellung (Bsp. Menge) 2008 Jiri Spale, Algorithmen und Datenstrukturen - Einführung 3 1
Begriff des Datentyps Grundidee: Klassifikation von Daten hinsichtlich ihrer Wertmenge Mathematik: N, Z, Q, R, C 2008 Jiri Spale, Algorithmen und Datenstrukturen - Einführung 4 Eigenschaften des Begriffs Typ Datentyp -> Wertmenge einer (eines) Konstante Variable Ausdrucks Typ durch Denotation (Vereinbarung) gegeben Operatoren, Funktionen: bestimmte Typen erwartet, geliefert Gemischte Operationen: default rules/casting (L-Value, R-Value) 2008 Jiri Spale, Algorithmen und Datenstrukturen - Einführung 5 Strukturierung #1 Standard-Typen float var1; strukturierte Typen primitive unstrukturierte Typen ->Strukturhierarchien homogene Struktur: Komponenten von gleichem Typ (Grundtyp) Kardinalität = Anzahl der Werte in der Wertemenge Anzahl der Komponenten -> Speicherplatz int numbers[] = new int[count]; 2008 Jiri Spale, Algorithmen und Datenstrukturen - Einführung 6 2
Standard-Typen Strukturierung #2 Zahlen byte, short, int, long; float, double Zeichen char Logische Werte boolean: true / false Strukturierungsmethoden Feld (Reihung, Array) Verbund (struct in C, record in Pascal/Delphi; OO: class) Menge (set in Pascal; C, Java: nicht defininiert) Datei (file) 2008 Jiri Spale, Algorithmen und Datenstrukturen - Einführung 7 Darstellung von Strukturen Reihung = Verbund = Menge File 2008 Jiri Spale, Algorithmen und Datenstrukturen - Einführung 8 Reservierung des Speicherplatzes Statische Typen Speicherbedarf per Definition des Sprachelements gegeben: int: 4 byte Dynamische Typen Reservierung während der Laufzeit des Programms Java: pobject=new ObjectType(); C++: pobject=new(objecttype); delete(pobject); C: pa=(int*) malloc(sizeof(int)); free(pa); 2008 Jiri Spale, Algorithmen und Datenstrukturen - Einführung 9 3
Arithmetische Ops Operatoren Unäre - ++ -- Binäre + - * / % Zuweisungsoperatoren = += -= *= /= Vergleichsoperatoren ==!= < > <= >= Logische Ops &&! Bitmanipulationen << >> & ^ ~ 2008 Jiri Spale, Algorithmen und Datenstrukturen - Einführung 10 Aufzählungstypen Allgemein: Type T is (c 1,c 2,c 3,,c n ); Java (ab Java 5): Vervendung: Vervendung: Pascal: enum Farbe {ROT,GRÜN,BLAU} Farbe meinefarbe = Farbe.GRÜN; enum Farbe {rot, gruen, blau}; enum Farbe meinefarbe = gruen; Type Farbe =(rot, gruen, blau); Kardinalität: card (T) = n Ordnung: c i < c j für i < j 2008 Jiri Spale, Algorithmen und Datenstrukturen - Einführung 11 Einfache Standardtypen Typ (Präz.) Byte Bereich Integer-Typen: 2er Komplement byte 1-128.. 127 short 2-32768.. 32767 int 4-2 147 483 648.. 2 147 483 647 long 8-9 223372 036854 775808.. 9 223372 036854 775807 Floating-Point-Typen: IEEE 754 float 4 1.17E-38F.. 3.4E+38F double 8 2.22E-308.. 1.7E+308 2008 Jiri Spale, Algorithmen und Datenstrukturen - Einführung 12 4
Interne Darstellung der Datentypen short s Größe (2er-Komplement) 15 14 0 15-stellig long s Größe float NE:7Fh 31 30 23 8-stel. (2er- Kompl.) 63 62 0 63-stellig 1, s Exp Mantisse 22 0 23-stellig 1, double s Exp Mantisse NE:3FFh 63 62 52 11-stellig 51 0 52-stellig NE=normalis.Exp Beispiele: Float: -12 = -1,5*2 3 Mant: 1,5 = 2 0 +2-1 Exp: 7Fh+3 = 82h Intern: C1400000h Float: 0,5 = 1*2-1 Mant: 1 = 2 0 Exp: 7Fh-1= 7Eh Intern: 3F000000h 2008 Jiri Spale, Algorithmen und Datenstrukturen - Einführung 13 Interne Darstellung der Datentypen#2 Verwendung - Ablage im Arbeitsspeicher - Ablage in binären Dateien Anordnungen der Bytes - Little-endian little end first LSB an der niedrigsten Adresse (z.b. in C/C++) - Big-endian big end first MSB an der niedrigsten Adresse (z.b. in Java) 2008 Jiri Spale, Algorithmen und Datenstrukturen - Einführung 14 Intervalle Allgemein: Java: Pascal: Unterbereichstypen Type T is c 13 to c n nicht definiert nicht definiert Type Farbe = gruen..weiß; Type Stunde = 0..23; Kardinalität: card (T) = ord(letzter) - ord(erster) + 1 Ordnung: c i < c j für i < j 2008 Jiri Spale, Algorithmen und Datenstrukturen - Einführung 15 5
Feld (Reihung) homogen, wahlfreier Zugriff C: typedef float feld[10]; feld X; int index; X[index]=25.3; Pascal: type feld=array[1..10] of real; var X: feld; index: integer; X[index]:=25.3; Java: float X[]; //oder float[] X; kein Typbezeichner X=new float[10]; //Dekl. und Def. kann zusammengefasst w. int index; X[index]=25.3; Java, C: Addressierung stets ab 0; Pascal beliebig 2008 Jiri Spale, Algorithmen und Datenstrukturen - Einführung 16 Struktur (Verbund) #1 heterogen, Zugriff über Punkt- oder Pfeil-Operator struct Verbund { int element1; Typ2 element2; }; Verbund Z1; Verbund* pz1;//pointer auf Z1.element1=5; //Alter.1 pz1->element1=7;//alter.2 Pascal und Delphi: type Verbund=record element1: integer; element2: Typ2; end; Z1: Verbund; pz1: ^Verbund; Z1.element1=5; 2008 Jiri Spale, Algorithmen und Datenstrukturen - Einführung 17 Struktur (Verbund) #2 In objektorientierten Sprachen: class MeineKl { int element1; Typ2 element2; }; MeineKl Z1; MeineKl* pz1;//pointer auf Z1.element1=5; //Alter.1 pz1->element1=7;//alter.2 Java class MeineKl { int element1; Typ2 element2; } //kein Semikolon MeineKl pz1;//referenzvar. //Alter.1 gibt es nicht pz1.element1=7;//alter.2 2008 Jiri Spale, Algorithmen und Datenstrukturen - Einführung 18 6
Allgemein: Menge (Set) type Menge = set of Basistyp; Pascal: type GrossBuchstaben = ('A'..'Z'); Menge = set of GrossBuchstaben; // Intervall var MySet: Menge; myset:=['a', 'B', 'C' ]; Java, Datentyp Menge nicht definiert 2008 Jiri Spale, Algorithmen und Datenstrukturen - Einführung 19 7