1、 课程设计 1 课课 程程 设设 计计 姓名: 学号: 专业: 嵌入式软件人才培养 课程: 数据结构 指导老师: 设计题目: 哈希表设计 计算机科学与技术学院 2014 年 1 月 27 日 课程设计 2 目录 1、 题目要求3 2、 详细设计3 2.1 程序设计概要流程图3 2.2 主函数设计3 2.3 头文件 Hash5 2.4 头文件 LinkList7 2.5 头文件 Date9 3、 问题与解决方案10 4、 心得体会11 5、 测试结果11 课程设计 3 1、题目要求、题目要求 问题描述:针对自己的班集体中的“人名”设计一个哈希表,完成相应的建表和查表程 序。 基本要求 1、 人名
2、为中国姓名的汉语拼音形式 2、 待填入哈希表的人名不低于 30 个 3、 用链表法处理冲突 4、 完成任意人名的查找并给出查找长度 2、详细设计、详细设计 1、程序设计、程序设计概要流程图概要流程图 2、主函数设计主函数设计 主函数中主要提供用户在登录后的操作选择要求并在相应的函数内调用调用头文 件中的相应函数,在用户选择时使用 Switch-Case 语句,根据用户做出的相应选择 跳转到相应数字对应的操作,并执行此操作,执行完毕后,跳出循环,对于输入 错误的情况,用 default 语句给出相应提示。在每一个操作执行完成后,会给出是 否继续执行该操作的提示,若不继续退出操作回到主菜单或退出程
3、序,若继续, 课程设计 4 则再次调用该函数继续执行。 #include #include #include“hash.h“ #include“LinkList.h“ #include“Date.h“ using namespace std; char name30; Date p; Hash h; void choose(); void show() coutname; p=name; h.HSave(p); coutname; p=name; h.HSearch(p); coutt; switch(t) case 1: coutnext=NULL; int LinkList:LSearch
4、(Date ary) int length=1; Node *p; p=first-next; while(p!=NULL) if(p-date=ary)return length; p=p-next; length+; return 0; bool LinkList:Check(Date ary) Node *p; p=first-next; while(p!=NULL) if(p-date=ary)return true; p=p-next; return false; bool LinkList:LSave(Date ary) if(Check(ary)=false) Node *s;
5、s=new Node; s-date=ary; s-next=first-next; first-next=s; return true; else cout的方法,但是 在进行数据录入时发现必须输入满设定的 30 个字符才能继续下面的操作,后来选 课程设计 11 用了输入时数据类型为 char 数组,重载赋值运算符=,将数组中元素一次赋值给 Date 数据,最终完成对数据的录入。 3、 问题:问题:在用户界面的设计中使用 switch 语句让用户对相应操作进行选择,但在调试 时候发现用户先选择了存储姓名,再去查找姓名时查找空间为空,查不出数据。 解决方案:解决方案:设置全局变量,如此便可无论
6、存储时有何变化都可在查找时找出来。 4、 问题:问题:在 Date 类型的数据进行是否相等的比较时,输入相同的汉语拼音姓名时并不 总是能够准确的判断出数据是否相等。 解决方案:解决方案:在保证数组在 0i-1 位上的数据相等的同时保证两次输入的数据第 i 位 上都为 0 才能真正保证数据不仅对应位上的数值相等且长度相等。 4、心得体会、心得体会 1、在着手编代码前须得先理清楚所要编写代码的先后顺序,在编代码之初我只按照题 目要求编写查找代码,在查找代码编的差不多时才想到要编写输入代码,这样就会将原有 的思绪打乱,致使效率低下。 2、在遇到问题是需结合程序给出的提示一一解决,若无法解决就用单步调试法逐行逐 过程调试,此过程有时很繁琐所以需要极大的耐心和细心,但这样的错误如果被找出来也