Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

hsearch, hcreate, hdestroy - Hash-Tabelle verwalten

&pagelevel(4)&pagelevel

Definition

#include <search.h>

ENTRY *hsearch(ENTRY item, ACTION action);
int hcreate(size_t nel);
void hdestroy(void);

Beschreibung

hsearch() ist eine Suchfunktion für Hash-Tabellen. Sie gibt einen Zeiger in eine Hash-Tabelle zurück, der die Stelle anzeigt, an der ein Eintrag gefunden wurde. Die von hsearch() benutzte Vergleichsfunktion ist strcmp(). item ist eine Struktur des in der Include-Datei search.h definierten Typs ENTRY, die zwei Zeiger enthält: item.key weist auf den Vergleichsschlüssel (vom Typ char*), und item.data (void*) weist auf alle anderen Daten in Zusammenhang mit diesem Schlüssel.

Erweiterung
Zeiger auf Typen, die nicht void sind, sind zu Zeigern auf void umzuwandeln. (Ende)

action ist ein Element des Aufzählungstyps ACTION (definiert in search.h), das die Behandlung des Eintrags angibt, wenn dieser nicht in der Tabelle gefunden werden kann. ENTER zeigt an, dass item an einem geeigneten Punkt in die Tabelle eingetragen werden soll.

Erweiterung Ist ein Duplikat eines existierenden Eintrags vorhanden, so wird der neue Eintrag nicht eingetragen und hsearch() gibt den Zeiger zu dem existierenden Eintrag zurück. (Ende)

FIND zeigt an, dass kein Eintrag vorgenommen werden soll. Eine erfolglose Suche wird durch die Rückgabe eines Nullzeigers gemeldet.

hcreate() weist ausreichend Speicher für die Tabelle zu und muss vor hsearch() aufgerufen werden. nel schätzt die größtmögliche Anzahl von Einträgen, die eine Tabelle enthalten wird. Diese Zahl kann durch den Algorithmus nach oben justiert werden, damit bestimmte, mathematisch günstige Umstände erreicht werden.

hdestroy() zerstört die Suchtabelle. Ein weiterer Aufruf von hcreate() kann folgen. Nach einem Aufruf von hdestroy() kann auf die Tabelle nicht mehr zugegriffen werden.

Returnwert

hsearch():
Zeiger auf den gefundenen Eintrag



bei Erfolg.


Nullzeiger

wenn die Aktion FIND (suchen) ist und der Eintrag nicht gefunden werden konnte oder wenn die Aktion ENTER (eintragen) ist und die Tabelle voll ist.

 

hcreate() :

 

Wert != 0

bei Erfolg.


0

bei Fehler. errno wird gesetzt, um den Fehler anzuzeigen.

 

hdestroy() gibt keinen Wert zurück.

Fehler

hsearch() schlägt fehl, wenn gilt:


ENOMEM

Es ist nicht genügend Speicherplatz vorhanden.

Hinweise

hsearch() und hcreate() verwenden malloc(), um Speicherplatz zuzuweisen.
Es kann jeweils nur eine Hash-Suchtabelle aktiv sein.

Siehe auch

bsearch(), lsearch(), malloc(), strcmp(), tsearch(), search.h.