Universität Ulm -Abteilung Angewandte Informationsverarbeitung
7.Übungsblatt (29.06.00 bis 06.07.00)
zur Vorlesung Allgemeine Informatik II (SS 00)



Das nette Hashprogramm aus den Übungen hat leider eine Reihe von Nachteilen, die Sie als Zweitsemester sofort erkennen und beim besten Willen nicht länger ertragen können:


Das führt zwingend zu folgender Aufgabenstellung:
 

Aufgabe 1 (3 Punkte)

Erweitern Sie das Programm main.om dahingehend, dass die kompletten Informationen aus der Datei personen pro Person eingelesen und durch die Hashorganisation verwaltet werden kann. (Zum Testen von Aufgabe 1 ist es sinnvoll, nur die ersten 53 Einträge der Datei zu betrachten, ansonsten läuft die Hashtabelle über! Der Aufruf des Programms main dateiname soll der gleiche bleiben!). Eine Person wird nach wie vor nur durch Ihren Vor- und Nachnamen festgelegt. Zum Suchen in der Datenbank reicht es also, Namen und Vornamen einzugeben. Der gefundene Record soll aber sämtliche Infos der Person enthalten und diese komplett am Bildschirm ausgeben. (Das sind also: Nachname, Vorname, Geschlecht, Geburtstag, Strasse, PLZ, Wohnort.)
Das Programm hash.om und vor allem die Schnittstellen in hash.od dürfen nicht verändert werden (mit anderen Worten: Se brauchet da nix ändre - das klapt au so! Glück g'hätt.).
 

Aufgabe 2 (7 Punkte)

Nun kommt das Eigentliche: Ihre Hashtabelle braucht einen sogenannten Überlaufbereich. D.h., falls der Platz für eine Person in der Tabelle bereits belegt ist (gleicher Hashwert zweier Personennamen), dann soll nicht ein Rehash durchgeführt werden, sondern in einer linearen Liste ein Überlaufbereich angelegt werden, der alle Einträge mit dem gleichen Hashwert enthält! Auch dazu darf hash.od nicht angerührt werden - sämtliche Änderungen sind in hash.om anzubringen.
(Man kann also die Listenprogramme der letzten Zeit prima verwenden. Das wollten doch alle, gell?)

Die Hashtabelle als Tabelle - und damit auch die prinzipielle Hashorganisation - bleiben unverändert. Anstatt aber nun direkt auf ein eingetragenes Element, zeigen die Arrayelemente der Hashtabelle nun auf den Anfang der linearen Liste des Überlaufbereichs. Alles klar? Nein? Dann also folgendes Bild: