... und mit einer Hashmap | 
      |
| 
         Um die Wörter eines Textes schneller zu zählen, kann man
          sich eine eigene Hashmap erstellen. Hier enthält jeder Knoten
          eine Zeiger auf ein Wort, die Häufigkeit des Auftretens in dem
          Text und einen Zeiger auf den nächsten Knoten in der Hashmap. Das
          folgende Beispiel zeigt, wie die Hashmap aussieht, für den Fall,
          daß einmal das Wort 'und' und zweimal das Wort 'in' eingefügt
          worden sind. Die Wörter haben in diesem Beispiel den gleichen
          Hashwert.  | 
      |
![]()  | 
      |
        
 Die C-Struktur stellt nur die nötigsten Angaben für die Hashtabelle bereit. Das ist ein Zeiger auf des Wort, die Auftrittshäufigkeit und einen Zeiger auf den nächsten Knoten.  | 
      |
        
 Die Hashfunktion ordnet jedem Wort eine postive Zahl größer als NHASH zu. NHASH gibt die Größe der Hashtabelle an. Idealerweise ist dies eine Primzahl, die etwas größer ist, als die Anzahl der verschiedenen Wörter, die in dem Text auftreten.  | 
      |
        
 Diese Funktion leistet eigentlich den größten Teil der Arbeit. Sie läßt zuerst den Hashwert des Wortes berechnen. Dann wird jedes Wort, daß den gleichen Hashwert besitzt mit der Eingabe verglichen. Falls das Wort schon in der Hashtabelle enthalten sein sollte, wird einfach der Zähler erhöht. Gibt es noch keine Knoten für diese Wort, dann wird ein neuer erstellt, Speicherplatz bereitgestellt, eine Kopie des Wortes angelegt und schließlich am Anfang der Liste eingefügt.  | 
      |
        
 Die main()-Funktion stellt sicher, daß die Hashtabelle noch nicht gefüllt ist. Sie liest dann die Eingabe ein und übergibt sie an die Funktion incword(). Am Ende wird die Ausgabe bereitgestellt.  | 
      |
| 
         Die Erstellung der Wortliste dauert nur noch ca. 1.22 Sekunden. (0.80 lesen, 0.33 einfügen, 0.09 schreiben) und ist somit ca. 7.77 Sekunden schneller.  |