ImageVerifierCode 换一换
格式:DOCX , 页数:21 ,大小:195.07KB ,
资源ID:4731373      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4731373.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(哈希表制作通讯录数据结构程序的设计说明.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

哈希表制作通讯录数据结构程序的设计说明.docx

1、哈希表制作通讯录数据结构程序的设计说明 软 件 学 院课程设计报告书课程名称 数据结构 设计题目 哈希表制作通讯录 专业班级 学 号 姓 名 指导教师 2014年 1月1 设计时间 12 设计目的 13设计任务 14 设计容 14.1需求分析 14.11程序所能达到的功能 14.12输入的形式和输入的围 14.2总体设计 14.21说明本程序中用到的所有抽象数据类型的定义 14.22说明主程序的流程 24.23说明各程序模块之间的层次(调用)关系 34.3详细设计 34.31实现概要设计中定义的所有数据类型,对每个操作只需要写出伪码算法 34.32对主程序和其它主要函数写出伪码算法 44.4测

2、试 54.5 附录 65 总结与展望 16参考文献 18成绩评定 181 设计时间2014年1月13日到2014年1月15号2 设计目的 要求学生掌握数据结构的应用、算法的编写、类C语言的算法转换成C程序并上机调试的基本方法。这对于学生基本程序设计素养的培养和软件工作者工作作风的训练,将起到显著的促进作用。3设计任务针对你所在班集体中的“人名”,设计一个哈希表,使得平均查找长度不超过R,完成相应的建表和查找过程。4 设计容 (1)每个人的信息至少包括,地址。至少包括对通讯录的创建,添加和按查找等功能。(2)假设人名为汉语拼音全拼形式,待插入哈希表的长度为你所在班级的人数。哈希函数用除留余数法构

3、造,采用链地址法或二次探测再散列法解决冲突。(3)完成菜单设计。操作有必要的提示。4.1需求分析4.11程序所能达到的功能 以人命的汉语拼音全拼形式查找你所在班级的人的信息(,地址)4.12输入的形式和输入的围 把人名都到转换成汉语拼音全拼的形式,人命最大长度不超过20个字符4.2总体设计4.21说明本程序中用到的所有抽象数据类型的定义该程序采用的是结构体类型来处理学生的所有基本信息,如下所述。typedef struct /*用结构体类型来处理学生的所有基本信息*/ NA name; /*NA为typedef定义的字符数组类型*/Record;typedef struct /*哈希表*/ R

4、ecord *elemHASHSIZE; /数据元素存储基址 int count; /当前存储的数据元素个数 int size; /当前容量,即表长HashTable;4.22说明主程序的流程4.23说明各程序模块之间的层次(调用)关系各函数模块之间的调用关系主要是主函数调用主要功能函数,即:输入与保存函数、哈希表建立函数、查找信息函数,主要功能函数也会调用一些基本功能函数完成相应功能,如:CreateHash()会调用Hash()来求哈希地址,而Hash()会调用fold()对关键字先进行折叠处理,当地址冲突时,Hash()又会调用collision()解决冲突;SearchHash()也会

5、调用Hash()、fold()、collision()以及eq()。并且主函数利用while循环使各个功能函数运行完毕后都会回到菜单,询问是否继续进行操作。4.3详细设计4.31实现概要设计中定义的所有数据类型,对每个操作只需要写出伪码算法void main() start = last = NULL; for(;) /*无限循环*/ switch(menu_select() /*调用主界面的选择函数,带回返回值*/ case 1:enter(); continue; case 2:ddelete(&start,&last); continue; case 3:list(); continue

6、; case 4:search(); continue; case 5:save(); continue; case 6:load(); continue; case 7:exit(0); int menu_select(void) /*主目录*/ char s80; int c;printf(欢迎使用DOS通讯录系统n);printf(*请在做其它操作前先导入*n);printf(*n); printf(* 1.输入信息 *n); printf(* 2.删除信息 *n); printf(* 3.显示信息 *n); printf(* 4.查找 *n); printf(* 5.存盘 *n); p

7、rintf(* 6.导入 *n); printf(* 7.退出 *n); printf(*n); do printf(nPlease enter your choice:n); gets(s); c = atoi(s); /*将获取的字符串转换成整型*/ while(c7); return c; /*返回输入值*/4.32对主程序和其它主要函数写出伪码算法struct address *info; /*定义当前结点*/for(;) info=(struct address *)malloc(sizeof(struct address); /*为当前结点分配空间*/ if(!info) prin

8、tf(n Out of memory); exit(0); /*如果分配空间失败,退出程序*/ printf(输入空结束:n); inputs(请输入 :,info-name,10); if(!info-name0)break; /*如果输入为空,结束循环*/ inputs(请输入 街道:,info-street,50); inputs(请输入 城市:,info-city,15); inputs(请输入 国家:,info-state,15); inputs(请输入 :,info-tel,7);insert(info,&start,&last); /*调用结点插入函数*/ 4.4测试图4-1 程

9、序运行图图4-2输入信息图图4-3显示信息4.5 附录#include#include#includestruct address /*定义结构*/ char name10; char street50; char city10; char state15; char tel7; struct address *next; /*后继指针*/ struct address *prior; /*前驱指针*/;struct address *start; /*首结点*/struct address *last; /*尾结点*/struct address *find(char *); /*声明查找函

10、数*/void enter(); /*函数声明*/void search();void save(); void load();void list();void ddelete(struct address *start,struct address *last);void insert(struct address *i,struct address *start, struct address *last);void inputs(char *,char *,int);void display(struct address *);int menu_select(void);void mai

11、n() start = last = NULL; for(;) switch(menu_select() case 1:enter(); continue; case 2:ddelete(&start,&last); continue; case 3:list(); continue; case 4:search(); continue; case 5:save(); continue; case 6:load(); continue; case 7:exit(0); int menu_select(void) /*主目录*/ char s80; int c; printf(欢迎使用DOS通讯

12、录系统n); printf(*请在做其它操作前先导入*n); printf(*n); printf(* 1.输入信息 *n); printf(* 2.删除信息 *n); printf(* 3.显示信息 *n); printf(* 4.查找 *n); printf(* 5.存盘 *n); printf(* 6.导入 *n); printf(* 7.退出 *n); printf(*n); do printf(nPlease enter your choice:n); gets(s); c = atoi(s); while(c7); return c; /*返回输入值*/void enter() /

13、*输入函数,本函数循环输入资料,当输入为空时退出*/ struct address *info; /*定义当前结点*/ for(;) info=(struct address *)malloc(sizeof(struct address); /*为当前结点分配空间*/ if(!info) printf(n Out of memory); exit(0); /*如果分配空间失败,退出程序*/ printf(输入空结束:n); inputs(请输入 :,info-name,10); if(!info-name0) break; /*如果输入为空,结束循环*/ inputs(请输入 街道:,info

14、-street,50); inputs(请输入 城市:,info-city,15); inputs(请输入 国家:,info-state,15); inputs(请输入 :,info-tel,7); insert(info,&start,&last); /*调用结点插入函数*/ void inputs(char *prompt,char *s,int count) /*输入函数,有越界检测功能*/ char p255; do printf(prompt); fgets(p,254,stdin); if(strlen(p)count) printf(nToo Longn); while(strl

15、en(p)count); pstrlen(p)-1=0; strcpy(s,p);void insert( /*数据插入函数*/ struct address *i, struct address *start, struct address *last ) if(*last=NULL) /*如果尾结点为空,意味着当前链表为空*/ i-next=NULL; i-prior=NULL; *last=i; *start=i; return; else (*last)-next=i; i-prior=*last; i-next=NULL; *last=(*last)-next; void ddele

16、te(struct address *start,struct address *last) /*删除函数*/ struct address *info; char s80; inputs(请输入 :,s,10); /*输入欲删除结点的name域容*/ info=find(s); /*查找该容*/ if(info) /*如果找到*/ printf(Deleting.n); if(*start=info) /*如果该结点为首结点,把该结点的下驱作为新的首结点(入口)*/ *start=info-next; if(*start) (*start)-prior=NULL; else *last=NU

17、LL; else /*如果欲删除的结点不是首结点*/ info-prior-next=info-next; /*令该结点的前驱的next指针指向该结点的后驱, *又令该结点的后驱的prior指点指向该结点的前驱*/ if(info!=*last) /*如果该结点是尾结点,则令该结点的前驱为尾结点*/ info-next-prior=info-prior; else *last=info-prior; free(info); /*释放该结点所占用的存*/ printf(-Ok,删除成功!n); struct address *find(char *name) /*查找函数,形参为欲查找结点的na

18、me域*/ struct address *info; info=start; while(info) if(!strcmp(name,info-name)return info; info=info-next; printf(未找到相关信息.n); return NULL; /*输出整个链表*/void list(void) struct address *info; info=start; if(info=NULL) printf(当前记录为空!); else printf(t街道tt城市t国家ttn); while(info) display(info); if(info-next=NU

19、LL)break; info=info-next; ; printf(nn); void display(struct address *info) /*输出传入结点函数*/ printf(%st,info-name); printf(%st,info-street); printf(%st,info-city); printf(%st,info-state); printf(%st,info-tel); printf(n);void search(void) /*查找函数*/ char name40; struct address *info; printf(请输入要查找的:); /*输入欲

20、查找的*/ gets(name); info=find(name); if(!info) printf(不存在n); /*如果没找到,显示Not found*/ else display(info); /*如果找到,显示该结点资料*/void save(void) /*保存函数*/ struct address *info; FILE *fp; fp=fopen(record.txt,wb); /*生成文件*/ if(!fp) printf(Cannot open file.n); return; printf(nSaveing n); info=start; while(info) /*把链

21、表写入文件*/ fwrite(info,sizeof(struct address),1,fp); info=info-next; printf(-ok!n); fclose(fp);/*链表全部写入文件后,关闭文件*/ void load() /*调用预存文件函数*/ register int t, size; struct address *info,*temp=0; char *p; FILE *fp; /*打开文件*/ if(fp=fopen(record.txt,r)=NULL) printf(Cannot open file!n); return; printf(nnLoading

22、.n); /*调用文件*/ size=sizeof(struct address); /*为结点分配存*/ start= (struct address *)malloc(size); if(!start) /*如果读取失败,返回*/ printf(Out of memory!n); exit(0); info=start; p=(char*)info; while(*p+=getc(fp)!=EOF) for(t=0;tnext=(struct address *)malloc(size); if(!info-next) printf(Out of memory!n); return; in

23、fo-prior=temp; temp=info; info=info-next; p=(char*)info; temp-next=0; last=temp; start-prior=0; fclose(fp); printf(-OK!n); 5 总结与展望 通过一星期的数据结构与算法分析课程设计实习,我从中受益匪浅。对数据结构程序设计这一门课程有了更深一步的认识,对一些细节语法有了更新、更深刻的理解,知其然,亦知其所以然。尤其在程序调试过程中,程序的执行过程与语法相联系,尽量独立差错纠错,最后请教老师,对程序的优化设计和调试方法都有了很大的进步。这次课程设计的进步是很大的,我了解到,我们需

24、要将所学的理论知识和实践联系起来,在实践设计中不断进步,不断熟练,光是读透书本知识是不够的。虽然我对一些C语言知识运用得还不是很熟练,但是我相信在接下来的学习过程中,我会有更大的进步,还有很大的空间可以发挥。在这次课程设计中,我做的是课题10,建立27人的通讯录,设计散列表实现通讯录查找系统,并完成相应的建表和查表程序。其中运用了很多方面的知识。如,运用结构体建通讯录,保存信息。构建哈希表,用除留余数法构造哈希函数,采用二次探测再散列法解决冲突,对关键字的折叠处理等等。可以看出,一个简单设计的完成,需要很多方面的知识来共同完成,每方面的知识都要理解透彻,运用熟练,其实我们需要在平日里打好基础。而且,要会用其他算法或其他数据结构来优化算法,这对知识运用的灵活性掌握有很高的要求。所以,通过一次短短的课程设计就可以看出,我们需要学习的还很多,掌握的知识也不够透彻明白。总之,这次课程设计,让我看到很多不足,为我今后的学习指出了新的学习方向,这是我最大的收获参考文献1严蔚敏,吴伟民。数据结构清华大学计算机系列教材。:清华大学,2007 2 锐。零基础学数据结构:机械工业,2010。谭浩强C程序设计(第三版):清华大学,2005 成绩评定成绩 教师签字

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1