本文共 1125 字,大约阅读时间需要 3 分钟。
散列函数学完,这个学期的数据结构就只剩下最后的排序算法了。当初学hash表觉得这东西好高级,时间复杂度度只有O(1),当时的啥哈希函数也把我搞得有点混了,所以就一直没去认真看,现在看来全是纸老虎,就是函数f(x)和x的函数关系,真的很简单,用字典来称呼确实也很贴切。
/*C语言实现hashtable的基本操作*/#define _CRT_SECURE_NO_WARNINGS 1#include#include #include #define SUCCESS 1#define UNSUCCESS 0#define HASHSIZE 12 //散列表长为数组的长度#define NULLKEY -32768typedef struct { int *elem;int count;}HashTable;int size=0;//散列表长度 全局变量void InitHashTable(HashTable *H){ /*初始化散列表*/ size=HASHSIZE; H->count=size; H->elem=(int *)malloc(sizeof(int)*size); for(int i=0;i elem[i]=NULLKEY;}int hash(int key){ //定义散列函数,这里用的是除留余数法 return key%size;}void InsertHashTable(HashTable *H,int key){ /*将关键字插入散列表*/ int addr=hash(key);//求散列地址 while(H->elem[addr]!=NULLKEY) addr=(addr+1)%size;//开放定址法的线性探测 H->elem[addr]=key;}int SearcHash(HashTable *H,int key,int *addr){ /*散列表查找关键字*/ *addr=hash(key); while(H->elem[*addr]!=key){ *addr=(*addr+1)%size; if(H->elem[*addr]==NULLKEY||*addr==hash(key)) //如果循环回到原点,说明关键字不存在 return UNSUCCESS; } return SUCCESS;}void output(HashTable H){ for(int i=0;i
持之以恒!!!
转载地址:http://jstki.baihongyu.com/