Die Programmieraufgaben sind alleine zu bearbeiten, die anderen Aufgaben
können in Zweiergruppen bearbeitet werden.
Aufgabe 23 ( 4 + 3 Punkte) dynamisches Hashen
Mit Hilfe der hash-Funktion
h: w ------------> (5*w) mod 61
- ein Wert h(w) habe 6 binäre Stellen - sollen
die Primzahlen zwischen 200 und 300 (= 211 223 227 229 233 239 241 251
257 263 269 271 277 281 283 293) abgespeichert werden. Führen
Sie sämtliche Einfügeoperationen durch! Starten Sie mit d=2,
d.h. mit einem Feld der Länge 4 für die Seitenadressen. Auf einer
Seite sei Platz für 4 Zahlen. (4 Punkte)
Löschen Sie nun alle Primzahlen, die modulo 4 den
Rest 1 haben. Verschmelzen Sie ggf. Datenseiten. (3 Punkte)
Aufgabe 24 (3 + 5 Programmierpunkte) Hashprogramm
Schreiben Sie eine C-Funktion int hmitte(char *text) die
zu einer C-Zeichenkette eine Hashadresse zwischen 0 und 1023 liefert. Dabei
soll die Methode Mitte des Quadrats verwendet werden. Es sollen jeweils
zwei Byte der Zeichenkette als 16-stellige Binärzahl interpretiert
werden. Um den gesamten String zu verarbeiten soll eine Faltungsmethode
verwendet werden. Die Hashadresse ist der Rückgabewert der Funktion
(3 Punkte)
Zum Testen schreiben Sie eine main() Routine die Wörter
einliest, die zugehörige hash-Adresse berechnet und dort das Wort
abspeichert. Implementieren Sie eine Kollisonsstrategie mit Keller und
Nachfolgerzeiger für die Kellerelemente. (5 Punkte)