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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

数据结构课程设计报告模板参考.docx

1、数据结构课程设计报告模板参考 攀枝花学院数据结构课程设计(论文)题 目:散列表的设计与实现 学生姓名: 刘攀 学 号: * 所在院(系): 数学与计算机学院 专 业: 网络工程 班 级: 二班 指 导 教 师: 蒋斌 职称: 副教授 2017年 6 月 28 日攀枝花学院教务处制附件2: 攀枝花学院本科学生课程设计任务书题目散列表的设计与实现1、课程设计的目的1)使学生进一步理解和掌握课堂上所学各种基本抽象数据类型的逻辑结构、存储结构和操作实现算法,以及它们在程序中的使用方法。2)使学生掌握软件设计的基本内容和设计方法,并培养学生进行规范化软件设计的能力。3) 使学生掌握使用各种计算机资料和有

2、关参考资料,提高学生进行程序设计的基本能力。2、课程设计的内容和要求(包括原始数据、技术要求、工作要求等)【问题描述】设计散列表实现电话号码查找系统。【基本要求】1) 设每个记录有下列数据项:电话号码、用户名、地址;2) 从键盘输入各记录,分别以电话号码和用户名为关键字建立散列表;3) 采用一定的方法解决冲突;4) 查找并显示给定电话号码的记录;5) 查找并显示给定用户名的记录。【进一步完成内容】1) 系统功能的完善;2) 设计不同的散列函数,比较冲突率;3) 在散列函数确定的前提下,尝试各种不同类型处理冲突的方法,考察平均查找长度的变化。3、主要参考文献1刘大有等,数据结构(C语言版),高等

3、教育出版社2严蔚敏等,数据结构(C语言版),清华大学出版社3William Ford,William Topp,Data Structure with C+清华大学出版社4苏仕华等,数据结构课程设计,机械工业出版社4、课程设计工作进度计划1)分析题目,查阅相关资料:1天;2)算法设计、数据结构设计:1天3)编写代码并调试:1天4)完成课程设计报告:2天指导教师(签字)日期年 月 日教研室意见:年 月 日学生(签字): 接受任务时间: 年 月 日注:任务书由指导教师填写。附件3: 课程设计(论文)指导教师成绩评定表题目名称评分项目分值得分评价内涵工作表现20%01学习态度6遵守各项纪律,工作刻苦

4、努力,具有良好的科学工作态度。02科学实践、调研7通过实验、试验、查阅文献、深入生产实践等渠道获取与课程设计有关的材料。03课题工作量7按期圆满完成规定的任务,工作量饱满。能力水平35%04综合运用知识的能力10能运用所学知识和技能去发现与解决实际问题,能正确处理实验数据,能对课题进行理论分析,得出有价值的结论。05应用文献的能力5能独立查阅相关文献和从事其他调研;能提出并较好地论述课题的实施方案;有收集、加工各种信息及获取新知识的能力。06设计(实验)能力,方案的设计能力5能正确设计实验方案,独立进行装置安装、调试、操作等实验工作,数据正确、可靠;研究思路清晰、完整。07计算及计算机应用能力

5、5具有较强的数据运算与处理能力;能运用计算机进行资料搜集、加工、处理和辅助设计等。08对计算或实验结果的分析能力(综合分析能力、技术经济分析能力)10具有较强的数据收集、分析、处理、综合的能力。成果质量45%09插图(或图纸)质量、篇幅、设计(论文)规范化程度5符合本专业相关规范或规定要求;规范化符合本文件第五条要求。10设计说明书(论文)质量30综述简练完整,有见解;立论正确,论述充分,结论严谨合理;实验正确,分析处理科学。11创新10对前人工作有改进或突破,或有独特见解。成绩指导教师评语指导教师签名: 年月日摘 要信息社会的高科技,商品经济化的高效益,使计算机的应用已普及到经济和社会生活的

6、各个领域。计算机虽然与人类的关系愈来愈密切,还有人由于计算机操作不方便继续用手工劳动。散列表的设计与实现所涉及到的操作算法都是以链表或顺序表的基本运算作为基础的,此程序通过通讯录实现,包括建立通讯录,添加记录,查询记录,删除记录,显示记录,修改记录。通过顺序表存储结构实现数据的输入,实现各子程序过程的演示,对异常输入信息报错。 关键字:新建通讯录,散列表,散列函数,处理冲突1 课程设计的目的和意义 数据结构主要介绍一些最常用的数据结构,阐明各种数据结构内在的逻辑关系,讨论其在计算机中的存储表示,以及在其上进行各种运算时的实现算法,并对算法的效率进行简单的分析和讨论。数据结构是介于数学、计算机软

7、件和计算机硬件之间的一门计算机专业的核心课程,它是计算机程序设计、数据库、操作系统、编译原理及人工智能等的重要基础,广泛的应用于信息学、系统工程等各种领域。学习数据结构是为了将实际问题中所涉及的对象在计算机中表示出来并对它们进行处理。通过课程设计可以提高学生的思维能力,促进学生的综合应用能力和专业素质的提高。通过此次课程设计主要达到以下目的:(1)了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力;(2)初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;(3)提高综合运用所学的理论知识和方法独立分析和解决问题的能力;(4)训练用系统的观点和软件开发一般规范

8、进行软件开发,培养软件工作者所应具备的科学的工作方法和作风。(5)锻炼动手操作能力,培养我们的创新思维能力。从编写代码,到调试程序,再到运行程序,这是设计的最重要环节,它需要我们用逻辑思维将我们所学知识和实际相结合,并在对方案的分析过程中能够有所创新,从而使运行方案更严谨更简洁。培养好良好的思维,便要将这种思维赋予实践,即动手操作能力。目前,市场上关于计算机运用、计算机软件和电子类相关专业的人才辈出,但毕业生在走进企业公司政府机构或研究单位之后,感觉到缺乏实际开发设计项目的经验,所以我们在课程设计中能够多训练,提高我们将知识融会贯通的能力(6)培养我们严谨治学的态度,以及认清自己学知识、运用知

9、识的能力。不管是编写代码,调试代码,还是运行代码,需要我们严谨的思维和态度去对待,这样才能真正起到此设计的作用。我们也能够在设计中认识到自己对数据结构这门课程学习的欠缺,对以后我们的学习有着很大的指导和帮助。学习课程设计,编写程序,将数据结构和算法相结合,了解到数据结构、算法和程序之间的关系,更学习到数据结构和算法的最佳定位2 需求分析2.1 需求概述 在各个领域,不同的通讯录其功能都是为用户储存信息,查找信息提供方便的有效工具。一个内容全面、功能先进的通讯录对每个用户来说是一个理想的助手。现在,我们通过对散列表和基本操作的学习和理解,以及在掌握线性表等基本运算的基础上,实现对线性表操作。这里

10、我们所做的通讯录则是在数据结构学习之后,利用计算机c程序语言编写的,可以实现数据的新建通讯录,添加记录,查询记录,修改记录,删除记录,显示记录功能的可执行程序。通过它可以进行对联系对象的姓名、地址、电话号码等的记录与查找。当然,该程序设计也有不足之处,我们一定会不断地努力去更正完善。很多涉及通讯录的操作的算法都是以顺序表操作为基础,通过顺序表的建立,初始化,结点添加、查询与删除的演示,方便在学习中更好的理解顺序表结点的添加、查询、删除的过程2.2 需求环境本课程设计需要的设备为硬件要求和软件配置要求具体要求如下:硬件要求:一台计算机。软件配置:WINDOWS、C/VC+6.0。2.3 功能描述

11、 本次课题是的散列表设计与实现。主要是通过C+语言和数据结构算法实现,主要有以下功能:1.每个记录需要有存储的数据:姓名、电话、地址;2.从键盘输入各记录,分别以电话号码和用户名为关键字建立散列表;3.采用一定的方法解决冲突;4.查找并显示给定电话号码的记录;5.查找并显示给定用户名的记录。3 整体设计(方案设计)3.1 系统功能设计定义电话本记录数量(MAXSIZE)、表长(HASHSIZE)、姓名长度(MAX_SIZE)以及结构体typedef struct的内容,构造两个哈希函数hash1和hash2。功能示意图:3.2 处理功能设计增加系统功能如下: 添加用户信息; 读取所有用户信息;

12、 以姓名建立哈希表;以电话号码建立哈希表; 查找并显示给定用户名的记录; 查找并显示给定电话号码的记录; 清屏以及保存功能;处理流程示意图:3.3 主要模块键盘输入各人的信息:void getin();显示输入的用户信息:void ShowInformation() ;除留余数法构造哈希函数:int Hash1();构造把字符串转换成整型数哈希函数:int Hash2();冲突处理函数:Status collision();以姓名为关键字建表:void CreateHash1();以姓名为关键字查表:void SearchHash1();以电话号码为关键字建表:void CreateHash2

13、();以电话号码为关键字查表:void SearchHash2();输出菜单函数:int main()。3.4 算法模块设计3.4.1 哈希算法输入待查找的值即key,即可查找到其对应的值即可。int Hash1(NA str) long n;int m;n=fold(str); m=n%HASHSIZE; return m; int Hash2(NA str) long n;int m;n = atoi(str);.m=n%HASHSIZE; return m; 3.5 二次探测再散列冲突发生时,使用某种探查(亦称探测)技术在散列表中形成一个探查(测)序列。沿此序列逐个单元地查找,直到找到给

14、定的关键字,或者碰到一个开放的地址(即该地址单元为空)为止(若要插入,在探查到开放的地址,则可将待插入的新结点存人该地址单元)。查找时探查到开放的地址则表明表中无待查的关键字,即查找失败。int i,q;i=c/2+1;while(i=0) return q; else i=c/2+1; else q=(p-i*i)%HASHSIZE; c+; if(q=0) return q; else i=c/2+1;4 程序结构及源代码说明4.1程序结构说明4.1.1 哈希函数将用户名折叠处理,折叠处理后的数,用除留余数法构造哈希函数。建立,代码如下:int Hash1(NA str) long n;i

15、nt m;n=fold(str); m=n%HASHSIZE; return m; int Hash2(NA str) long n;int m;n = atoi(str);.m=n%HASHSIZE; return m; 4.1.2 冲突处理函数建立冲突处理函数,采用二次探测再散列法解决冲突,代码如下:tatus collision(int p,int &c) int i,q;i=c/2+1;while(i=0) return q; else i=c/2+1; else q=(p-i*i)%HASHSIZE; c+; if(q=0) return q; else i=c/2+1; retur

16、n UNSUCCESS;4.2程序源码及说明#include#include#include#include#include #define MAXSIZE 20 /电话薄记录数量 #define MAX_SIZE 20 /人名的最大长度#define HASHSIZE 53 /定义表长 #define SUCCESS 1#define UNSUCCESS -1#define LEN sizeof(HashTable)typedef int Status;typedef char NAMAX_SIZE;typedef struct/记录NA name;NA tel;NA add;Record;

17、typedef struct/哈希表Record *elemHASHSIZE; /数据元素存储基址int count; /当前数据元素个数int size; /当前容量HashTable;Status eq(NA x,NA y)/关键字比较,相等返回SUCCESS;否则返回UNSUCCESSif(strcmp(x,y)=0) return SUCCESS;else return UNSUCCESS;Status NUM_BER; /记录的个数void getin(Record* a)/键盘输入各人的信息coutNUM_BER;int i; for(i=0;iNUM_BER;i+) cout请输

18、入第i+1ai.name; cout请输入第i+1ai.tel; cout请输入第i+1ai.add; /gets(str2);void ShowInformation(Record* a)/显示输入的用户信息 int i;for( i=0;iNUM_BER;i+) coutn第i+1个用户信息:n 姓 名:ai.namen 电话号码:ai.teln 联系地址:ai.addn; void Cls(Record* a)cout*; system(cls);long fold(NA s)/人名的折叠处理char *p;long sum=0;NA ss;strcpy(ss,s);/复制字符串,不改变

19、原字符串的大小写strupr(ss);/将字符串ss转换为大写形式p=ss;while(*p!=0) sum+=*p+; coutnsum=sum; return sum;int Hash1(NA str)/哈希函数long n;int m;n=fold(str);/先将用户名进行折叠处理m=n%HASHSIZE; /折叠处理后的数,用除留余数法构造哈希函数return m; /并返回模值int Hash2(NA str)/哈希函数long n;int m;n = atoi(str);/把字符串转换成整型数.m=n%HASHSIZE; /用除留余数法构造哈希函数return m; /并返回模值

20、Status collision(int p,int &c)/冲突处理函数,采用二次探测再散列法解决冲突int i,q;i=c/2+1;while(i=0) return q; else i=c/2+1; else q=(p-i*i)%HASHSIZE; c+; if(q=0) return q; else i=c/2+1; return UNSUCCESS;void benGetTime();void CreateHash1(HashTable* H,Record* a)/建表,以人的姓名为关键字,建立相应的散列表benGetTime();int i,p=-1,c,pp; for(i=0;i

21、elempp!=NULL) pp=collision(p,c); if(pp0) cout第i+1elempp=&(ai); /求得哈希地址,将信息存入 H-count+; cout第i+1个记录冲突次数为c.n;/需要显示冲突次数时输出coutn建表完成!n此哈希表容量为HASHSIZE,当前表内存储的记录个数为count.n;benGetTime();void SearchHash1(HashTable* H,int &c)/在通讯录里查找姓名关键字,若查找成功,显示信息benGetTime();NA str;coutstr;int p,pp;p=Hash1(str);pp=p;while

22、(H-elempp!=NULL)&(eq(str,H-elempp-name)=-1) pp=collision(p,c);if(H-elempp!=NULL&eq(str,H-elempp-name)=1) coutn查找成功!n查找过程冲突次数为c以下是您需要要查找的信息:nn; cout姓 名:elempp-namen电话号码:elempp-teln联系地址:elempp-addn;else coutn此人不存在,查找不成功!n;benGetTime();void benGetTime()SYSTEMTIME sys; GetLocalTime( &sys ); coutsys.wYea

23、rsys.wMonthsys.wDaysys.wHoursys.wMinutesys.wSecondsys.wMilliseconds; void CreateHash2(HashTable* H,Record* a)/建表,以电话号码为关键字, benGetTime();int i,p=-1,c,pp; for(i=0;ielempp!=NULL) pp=collision(p,c); if(pp0) cout第i+1elempp=&(ai); /求得哈希地址,将信息存入 H-count+; cout第i+1个记录冲突次数为c。n;/需要显示冲突次数时输出coutn建表完成!n此哈希表容量为

24、HASHSIZE,当前表内存储的记录个数为count.n;benGetTime();void SearchHash2(HashTable* H,int &c)/在通讯录里查找电话号码关键字,若查找成功,显示信息benGetTime();NA tele;couttele;int p,pp;p=Hash2(tele);pp=p;while(H-elempp!=NULL)&(eq(tele,H-elempp-tel)=-1) pp=collision(p,c);if(H-elempp!=NULL&eq(tele,H-elempp-tel)=1) coutn查找成功!n查找过程冲突次数为c以下是您需要

25、要查找的信息:nn; cout姓 名:elempp-namen电话号码:elempp-teln联系地址:elempp-addn;else coutn此人不存在,查找不成功!n;benGetTime();void Save()FILE *fp;if(fp=fopen(c:test.txt, w)=NULL) printf(nERROR opening customet file);fclose(fp); int main(int argc, char* argv)int c,flag=1;HashTable *H;H=(HashTable*)malloc(LEN);for(int i=0;ielemi=NULL; H-size=HASHSIZE; H-count=0;Record aMAXSIZE;while (1) coutn ; coutn 欢迎使用电话号码查找系统 ; coutn ; coutn 哈希表的设计与实现 ; coutn 【1】. 添加用户信息 ; coutn 【2】. 读取所有用户信息 ; coutn 【3】. 以姓名建立哈希表(再哈希法解决冲突) ; coutn 【4

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

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