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 ...
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