哈希表的设计与实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
洛阳理工学院
课程设计报告
课程名称数据结构课程设计
设计题目哈希表的设计与实现
专
课程设计任务书
设计题目:哈希表的设计与实现_________________________________ _________________________________________________________ 设计内容与要求:
内容:
1、设每个记录有下列数据项:电话号码、用户名、地址;
2、从键盘输入各记录,分别以电话号码和用户名为关键字建立哈希表;
3、采用再哈希法解决冲突;
4、查找并显示给定电话号码的记录;
5、查找并显示给定用户名的记录。
6、在哈希函数确定的前提下,尝试各种不同类型处理冲突的方法(至少两种),考察平均查找长度的变化。
课程设计评语
成绩:
指导教师:_______________
年月日
目录
一.问题描述 (2)
二.基本要求 (2)
三.数据结构 (2)
四.总体设计 (2)
五.详细设计 (3)
5.1录入功能 void lurugongneng() (3)
5.2查询功能 void chaxungongnen() (3)
5.3订票功能 void dingpiaogongnen() (4)
5.4退票功能 void tuipiaogongnen() (4)
5.5修改功能 void xiugaigongnen()................ 错误!未定义书签。六.测试与调试. (4)
6.1 程序的模块 (4)
6.2 程序的调试 (4)
6.3 测试结果 (5)
七.源程序清单 (6)
一.问题描述
通过此系统可以实现如下功能:
录入:可以录入通讯录情况
查询:查询通讯录内的所有人
插入:在通讯录内插入后来自己想要的人的信息
删除:删除自己需要删除的信息
修改:修改通讯录内的个人信息
二.基本要求
根据以上功能说明,设计哈希表通讯录的存储结构,设计程序完成功能。三.数据结构
int key; // 定义两个关键字为全局变量
int key2;
int *p;
struct node{
//建立节点,每个节点包括用户姓名,地址电话号码,以及指向下一个节点的指针 char name[8],address[20];
char num[11];
node *next;
};
四.总体设计
五.详细设计5.1录入功能 void add()
通过调用hash()和hasg2()函数录入个人信息,输入的航线信息包括姓名,地址,电话号码。
5 .2查询功能 void display()
查询分为按目的地查询和按航班号查询,通过void display()函数调用search_name()//通过姓名查询函数和void search_num()//通过电话查询函数。通过n控制功能选择,若找到,则输出该信息,否则提示用户没找到,退出。
5.3添加功能 void add()
调用add()函数用来将需要插入的信息,插入到哈希表中,调用hash()函数将信息进行哈希排序。并存储起来。
5.4删除功能 void create()
调用create()函数,重新建议一个哈希表,覆盖掉以前的哈希表,就删除了以前建立的哈希表。
六.测试与调试
6.1 程序的模块
录入功能:原始数据的输入。
查询功能:根据客户需要,查询相关信息。
删除功能:根据客户的不同情况,删除信息。
退出功能:退出系统。
6.2 程序的调试
(1)程序在起初的时候,在建立数据结构的时候有了一些困难,在查询了书之后,我建立了数据结构
函数定义的数据类型出现了问题,对函数的定义不清楚,字符的不正确定义造成了后期大量的纠错工作
(2)在写程序的时候忘记了一些c语言的语言规范,导致程序中出现了许多低级的错误
(3)测试用例具有一定的广泛性。运行程序时输入了多种不同字符信息,经过多次修改结果达到了预期效果,说明程序具有一定的可靠性和稳定性。
6.3 测试结果
图 6-1 录入功能
图 6-2 通过姓名查询
图 6-3 通过电话查询
图 6-5 删除功能
七.源程序清单
#include
#include
#include
int key; // 定义两个关键字为全局变量
int key2;
int *p;
struct node{
//建立节点,每个节点包括用户姓名,地址电话号码,以及指向下一个节点的指针 char name[8];
char address[20];
char num[11];
node *next;
};
typedef node* pnode;
typedef node* mingzi;
node **phone;//二级指针
node **nam;
void hash(char num[11]){
//哈希函数,以电话号码为关键字建立哈希表
int i=3;
key=(int)num[2];
while(num[i] != NULL){
key+=(int)num[i];
i++;
}
key = key % 20;
}
void hash2(char name[8]){
//哈希函数以用户名为关键字建立哈希表
//利用强制类型转换,将用户名的每一个字母的asc2码值相加并除以后的余数
int i =1;
key2 = (int)name[0];
while(name[i] != NULL){
key2+=(int)name[i];
i++;
}
key2=key2%20;
}
node *input(){
//输入节点信息,建立节点,并将节点的next指空
node* temp;
temp = new node;
temp->next = NULL;
printf("请输入姓名\n");
scanf("%s",temp->name);