哈希表基础知识(hash table)(1)
2015-04-25 10:59
204 查看
\quad\quad本节主要结束散列表的相关内容。散列是一种用以常数平均时间执行插入,删除,和查找的技术\color{red}{散列是一种用以常数平均时间执行插入,删除,和查找的技术}。但是那些需要元素间任何排列信息的操作将不会得到有效的支持,比如查找最小值,以线性时间按排序顺序将整个表打印出来的操作都不是散列表所支持的。
\quad\quad针对哈希表,我们需要注意两点,1.哈希函数的确定。本章节用Horner法则来获得哈希函数。2.解决哈希冲突。本章节主要通过分离链接法来解决哈希冲突。
\quad\quad下面是头文件内容
\quad\quad哈希表的定义以及相应的操作函数:
主函数:
\quad\quad针对哈希表,我们需要注意两点,1.哈希函数的确定。本章节用Horner法则来获得哈希函数。2.解决哈希冲突。本章节主要通过分离链接法来解决哈希冲突。
\quad\quad下面是头文件内容
#ifndef hash_h_ #define hash_h_ struct listnode; typedef struct listnode *Position; struct Hash_table; typedef struct Hash_table *Hash; typedef struct listnode *List; Hash Init(int tab_size); int Hash_fun(char * S,int tab_size); Position Find(char * S,Hash h); void Insert(char *S,Hash h); #endif // hash_h_
\quad\quad哈希表的定义以及相应的操作函数:
#include <stdio.h> #include <stdlib.h> #include "main.h" #define min_table_size 100 #include<string.h> #define N 100 struct listnode { char * element; Position next; }; struct Hash_table { int tablesize; List *thelist; }; //Init Hash Init(int tab_size) { if(tab_size<min_table_size) { printf("error ,the hash is too small\n"); exit(1); } Hash h=malloc(sizeof(struct Hash_table)); h->thelist=malloc(sizeof(List)*tab_size); h->tablesize=tab_size; int i=0; for(;i<tab_size;i++) { h->thelist[i]=malloc(sizeof(struct listnode)); h->thelist[i]->next=NULL; } return h; } //Hash_fun int Hash_fun(char * S,int tab_size) { int Hash_value=0; while(*S!='\0') { Hash_value=Hash_value*32+*S; S++; } return Hash_value % tab_size; } //Find Position Find(char * S,Hash h) { List l=h->thelist[Hash_fun(S,h->tablesize)]; Position p=l->next; while(p!=NULL) { if(strcmp(S,p->element)==0) break; p=p->next; } return p; } //Insert void Insert(char *S,Hash h) { List l=h->thelist[Hash_fun(S,h->tablesize)]; Position p=Find(S,h); if(p==NULL) { Position p_tem=malloc(sizeof(struct listnode)); p_tem->element=malloc(sizeof(char)*N);//注意这句话 strcpy(p_tem->element,S); p_tem->next=l->next; l->next=p_tem; } }
主函数:
int main() { Hash H_table=Init(297); Insert("zhang",H_table); Insert("wang",H_table); Insert("li",H_table); Position p_find=Find("li",H_table); printf("%p",p_find); return 0; }
相关文章推荐
- 哈希表基础知识(2)
- 哈希表有关的基础知识(1)
- 哈希表(hash table)的基本知识
- 散列表/哈希表的基础知识(上)
- c#基础知识---集合之哈希表(Hashtable)
- Java基础知识强化之集合框架笔记75:哈希表
- 哈希表基础知识(3)
- Java基础知识笔记(一:修饰词、向量、哈希表)
- Hash Table哈希表和Hash List哈希链表的知识汇总
- web dynpro for abap 基础知识(一)
- Android应用程序基础知识
- C++基础知识总结----类的进阶知识点
- qt绘图相关的基础知识
- linux基础知识
- 最全的Spark基础知识解答
- SHELL (2) —— Shell变量的核心基础知识和实践
- 推荐系统基础知识
- 【碎片知识(7)· 计算机视觉基础】基于光流估计的目标跟踪
- vm基础知识
- linux基础知识小结3