完整word版哈希表《数据结构》课程设计文档格式.docx
《完整word版哈希表《数据结构》课程设计文档格式.docx》由会员分享,可在线阅读,更多相关《完整word版哈希表《数据结构》课程设计文档格式.docx(22页珍藏版)》请在冰豆网上搜索。
设计哈希表实现电话号码查找系统,要求如下:
1)设每个记录有下列数据项:
电话号码、用户名、地址;
2)从键盘输入各记录,分别以电话号码和用户名为关键字建立哈希表(要求设计两种以上不同的散列函数);
3)采用两种以上的方法解决冲突;
4)查找并显示给定电话号码的记录;
5)查找并显示给定用户名的记录。
三、具体要求及应提交的材料
1.每个同学以自己的学号和姓名建一个文件夹,如:
“312009080611101张三”。
里面应包括:
学生按照课程设计的具体要求所开发的所有源程序(应该放到一个文件夹中)、任务书和课程设计说明书的电子文档。
2.打印的课程设计说明书(注意:
在封面后夹入打印的“任务书”以后再装订)。
四、主要技术路线提示
哈希表的操作。
构造散列函数的方法较多,常用直接定址法、数字分析法、平方取中法、折叠法、除留余数法等,解决冲突的方法也较多,常用:
开放定址法、链地址法等。
五、进度安排
共计两周时间,建议进度安排如下:
选题,应该在上机实验之前完成
需求分析、概要设计可分配4学时完成
详细设计可分配4学时
调试和分析可分配10学时.
2学时的机动,可用于答辩及按教师要求修改课程设计说明书。
注:
只用课内上机时间一般不能完成设计任务,所以需要学生自行安排时间做补充.
六、推荐参考资料
[1]苏仕华等编著,数据结构课程设计,机械工业出版社,2007
[2]严蔚敏等编著,数据结构(C语言版),清华大学出版社,2003
[3]严蔚敏等编著,数据结构题集(C语言版),清华大学出版社,2003
指导教师签名日期年月日
系主任审核日期年月日
摘要
分析了对线性表、栈、队列、字符串、树、图、查找、排序等理论知识的应用,对现实复杂问题的分析建模和解决方法!
分析了针对系统的需求所要执行的解决方法的可行性,正确性.完成系统前需要进行问题描述、系统分析、设计建模、代码实现、调试修改,结果分析。
设计哈希表实现电话号码查询系统是利用哈希表实现电话系统的快速查询,程序实现哈希表建表和查表,并实现对没有查找到的内容进行记录。
利用编程实现电话号码查询系统,该系统具有录入联系人的姓名,电话号码,住址信息,查询联系人,保存记录以及清空记录,并且实现利用散列显示联系人信息,包括姓名散列和电话号码散列。
关键词:
哈希表;
散列;
排序;
联系人;
电话号码
1需求分析
(1)输入的形式和输入值的范围:
数据的输入在屏幕中进行,所输入的数据的格式为:
姓名,住址,电话号码。
用户使用时显示菜单,用户输入菜单选项完成操作.
(2)输出的形式:
查找的结果显示在屏幕上,未被查找到的内容输出相应的提示信息.用户需要时,将哈希表显示在屏幕上。
(3)程序所能达到的功能:
根据用户的要求,输入联系人的姓名,电话号码.住址,分别以姓名和电话号码作为关键字生成哈希表。
生成哈希表后用户可以根据相应的关键字进行数据的查找,若查找到对应的数据则将数据输出屏幕,若没有查找到对应的数据则将输出提示信息表示未找到联系人。
在用户选择哈希表时,显示完整的哈希表.
程序使用文字菜单的友好界面,在数据输入时对输入内容进行范围控制。
(4)测试数据:
在电脑屏幕中输入记录,令程序读入并分别以姓名和电话号码做为关键字生成哈希表,查找记录中原有的记录,查看输出数据,查找记录中没有的记录输出提示信息,查看整个哈希表的数据。
清除所有的记录后再次输入信息查询,屏幕输出未查找到的提示信息,若录入新的信息后,可保存信息,查询,散列联系人信息。
2开发及运行平台
硬件:
微型计算机。
软件:
VC++6.0。
具体操作如下:
新建……工程,
添加相应的源文件,
再编译,
链接,
执行!
3概要设计
1.数据类型
定义结构体类型存储每条记录。
structnode//建节点
{
charname[8];
//用于存放姓名
charaddress[20];
//用于存放地址
charnum[11];
//用于存放电话号码
node*next;
};
2。
主程序流程
创建存放记录的结构体数组
查找记录,分别可选择姓名查询和电话号码查询
姓名散列
号码散列
清空记录
保存记录
选择退出系统
3。
各函数功能
intapend();
//添加节点
voidcreate();
//新建电话号码的节点
voidcreate2();
//新建姓名的节点
voidfind(charnum[11]);
//通过电话号码查找用户信息
voidfind2(charname[8]);
//通过姓名查找用户信息
voidhash(charnum[11]);
//哈希函数,号码散列
voidhash2(charname[8]);
//哈希函数,姓名散列
node*input();
//输入用户信息
voidlist();
//通过姓名查找显示用户信息
voidlist2()//通过电话号码查找显示列表
4详细设计
4。
1数据类型定义
structnode//建节点
{
charname[8],address[20];
charnum[11];
};
node*next;
//定义结构体
1.主要算法
//实现添加姓名,电话号码,住址的新的内存空间模块儿
intapend()
node*newphone;
node*newname;
newphone=input();
newname=newphone;
newphone->
next=NULL;
newname->
hash(newphone->
num);
hash2(newname—>
name);
next=phone[key]->
next;
phone[key]—〉next=newphone;
next=nam[key2]—〉next;
nam[key2]->
next=newname;
return0;
}
//新建电话号码节点函数
voidcreate()
inti;
phone=newpnode[20];
for(i=0;
i〈20;
i++)
{
phone[i]=newnode;
phone[i]—〉next=NULL;
}
//新建名字节点函数
voidcreate2()
inti;
nam=newmingzi[20];
{
nam[i]=newnode;
nam[i]->
}
//通过电话号码查找用户信息函数
voidfind(charnum[11])
hash(num);
node*q=phone[key]-〉next;
while(q!
=NULL)
if(strcmp(num,q->
num)==0)
break;
q=q—>
}
if(q)
cout〈〈q—〉name〈<
"
"
<
q—〉address〈<
””<
q—>
num〈〈endl;
elsecout<
无此记录"
〈endl;
//通过姓名查找用户信息函数
voidfind2(charname[8])
hash2(name);
node*q=nam[key2]—〉next;
if(strcmp(name,q—>
name)==0)
break;
q=q—〉next;
cout<
q—〉name〈〈”"
〈〈q->
address〈<
”<
〈q->
num<
〈endl;
else
cout<
〈"
无此记录”<
//哈希函数,用于电话号码的散列功能
voidhash(charnum[11])
inti=3;
key=(int)num[2];
while(num[i]!
=NULL)
key+=(int)num[i];
i++;
}
key=key%20;
//哈希函数,用于姓名的散列功能
voidhash2(charname[8])
inti=1;
key2=(int)name[0];
while(name[i]!
key2+=(int)name[i];
i++;
}
key2=key2%20;
//输入函数,用于输入用户的姓名,电话号码,住址
node*input()//输入节点
node*temp;
temp=newnode;
temp-〉next=NULL;
cout〈<
请输入姓名:
cin>
〉temp—〉name;
cout<
〈”请输入地址:
endl;
〉temp—〉address;
cout〈〈”请输入电话:
”〈〈endl;
cin〉>
temp-〉num;
returntemp;
//显示列表函数,用于显示通过电话号码查找到的用户信息
voidlist()
node*p;
for(i=0;
p=phone[i]->
while(p)
cout〈<
p—>
name<
”"
〈p—>
address〈〈”"
〈p—〉num<
p=p—>
next;
//显示列表函数,用于显示通过姓名查找到的用户信息
voidlist2()
node*p;
i<
20;
p=nam[i]->
〈p—〉name<
〈〈p->
address<
p-〉num<
p=p—〉next;
//菜单函数,实现客户选择菜单进行系统操作
voidmenu()
〈”========欢迎进入设计哈希表查询电话号码系统========"
〈<
endl;
---——-——--—-0。
添加记录-—--————-—"
---——-————-—1。
查找记录—-——--——-—”<
cout〈〈”--—-—-——————2.姓名散列—-——-—-—--"
”———-—--—---—3.号码散列--——-—--—-”〈<
”---————-—--—4。
清空记录—----———--"
〈”-————-——-—-—5.保存记录-———-——-—-”〈〈endl;
”—-——-—-—-———6。
退出系统———----—--"
”请输入你的选择(0,1,2,3,4,5,6)"
〈〈endl;
2.函数流程图
图一哈希函数实现姓名散列
图二哈希函数实现电话号码散列
图三输入函数
图四电话号码节点创建函数
图五姓名节点创建函数
图六通过电话查找显示函数
图七通过姓名查找显示函数
图八姓名查找函数
图九电话号码查找函数
图十保存用户信息函数
图十一主函数
5调试分析
内容包括:
1。
测试环境
在Windows7环境下的MicrosoftVisualC++6。
模块调试
写入数据时,对数据的内容的控制需要特别注意。
要注意其字符组合模式,比如生成名字是应该只有字幕,生成电话号码是应该只有数字,还要注意生成字符组合的长度限制,比如电话号码应该是11位,这可以在循环语句中进行控制。
在哈希含查找时要注意取余的除数的一致,这是哈希表成立的关键点。
复杂度分析
使用哈希表存储记录,在执行查找是可以快捷的进行查找.选用在哈希法和为随机探测再散列法.程序设定的哈希标长为50,文件数据长度为30,则哈希表的填装因子α为0。
6,则查找成功时的平均查找长度为
Snr≈-In(1-0。
6)
6测试结果
1.添加记录
查找记录
3.查找记录
4.姓名散列
5.电话号码散列
6.清空记录
7.保存记录
8.退出系统
7结论
数据结构课程设计和现代计算机技术的实际应用相结合,是我们在本阶段学完理论课程之后对自己该方面的能力的一次很好的检验,从开始的算法思路到运行调试后的美观的用户界面以及可用程序,都是一个很好的学习和锻炼的过程.使我们巩固了原有的理论知识,培养了我们灵活运用和组合集成所学过知识及技能来分析、解决实际问题的能力.
但是在编写程序的过程中遇到了很多的困难,先是设计整个程序的思路,算法,以及模块儿,由于对课程以及相关知识的一定欠缺,不能很顺利的完成这项工作,再有就是写代码的过程中出现很多语法错误和逻辑错误,通过编译调试找到错误并修改。
这次数据结构课程设计的时间里虽然时间有限,但确实使我受益非浅.通过实践课程设计我丰富了编译工具操作经验,更加深了对C++语言的了解,熟悉了其环境,更增强了哈希表等对多种算法的使用技巧.
总之,数据结构课程设计让我受益良多,我会好好珍惜像这种难得的机会,努力学习知识.
参考文献
[1]苏仕华等编著,数据结构课程设计,北京:
机械工业出版社,2007
[2]严蔚敏等编著,数据结构(C语言版),北京:
清华大学出版社,2003
[3]严蔚敏等编著,数据结构题集(C语言版),北京: