仓库网站开发,安徽省建设工程信息网百度,保定企业网站的建设,搜索引擎优化涉及的内容4.1 哈希表在一般的数据结构如线性表和树中#xff0c;记录在结构中的相对位置与记录的关键字之间不存在确定的关系#xff0c;在结构中查找记录时需要进行一系列的关键字比较。这一类查找方法建立在比较的基础上#xff0c;查找的效率与比较次数密切相关。理想的情况是能…4.1 哈希表在一般的数据结构如线性表和树中记录在结构中的相对位置与记录的关键字之间不存在确定的关系在结构中查找记录时需要进行一系列的关键字比较。这一类查找方法建立在比较的基础上查找的效率与比较次数密切相关。理想的情况是能直接找到需要的记录因此必须在记录的存储位置和他的关键字之间建立的对应关系使每个关键字哈希表存在冲突现象不同的关键字可能得到同一哈希地址。在建造哈希表时不仅要设定一个好的哈希函数而且要设定一种处理冲突的方法。4.2 哈希表数据结构其原代码crypto/lhash目录下。openssl中的哈希表数据结构在lhash.h中定义如下struct lhash_node_st {void *data;struct lhash _node_st *next;unsigned long hash;}struct lhash_st {OPENSSL_LH_NODE **b; 指针数组用于存放所有的数据数组中的每一个值为数据链表的头指针OPENSSL_LH_COMPFUNC comp;存放数据比较函数地址OPENSSL_LH_HASHFUNC hash;存放计算哈希值函数的地址unsigned int num_nodes;为链表个数unsgined int num_alloc_nodes;分配空间的大小unsigned int p;unsigned int pmax;unsigned long up_load;unsigned long down_load;unsigned long num_items;unsigned long num_expand_reallocs;unsigned long num_expand_reallocs;unsgined long num_contracts;unsigned long num_contract_reallocs;unsigned long num_comp_calls;unsigned long num_hash_calls;unsigned long num_insert;unsgined long num_replace;unsigned long num_delete;unsigned long num_retrieve;unsigned long num_retrieve_miss;unsigned long num_hash_comps;int error;}4.3 函数说明a.LHASH *OPENSSL_lh_new(LLHASH_HASH_FN_TYPE h, LHASH_COMP_FN_TYPE c)功能生成哈希表说明输入参数h为哈希函数c为比较函数。这两个函数都是回调函数。因为哈希表用于存放任意的数据结构哈希表存放、查询、删除等操作都需要比较函数和进行哈希运算而哈希表不知道数据如何进行比较也不知道用户数据结构中需要对那些关键项进行散列运算。所以用户必须提供这两个回调函数。b.void *OPENSSL_LH_delete(LHASH *lh, ocnst void *data)功能:删除散列表中的一个数据说明data为数据结构指针c.void OPENSSL_LH_doall(OPENSSL_LHASH *lh, OPENSSL_LH_DOALL_FUNC func)功能处理哈希表中的所有数据说明func为外不提供的回调函数本函数遍历所有存储哈谢表中的数据每个数据被func处理d.void OPENSSL_LH_free(OPENSSL_LHASH *lh)功能:释放哈希表e.void OPENSSL_LH_doall_arg(OPENSSL_LHASH *lh, OPENSSL_LH_DOALL_FUNCARG func, void *arg)功能处理哈希表中所有数据说明此参数类似于OPENSSL_LH_doall函数func为外部提供的回调函数arg为传递给func函数的参数。本函数遍历所有存储的哈希表中的数据每个数据被func处理。f.void *OPENSSL_LH_insert(OPENSSL_LHASH *lh, void *data)功能往哈希表中添加数据说明data为需要添加数据结构的指针地址g.void *OPENSSL_LH_retrieve(OPENSSL_LHASH *lh, const void *data)功能查询数据说明从哈希表中查询数据data为数据结构地址次数据结构中必须提供关键项这些关键想对于用户提供的哈希函数和比较函数以供查询如果查询成功返回数据结构的地址否则返回NULL.SSL_SESSION *ret NULL, data;data.ssl_versions-version;data.session_id_length len;memcpy(data.session_id, session_id, len);ret (SSL_SESSION*)lh_retriev(s-ctx-sessions,data);h.void OPENSSL_LH_node_usage_stats_bio(const OPENSSL_LHASH *lh, BIO *out)源文件lh_stats.c功能将哈希表中每个链表下的数据状态输出到BIO中。i.void OPENSSL_LH_node_usage_stats_bio(const OPENSSL_LHASH *lh BIO *out)源文件lh_stats.c功能将哈希表的使用状态输出到BIO中j.unsigned long OPENSSL_LH_num_items(const OPENSSL_LHASH *lh)源文件lhash.c功能输出哈希表统计信息到BIO中k.void OPENSSL_LH_stats_bio(const OPENSSL_LHASH *lh, BIO *out)源文件lh_stats.c功能输出哈希表统计信息到BIO中l.void OPENSSL_LH_stats(const OPENSSL_LHASH *lhFILE *fp)源文件lh_stats.c功能输出哈希表统计信息到BIO中n.unsigned long lh_strhash(const char *c)源文件:lhash.c功能计算本自负穿到哈希表中转载于:https://www.cnblogs.com/aixiaoxiaoyu/articles/8298433.html