⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hash.h

📁 哈希表实现
💻 H
字号:
/* +++Date last modified: 05-Jul-1997 */#ifndef HASH__H#define HASH__H#include <stddef.h>           /* For size_t     *//*** A hash table consists of an array of these buckets.  Each bucket** holds a copy of the key, a pointer to the data associated with the** key, and a pointer to the next bucket that collided with this one,** if there was one.*/typedef struct bucket {    char *key;    void *data;    struct bucket *next;} bucket;/*** This is what you actually declare an instance of to create a table.** You then call 'construct_table' with the address of this structure,** and a guess at the size of the table.  Note that more nodes than this** can be inserted in the table, but performance degrades as this** happens.  Performance should still be quite adequate until 2 or 3** times as many nodes have been inserted as the table was created with.*/typedef struct hash_table {    size_t size;    bucket **table;} hash_table;/*** This is used to construct the table.  If it doesn't succeed, it sets** the table's size to 0, and the pointer to the table to NULL.*/hash_table *construct_table(hash_table *table,size_t size);/*** Inserts a pointer to 'data' in the table, with a copy of 'key' as its** key.  Note that this makes a copy of the key, but NOT of the** associated data.*/void *insert(char *key,void *data,struct hash_table *table);/*** Returns a pointer to the data associated with a key.  If the key has** not been inserted in the table, returns NULL.*/void *lookup(char *key,struct hash_table *table);/*** Deletes an entry from the table.  Returns a pointer to the data that** was associated with the key so the calling code can dispose of it** properly.*/void *del(char *key,struct hash_table *table);/*** Goes through a hash table and calls the function passed to it** for each node that has been inserted.  The function is passed** a pointer to the key, and a pointer to the data associated** with it.*/void enumerate(struct hash_table *table,void (*func)(char *,void *));/*** Frees a hash table.  For each node that was inserted in the table,** it calls the function whose address it was passed, with a pointer** to the data that was in the table.  The function is expected to** free the data.  Typical usage would be:** free_table(&table, free);** if the data placed in the table was dynamically allocated, or:** free_table(&table, NULL);** if not.  ( If the parameter passed is NULL, it knows not to call** any function with the data. )*/void free_table(hash_table *table, void (*func)(void *));#endif /* HASH__H */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -