Ah, okay. Für die Zukunft; Das ist eine denkbar ungeeignete Datenstruktur für das was du erreichen willst, mit einer hash table schaffst du deutlich höhere Geschwindigkeiten. Wir sprechen hier von nahezu O(1), wohingegen deine Linked List bei O(log N) liegt. Im Gstudio Wiki steht ein bisschen mehr zu der Thematik:
http://www.opserver.de/wiki/index.php/Data_StructuresEdit: Hier ist eine hashing funktion für C-Strings, sie hat den Vorteil das sie kaum Kollisionen hat solange du unter 16 Zeichen bleibst, bei über 16 Zeichen steigert sich aber die Kollisionsgefahr merklich:
unsigned int HashString(char *string)
{
size_t length = strlen(string);
size_t iterator;
unsigned int res = length;
if(length <= 16)
{
for(iterator=0; iterator<length; iterator++)
res = res * 257 + string[iterator];
}
else
{
// Hash the first and last 8 bytes
for(iterator = 0; iterator<8; iterator++)
res = res * 257 + string[iterator];
for(iterator = length - 8; iterator<length; iterator++)
res = res * 257 + string[iterator];
}
return (res << (length & 31));
}