FAKULTÄT FÜR TECHNIK STUDIENGÄNGE ELEKTROTECHNIK / INFORMATIONSTECHNIK UND TECHNISCHE INFORMATIK Informatik I Übung 8 Datenstrukturen Inhaltsverzeichnis 1 2 Datenstrukturen ....................................................................................................... 3 1.1 Zugriff auf die Strukturelemente ........................................................................ 4 1.2 Strukturarrays.................................................................................................... 4 1.3 Zeiger und Strukturen........................................................................................ 4 1.4 Zugriff auf Strukturkomponenten über Zeiger .................................................... 5 Übungsaufgabe ........................................................................................................ 6 Übung 8 Seite 2 von 6 1 Datenstrukturen Eine Struktur verbindet eine Ansammlung mehrerer Variablen unter einem Namen. Die Handhabung dieser Verbundvariablen wird dadurch vereinfacht und übersichtlicher gestaltet. Strukturen werden eingerichtet, um komplizierte Daten, meistens Daten unterschiedlichen Datentyps, zu organisieren und besonders in umfangreicheren Programmen den Zugriff auf Daten zu vereinfachen. Die größte Vereinfachung liegt darin, dass sich die unter einem Strukturnamen abgelegten Variablentypen in den meisten Fällen als Einheit ansprechen lassen. Syntax Eine Struktur wird mit dem Schlüsselwort struct und einem Strukturtitel eröffnet. Es folgt in geschweiften Klammern die Liste aller Variablentypen und der zugehörigen Namen. struct Strukturname { Datentyp_1 Datentyp_2 Datentyp_n Name_1; Name_2; Name_n; } Strukturvariablennamen; Anschließend kann optional der Variablenname für die Struktur gewählt werden. Beispiel: struct buch { char sTitel[12]; char sAutor[12]; int iJahr; }; void main(void) { struct buch b1,b1,b3; . . . } Übung 8 Seite 3 von 6 1.1 Zugriff auf die Strukturelemente Wurden Strukturvariablen einer Struktur deklariert wie, struct buch b1,b2,b3; so erfolgt der Zugriff auf ein Element der Struktur über die Anweisung: b1.sTitel='C++'; Das bedeutet, dass vor dem Operator "." die gewünschte Strukturvariable und hinter dem Operator das Element der Variablen steht. Der Ausdruck kann wie eine normale Variable gehandhabt werden. 1.2 Strukturarrays Hat man eine größere Anzahl von Datensätzen zu verwalten, kann man dazu ein Strukturarray deklarieren. Wie gewohnt werden dabei die Elemente mit dem Namen der Arrayvariablen und einem Index bezeichnet. Syntax struct Strukturname[Anzahl Elemente]; Beispiel: struct buch[50]; Um auf ein bestimmtes Element des Strukturarrays zuzugreifen, muss man diese nach der folgende syntaktischen Vorschrift bezeichnen: arrayname[index].komponentennamen; Will man etwa als Erscheinungsjahr des Buches, dessen Daten im 37. Element des Strukturarrays buch gespeichert sind, das Jahr 2002 festlegen, kann dies mit buch[36].iJahr=2002; geschehen. 1.3 Zeiger und Strukturen Auch die Strukturen zählen zu den Datenobjekten auf die man mit einem Zeiger verweisen kann. Zeiger auf Strukturvariablen werden dabei nicht anders definiert als Zeiger auf andere Variablen auch. Syntax struct *Variablenname; nehmen wir das Beispiel vom struct buch dann würde ein Zeiger auf die Struktur folgendermaßen aussehen, struct buch *pB1; Übung 8 Seite 4 von 6 und mit der Anweisung pB1=&b1; speichert man die Adresse der Strukturvariablen b1 in der Zeigervariablen. 1.4 Zugriff auf Strukturkomponenten über Zeiger Ein Zeiger auf eine Struktur enthält die Adresse einer Strukturvariablen, so stellt (*zeiger).strukturkomponente die Syntax für den Zugriff über einen Zeiger dar. Die Klammern um den Ausdruck *zeiger sind notwendig, was an der höheren Priorität des "." –Operators gegenüber des "*"- Operators liegt. Beispiel: (*pB1).iJahr=2002; Eine äquivalente, aber einfachere Alternative, die auf die Klammerung verzichtet und statt des "."-Operator den "->"Operator verwendet. Syntax zeiger->strukturkomponente deswegen sind die Ausdrücke pB1->iJahr und (*pB1).iJahr gleichwertig. Übung 8 Seite 5 von 6 2 Übungsaufgabe Für alle Aufgaben muss der Programmablauf in einem Struktogramm (Nassi-ShneidermanDiagramm) dargestellt werden. Ein Unternehmen, das Vertreter beschäftigt, will deren Umsatz aus dem letzten Jahr überprüfen und eine „Umsatzhitliste“ erstellen. Dazu soll eine neue Datenstruktur „Vertreter“ mit folgenden Informationen gebildet werden: • • • • • • Personalnummer Name Vorname Geburtsdatum Dauer der Betriebszugehörigkeit (in Jahren) Umsatz im letzten Jahr Die Vertreter des Unternehmens werden in einer Reihung des neuen Datentyps „Vertreter“ abgespeichert. In einem C/C++-Programm sollen die Daten von max. 20 Vertretern eingegeben und in der Reihung abgespeichert werden. Anschließend soll die Reihung entsprechend dem Umsatz der Vertreter sortiert werden. Als Sortieralgorithmus kann Bubblesort oder ein anderer Sortieralgorithmus verwendet werden. Die „Vertreter - Reihung“ soll anschließend (sortiert) ausgegeben werden. Strukturieren Sie Ihr Programm wie beim Beispiel Bubblesort aus den vorherigen Übungen, d.h. bilden Sie Unterprogramme für die Eingabe, das Sortieren und die Ausgabe. Übung 8 Seite 6 von 6