博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
#学习以及成为想要成为的人day20
阅读量:3970 次
发布时间:2019-05-24

本文共 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/

你可能感兴趣的文章
Linux设备驱动调试技术 2
查看>>
Linux设备驱动调试技术 3
查看>>
系统处理 IRQ_EINT0 IRQ_EIN…
查看>>
系统处理 IRQ_EINT0 IRQ_EIN…
查看>>
misc_register和register_ch…
查看>>
misc_register和register_ch…
查看>>
misc_register和register_ch…
查看>>
misc_register和register_ch…
查看>>
platform设备添加流程(转载)
查看>>
platform设备添加流程(转载)
查看>>
GCC编译关键字“__attribute_…
查看>>
GCC编译关键字“__attribute_…
查看>>
Linux对I/O端口资源的管理( …
查看>>
Linux对I/O端口资源的管理( …
查看>>
[转载]Linux内核中的platfor…
查看>>
顺序和屏障 收藏
查看>>
Linux PCI驱动模型
查看>>
S3C2440上触摸屏驱动实例开发讲解(…
查看>>
Android驱动例子(LED灯控制)(1…
查看>>
第二章 Android内核和驱动程序(转)
查看>>