哈希表制作通讯录数据结构程序设计

  • 格式:doc
  • 大小:317.50 KB
  • 文档页数:22

下载文档原格式

  / 22
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

哈希表制作通讯录-数据结构程序设计

————————————————————————————————作者:————————————————————————————————日期:

软件学院

课程设计报告书

课程名称数据结构

设计题目哈希表制作通讯录

专业班级

学号

姓名

指导教师

2014年 1月

目录

1 设计时间 (1)

2 设计目的 (1)

3设计任务 (1)

4 设计内容 (1)

4.1需求分析 (1)

4.11程序所能达到的功能 (1)

4.12输入的形式和输入的范围 (1)

4.2总体设计 (1)

4.21说明本程序中用到的所有抽象数据类型的定义 (1)

4.22说明主程序的流程 (2)

4.23说明各程序模块之间的层次(调用)关系 (3)

4.3详细设计 (3)

4.31实现概要设计中定义的所有数据类型,对每个操作只需

要写出伪码算法 (3)

4.32对主程序和其它主要函数写出伪码算法 (4)

4.4测试 (5)

4.5 附录 (6)

5 总结与展望 (16)

参考文献 (18)

成绩评定 (18)

1 设计时间

2014年1月13日到2014年1月15号

2 设计目的

要求学生掌握数据结构的应用、算法的编写、类C语言的算法转换成C程序并上机调试的基本方法。这对于学生基本程序设计素养的培养和软件工作者工作作风的训练,将起到显著的促进作用。

3设计任务

针对你所在班集体中的“人名”,设计一个哈希表,使得平均查找长度不超过R,完成相应的建表和查找过程。

4 设计内容

(1)每个人的信息至少包括姓名,电话,地址。至少包括对通讯录的创建,添加和按姓名查找等功能。

(2)假设人名为汉语拼音全拼形式,待插入哈希表的长度为你所在班级的人数。哈希函数用除留余数法构造,采用链地址法或二次探测再散列法解决冲突。

(3)完成菜单设计。操作有必要的提示。

4.1需求分析

4.11程序所能达到的功能

以人命的汉语拼音全拼形式查找你所在班级的人的信息(姓名,电话,地址)

4.12输入的形式和输入的范围

把人名都到转换成汉语拼音全拼的形式,人命最大长度不超过20个字符

4.2总体设计

4.21说明本程序中用到的所有抽象数据类型的定义

该程序采用的是结构体类型来处理学生的所有基本信息,如下所述。

typedef struct{ /*用结构体类型来处理学生的所有基本信息*/

NA name; /*NA 为typedef 定义的字符数组类型*/

}Record;

typedef struct { /*哈希表*/

Record *elem[HASHSIZE]; //数据元素存储基址

int count; //当前存储的数据元素个数 int size; //当前容量,即表长

}HashTable;

4.22说明主程序的流程

4.23说明各程序模块之间的层次(调用)关系

main menu_select ent

ddel

li

sea

sav

loa

ex

in

f dis 文件

函数之间的相互调

各函数模块之间的调用关系主要是主函数调用主要功能函数,即:输入与保存函数、哈希表建立函数、查找信息函数,主要功能函数也会调用一些基本功能函数完成相应功能,如:CreateHash()会调用Hash()来求哈希地址,而Hash()会调用fold()对关键字先进行折叠处理,当地址冲突时,Hash()又会调用collision()解决冲突;SearchHash()也会调用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;

case 4:search();

continue;

case 5:save();

continue;

case 6:load();

continue;

case 7:exit(0);

}

}

}

int menu_select(void) /*主目录*/

{

char s[80];

int c;

printf("………………^欢迎使用DOS通讯录系统^………………\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(c<0||c>7);

return c; /*返回输入值*/

}

4.32对主程序和其它主要函数写出伪码算法

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->name[0])break; /*如果输入姓名为空,结束循环*/

inputs("请输入街道:",info->street,50);

inputs("请输入城市:",info->city,15);

inputs("请输入国家:",info->state,15);

inputs("请输入电话:",info->tel,7);

insert(info,&start,&last); /*调用结点插入函数*/ }