我真够郁闷,这么久没有更新博客.罪过,罪过...
写这个可扩散列,我写出来的这个完全是个模型,限制较多,局限性也很强,大概32:1.呵呵.不过,尽管如此,拿来练手或者之前没有写过这个东西的朋友看到的话,还是很有帮助的.
大概介绍下吧,不详谈了.本来想吹一顿的,无奈写到现在,感觉很垃圾.于是不好意思大吹特吹了.
数据类型,无符号8位整数.对255以上的数据无效,想弄成负数要做的改动并不多.无奈不想再多耽搁了.
支持,初始化,插入,查找,删除,遍历,清空.还算齐全的功能.
介绍到这里吧,主要是啊,完全就是在书上看到的两页而已,自己写出来,很了不起了啊.没人指导我,网上也没这个东西,哎,我还真是个天才.
虽然,工作很难落实,很难照着我的想法前进,无奈,该做的还是要做下去.办法也还是要继续想,加油吧.不然怎么办呢.
现在心情反而平静了,代码没做太多的优化.贴出来.
/*extendible_hashing.h-- 可扩散列头文件*/
#define NO 0
#define YES 1
#define M 4
#define LENTH 8
/*数据类型定义*/
typedef unsigned char Item ;/*数据*/
typedef struct unit
{
Item * array ;/*数据数组*/
char sub ;/*使用中表元的数量*/
} Unit ;/*数据单元*/
typedef struct subdirectories
{
Unit * point ;/*指向数据单元的指针*/
char point_to_itself ;/*标记是否指向的其本身的数据空间*/
char byte_index ;/*位索引值*/
} Subdirectories ;/*子目录*/
typedef struct table
{
Subdirectories * directory ;/*目录(子目录数组)*/
char directory_size ;/*目录大小*/
char index_digit ;/*索引位数*/
char item_digit ;/*数据位数*/
char array_size ;/*数据数组大小*/
} * Table ;
/*说明:由于手里没有这种数据类型的模型, 算是自己根据要求创造*/
/*将数据类型限制为char类型.有符号8位二进制,这样利于操作*/
/*接口函数声明*/
/*操作:根据二个输入数据产生一个数值并返回*/
/*操作前:pitem 指向指定数据, constant 是被移位的数值*/
/*操作后:产生一个数值并返回*/
int Hash (const Item * const pitem, const char constant) ;
/*操作:创建并初始化一个可扩散列表*/
/*操作前:ptable 指向一个可扩散列表*/
/*操作后:如果内存分配成功, 创建该可扩散列表, 目录大小初始化为4, 索引位数初始化为2, 数据数组大小初始化为4, 返回1; 否则返回0*/
int InitializeTable (Table * const ptable) ;
/*操作:向可扩散列表中添加一个元素*/
/*操作前:ptable 指向一个已初始化的可扩散列表, pitem 指向指定的数据*/
/*操作后:如果未重复添加, 如果内存分配成功, 将指定的数据添加到可扩散列表中, 返回1; 否则返回0*/
int Insert (const Table * const ptable, const Item * const pitem) ;
/*操作:查找并返回可扩散列表中的一个指定数据*/
/*操作前:ptable 指向一个已初始化的可扩散列表, pitem 指向指定的数据*/
/*操作后:如果找到, 返回1; 否则返回0*/
int Find (const Table * const ptable, const Item * const pitem) ;
/*操作:从可扩散列表目录的低索引向高索引依次将一个函数作用于point指针指向其自身数据空间的的子目录*/
/*操作前:ptable 指向一个已初始化的可扩散列表, pfun 指向一个没有返回值, 接受一个Subdirectories类型参数的函数*/
/*操作后:从可扩散列表目录的低索引向高索引依次将一个函数作用于point指针指向其自身数据空间的的子目录*/
void Traversal (const Table * const ptable, void (* pfun) (const Subdirectories subdirectories)) ;
/*操作:从可扩散列表中删除一个指定数据*/
/*操作前:ptable 指向一个已初始化的可扩散列表, pitem 是准备删除的数据*/
/*操作后:如果找到该数据, 将该数据从可扩散列表中删除, 返回1; 否则返回0*/
int Delete (const Table * const ptable, const Item * const pitem) ;
/*操作:清空可扩散列表占用的内存空间*/
/*操作前:pteble 指向一个已初始化的可扩散列表*/
/*操作后:该可扩散列表占用的内存空间被释放*/
void Release (const Table * const ptable) ;
如果觉得《c语言扩散 可扩散列--可扩散列头文件C语言》对你有帮助,请点赞、收藏,并留下你的观点哦!