21.11.2013 Aufrufe

Eine Einführung in die Programmiersprache C und die Grundlagen ...

Eine Einführung in die Programmiersprache C und die Grundlagen ...

Eine Einführung in die Programmiersprache C und die Grundlagen ...

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

<strong>E<strong>in</strong>e</strong> <strong>E<strong>in</strong>führung</strong> <strong>in</strong> <strong>die</strong> Informatik <strong>und</strong> <strong>die</strong> <strong>Programmiersprache</strong> C<br />

Beispiel e<strong>in</strong>er Hashtabelle (Hashfunktion h = Wert % 11)<br />

0 1 2 3 4 5 6 7 8 9 10<br />

5467 519 267 543 5615 567 568 856<br />

8139<br />

121<br />

123<br />

1257<br />

2314<br />

4582<br />

271<br />

1983<br />

4901<br />

83<br />

Beispielcode für e<strong>in</strong>e Hashtabelle mit E<strong>in</strong>füge <strong>und</strong> Suchfunktionen. (Doppelte E<strong>in</strong>träge werden<br />

nicht gef<strong>und</strong>en, aber auch nicht verh<strong>in</strong>dert. Dazu müsste man beim E<strong>in</strong>fügen zuerst nach dem Wert<br />

suchen, <strong>und</strong> nur dann E<strong>in</strong>fügen wenn der Wert nicht gef<strong>und</strong>en wurde.).<br />

typedef struct Entry {<br />

<strong>in</strong>t Value;<br />

struct Entry *Next;<br />

} Entry;<br />

Entry* HashTable[11] = {NULL, NULL, NULL, NULL, NULL, NULL,<br />

NULL, NULL, NULL, NULL, NULL};<br />

void Insert(<strong>in</strong>t Value)<br />

{<br />

Entry* Place;<br />

Entry* NewEntry;<br />

unsigned <strong>in</strong>t Hash = Value % 11;<br />

}<br />

/* Neues Element erzeugen */<br />

NewEntry = (Entry *) malloc(sizeof (Entry));<br />

if (NewEntry != NULL) {<br />

/* Und am passenden Platz <strong>in</strong> der Hashtabelle e<strong>in</strong>tragen */<br />

NewEntry->Value = Value;<br />

NewEntry->Next = HashTable[Hash];<br />

HashTable[Hash] = NewEntry;<br />

}<br />

Entry *Search(<strong>in</strong>t Value)<br />

{<br />

Entry* Ptr = NULL;<br />

unsigned <strong>in</strong>t Hash = Value % 11;<br />

}<br />

/* Die passende E<strong>in</strong>tragsliste <strong>in</strong> der Hashtabelle durchsuchen */<br />

for(Ptr = HashTable[Hash]; Ptr != NULL; Ptr = Ptr->Next) {<br />

if (Ptr->Value == Value) {<br />

return Ptr;<br />

}<br />

}<br />

return NULL;<br />

Suchfunktionen werden im optimalen Fall bei der Benutzung von Hashtabellen um den Faktor der<br />

Tabellengrösse beschleunigt (Im Vergleich zum Suchen <strong>in</strong> l<strong>in</strong>earen Listen).<br />

Gedruckt am 10.09.2009 14:23:00 Letzte Änderung am: 10. September 2009 Version 2.4.1, I. Oesch 115/147

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!