下面用哈希查找来解决一个实际问题:图书馆查询问题。
图书馆里面有若干本书(至少3000本,至多30000本),为帮助用户快速查找每本书所在的书架位置,请设计一个模拟
系统实现基于图书编号的快速查询方法。
输入:书的数目n,每本书的ISBN、书名、图书所在书架的行、列。查询的次数q,要查询的图书的ISBN号。
输出:对于每本要查询的书,输出其书名、图书所在书架的行、列.
实现思路:
折叠法求哈希地址 将ISBN分成位数相同的几部分 在将他们的叠加和作为哈希地址.叠加方法是移位叠加的。
使用链地址法处理冲突,即设计指针数组,每个指针指向一个链表,哈希地址为i的放入i号链表中。
运行结果:
首先是图书的存储结构定义:
typedef struct BookNode
{
char id[50]; //ISBN
char s[50]; //书名
int r,c; //图书所在的行与列
struct BookNode *next; //指向下一本书
}BookNode;
typedef struct Book
{
BookNode *firstbook; //书库的头结点
}Book,*Books;
哈希查找 折叠法求哈希地址 将ISBN分成位数相同的几部分 在将他们的叠加和作为哈希地址.叠加方法是移位叠加的。