哈希表制作通讯录数据结构程序设计Word文件下载.docx

上传人:b****3 文档编号:6221329 上传时间:2023-05-06 格式:DOCX 页数:20 大小:19.87KB
下载 相关 举报
哈希表制作通讯录数据结构程序设计Word文件下载.docx_第1页
第1页 / 共20页
哈希表制作通讯录数据结构程序设计Word文件下载.docx_第2页
第2页 / 共20页
哈希表制作通讯录数据结构程序设计Word文件下载.docx_第3页
第3页 / 共20页
哈希表制作通讯录数据结构程序设计Word文件下载.docx_第4页
第4页 / 共20页
哈希表制作通讯录数据结构程序设计Word文件下载.docx_第5页
第5页 / 共20页
哈希表制作通讯录数据结构程序设计Word文件下载.docx_第6页
第6页 / 共20页
哈希表制作通讯录数据结构程序设计Word文件下载.docx_第7页
第7页 / 共20页
哈希表制作通讯录数据结构程序设计Word文件下载.docx_第8页
第8页 / 共20页
哈希表制作通讯录数据结构程序设计Word文件下载.docx_第9页
第9页 / 共20页
哈希表制作通讯录数据结构程序设计Word文件下载.docx_第10页
第10页 / 共20页
哈希表制作通讯录数据结构程序设计Word文件下载.docx_第11页
第11页 / 共20页
哈希表制作通讯录数据结构程序设计Word文件下载.docx_第12页
第12页 / 共20页
哈希表制作通讯录数据结构程序设计Word文件下载.docx_第13页
第13页 / 共20页
哈希表制作通讯录数据结构程序设计Word文件下载.docx_第14页
第14页 / 共20页
哈希表制作通讯录数据结构程序设计Word文件下载.docx_第15页
第15页 / 共20页
哈希表制作通讯录数据结构程序设计Word文件下载.docx_第16页
第16页 / 共20页
哈希表制作通讯录数据结构程序设计Word文件下载.docx_第17页
第17页 / 共20页
哈希表制作通讯录数据结构程序设计Word文件下载.docx_第18页
第18页 / 共20页
哈希表制作通讯录数据结构程序设计Word文件下载.docx_第19页
第19页 / 共20页
哈希表制作通讯录数据结构程序设计Word文件下载.docx_第20页
第20页 / 共20页
亲,该文档总共20页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

哈希表制作通讯录数据结构程序设计Word文件下载.docx

《哈希表制作通讯录数据结构程序设计Word文件下载.docx》由会员分享,可在线阅读,更多相关《哈希表制作通讯录数据结构程序设计Word文件下载.docx(20页珍藏版)》请在冰点文库上搜索。

哈希表制作通讯录数据结构程序设计Word文件下载.docx

(1)每个人的信息至少包括姓名,电话,地址。

至少包括对通讯录的创建,添加和按姓名

查找等功能。

(2)假设人名为汉语拼音全拼形式,待插入哈希表的长度为你所在班级的人数。

哈希函数

用除留余数法构造,采用链地址法或二次探测再散列法解决冲突。

(3)完成菜单设计。

操作有必要的提示。

4.1需求分析

4.11程序所能达到的功能

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

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

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

4.2总体设计

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

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

1

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

NAname;

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

}Record;

typedefstruct{/*哈希表*/

Record*elem[HASHSIZE];

//数据元素存储基址

intcount;

//当前存储的数据元素个数

intsize;

//当前容量,即表长

}HashTable;

4.22说明主程序的流程

inputsenter

insert

ddelete

menu_select

find

listdisplay

search

main

save

load

exit

函数之间的相互调用

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

2

各函数模块之间的调用关系主要是主函数调用主要功能函数,即:

输入与保存函数、哈希

表建立函数、查找信息函数,主要功能函数也会调用一些基本功能函数完成相应功能,如:

CreateHash()会调用Hash()来求哈希地址,而Hash()会调用fold()对关键字先进行折叠处理,

当地址冲突时,Hash()又会调用collision()解决冲突;

SearchHash)(也会调用Hash()、fold()、

collision()以及eq()。

并且主函数利用while循环使各个功能函数运行完毕后都会回到菜单,询

问是否继续进行操作。

4.3详细设计

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

voidmain()

{

start=last=NULL;

for(;

;

)/*无限循环*/

switch(menu_select())/*调用主界面的选择函数,带回返回值*/

case1:

enter();

continue;

case2:

ddelete(&

start,&

last);

case3:

list();

case4:

search();

case5:

save();

case6:

load();

case7:

exit(0);

}

intmenu_select(void)/*主目录*/

chars[80];

intc;

printf("

,,,,,^欢迎使用DOS通讯录系统^,,,,,,\n"

);

************请在做其它操作前先导入*************\n"

3

***********************************************\n"

*****************1.输入信息******************\n"

*****************2.删除信息******************\n"

*****************3.显示信息******************\n"

*****************4.查找******************\n"

*****************5.存盘******************\n"

*****************6.导入******************\n"

*****************7.退出******************\n"

do{

\nPleaseenteryourchoice:

\n"

gets(s);

c=atoi(s);

/*将获取的字符串转换成整型*/

}while(c<

0||c>

7);

returnc;

/*返回输入值*/

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

structaddress*info;

/*定义当前结点*/

info=(structaddress*)malloc(sizeof(structaddress));

/*为当前结点分配

空间*/

if(!

info)

\nOutofmemory"

/*如果分配空间

失败,退出程序*/

输入空姓名结束:

inputs("

请输入姓名:

"

info->

name,10);

info->

name[0])break;

/*如果输入姓名为

空,结束循环*/

请输入街道:

street,50);

请输入城市:

city,15);

请输入国家:

state,15);

请输入电话:

tel,7);

insert(info,&

/*调用结点插入函数*/

4

4.4测试

图4-1程序运行图

图4-2输入信息图

5

图4-3显示信息

4.5附录

#include<

stdio.h>

stdlib.h>

string.h>

structaddress{/*定义结构*/

charname[10];

charstreet[50];

charcity[10];

charstate[15];

chartel[7];

structaddress*next;

/*后继指针*/

structaddress*prior;

/*前驱指针*/

};

6

structaddress*start;

/*首结点*/

structaddress*last;

/*尾结点*/

structaddress*find(char*);

/*声明查找函数*/

voidenter();

/*函数声明*/

voidsearch();

voidsave();

voidload();

voidlist();

voidddelete(structaddress**start,structaddress**last);

voidinsert(structaddress*i,structaddress**start,

structaddress**last);

voidinputs(char*,char*,int);

voiddisplay(structaddress*);

intmenu_select(void);

switch(menu_select())

7

⋯⋯⋯⋯⋯⋯欢^迎使用DOS通讯录系统^⋯⋯⋯⋯⋯⋯\n"

8

voidenter()/*输入函数,本函数循环输入资料,当输入姓名为空

时退出*/

/*为当前结点分配空间*/

/*如果分配空间失

败,退出程序*/

name[0])

break;

/*如果输入姓名为空,结束循环*/

9

voidinputs(char*prompt,char*s,intcount)/*输入函数,有越界检测功能*/

charp[255];

do

printf(prompt);

fgets(p,254,stdin);

if(strlen(p)>

count)

\nTooLong\n"

}while(strlen(p)>

count);

p[strlen(p)-1]=0;

strcpy(s,p);

voidinsert(/*数据插入函数*/

structaddress*i,

structaddress**start,

structaddress**last

if(*last==NULL)/*如果尾结点为空,意味着当前链表为空*/

10

i->

next=NULL;

prior=NULL;

*last=i;

*start=i;

return;

else

(*last)->

next=i;

prior=*last;

*last=(*last)->

next;

voidddelete(structaddress**start,structaddress**last)/*删除函数*/

s,10);

/*输入欲删除结点的name域内容*/

info=find(s);

/*查找该内容*/

if(info)/*如果找到*/

Deleting......\n"

if(*start==info)/*如果该结点为首结点,把该结点的下驱作为

11

新的首结点(入口)*/

*start=info->

if(*start)

(*start)->

else*last=NULL;

else/*如果欲删除的结点不是首结点*/

prior->

next=info->

/*令该结点的前驱的next指针指向该结点的

后驱,

*又令该结点的后驱的prior指点指向该结点

的前驱*/

if(info!

=*last)/*如果该结点是尾结点,则令该结点的前驱

为尾结点*/

next->

prior=info->

prior;

*last=info->

free(info);

/*释放该结点所占用的内存*/

-Ok,删除成功!

structaddress*find(char*name)/*查找函数,形参为欲查找结点的name域*/

info=start;

while(info)

12

strcmp(name,info->

name))returninfo;

info=info->

未找到相关信息.\n"

returnNULL;

/*输出整个链表*/

voidlist(void)

if(info==NULL)

当前记录为空!

elseprintf("

姓名\t街道\t\t城市\t国家\t电话\t\n"

display(info);

if(info->

next==NULL){break;

}info=info->

\n\n"

voiddisplay(structaddress*info)/*输出传入结点函数*/

%s\t"

name);

street);

city);

13

state);

tel);

voidsearch(void)/*查找函数*/

charname[40];

请输入要查找的姓名:

/*输入欲查找的姓名*/

gets(name);

info=find(name);

姓名不存在\n"

/*如果没找到,显示Notfound*/

/*如果找到,显示该结点资料*/

voidsave(void)/*保存函数*/

FILE*fp;

fp=fopen("

record.txt"

"

wb"

/*生成文件*/

fp)

Cannotopenfile.\n"

nSaveing⋯⋯\n"

14

while(info)/*把链表写入文件*/

fwrite(info,sizeof(structaddress),1,fp);

-ok!

fclose(fp);

/*链表全部写入文件后,关闭文件*/

voidload()/*调用预存文件函数*/

registerintt,size;

structaddress*info,*temp=0;

char*p;

/*打开文件*/

if((fp=fopen("

r"

))==NULL)

Cannotopenfile!

\n\nLoading...\n"

/*调用文件*/

size=sizeof(structaddress);

/*为结点分配内存*/

start=(structaddress*)malloc(size);

start)/*如果读取失败,返回*/

Outofmemory!

15

p=(char*)info;

while((*p++=getc(fp))!

=EOF)

for(t=0;

t<

size-1;

++t)

*p++=getc(fp);

next=(structaddress*)malloc(size);

next)

prior=temp;

temp=info;

temp->

next=0;

last=temp;

start->

prior=0;

-OK!

5总结与展望

通过一星期的数据结构与算法分析课程设计实习,我从中受益匪浅。

对数据结构程序设

计这一门课程有了更深一步的认识,对一些细节语法有了更新、更深刻的理解,知其然,亦知

其所以然。

尤其在程序调试过程中,程序的执行过程与语法相联系,尽量独立差错纠错,最后

16

请教老师,对程序的优化设计和调试方法都有了很大的进步。

这次课程设计的进步是很大的,

我了解到,我们需要将所学的理论知识和实践联系起来,在实践设计中不断进步,不断熟练,

光是读透书本知识是不够的。

虽然我对一些C语言知识运用得还不是很熟练,但是我相信在接

下来的学习过程中,我会有更大的进步,还有很大的空间可以发挥。

在这次课程设计中,我做的是课题10,建立27人的通讯录,设计散列表实现通讯录查找系统,

并完成相应的建表和查表程序。

其中运用了很多方面的知识。

如,运用结构体建通讯录,保存

信息。

构建哈希表,用除留余数法构造哈希函数,采用二次探测再散列法解决冲突,对关键字

的折叠处理等等。

可以看出,一个简单设计的完成,需要很多方面的知识来共同完成,每方面

的知识都要理解透彻,运用熟练,其实我们需要在平日里打好基础。

而且,要会用其他算法或

其他数据结构来优化算法,这对知识运用的灵活性掌握有很高的要求。

所以,通过一次短短的

课程设计就可以看出,我们需要学习的还很多,掌握的知识也不够透彻明白。

总之,这次课程

设计,让我看到很多不足,为我今后的学习指出了新的学习方向,这是我最大的收获

参考文献

17

[1]严蔚敏,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2