散列表的设计与实现数据结构课程设计报告.docx
- 文档编号:9333271
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:11
- 大小:15.87KB
散列表的设计与实现数据结构课程设计报告.docx
《散列表的设计与实现数据结构课程设计报告.docx》由会员分享,可在线阅读,更多相关《散列表的设计与实现数据结构课程设计报告.docx(11页珍藏版)》请在冰豆网上搜索。
散列表的设计与实现数据结构课程设计报告
散列表的设计与实现-数据结构课程设计报告
a)需求分析:
1)需要存储的数据:
姓名,地址,电话。
2)需要实现的功能:
1(功能性菜单。
2(添加通讯录信息,添加姓名、地址、电话。
3(查询通讯录,分别可以按姓名和按电话查询。
4(姓名散列。
5(电话散列。
6(存储通讯录。
7(清空通讯录。
b)概要设计:
菜单:
这部分用switch分支语句实现,具体的,输入0实现添加记录功能,
输入1实现查找记录功能,输入2实现姓名散列,输入3实现号码散列,输入4
实现清空记录,输入5实现保存记录,输入6实现退出系统。
Haxi()存储电话号码。
Haxi2()存储姓名。
input()输入节点。
addnode()添加节点。
create()新建节点。
create2()新建节点。
list()显示列表。
list2()显示列表。
find()查找用户信息。
find()查找用户信息。
save()保存用户信息。
c)详细设计:
#include"stdio.h"
#include"string.h"
#include"fstream.h"#include"iostream.h"#defineNULL0
unsignedintkey;
unsignedintkey2;
int*p;
structnode
{
charname[8];
charaddress[20];
charnum[11];
node*next;};
typedefnode*namenode;typedefnode*phonenode;node**phone;
node**nam;
voidhaxi(charnum[11]){
inti=3;
key=(int)num[2];
while(num[i]!
=NULL)
{
key+=(int)num[i];
i++;
}
key=key%20;}
voidhaxi2(charname[8])
{
inti=1;
key2=(int)name[0];
while(name[i]!
=NULL)
{
key2+=(int)name[i];
i++;
}
key2=key2%20;
}
node*input()
{
node*temp;
temp=newnode;
temp->next=NULL;
printf("输入姓名:
\n");
scanf("%s",temp->name);
printf("输入地址:
\n");
scanf("%s",temp->address);
printf("输入电话:
\n");
scanf("%s",temp->num);
returntemp;
}
intaddnode()
{
node*newphone;
node*newname;
newphone=input();
newname=newphone;
newphone->next=NULL;
newname->next=NULL;
haxi(newphone->num);
haxi(newname->name);
newphone->next=phone[key]->next;
phone[key]->next=newphone;
newname->next=nam[key2]->next;
nam[key2]->next=newname;
return0;
}
voidcreate()
{
inti;
phone=newphonenode[20];
for(i=0;i<20;i++)
{
phone[i]=newnode;
phone[i]->next=NULL;
}
}
voidcreate2(){
inti;
nam=newnamenode[20];
for(i=0;i<20;i++)
{
nam[i]=newnode;
nam[i]->next=NULL;
}
}
voidlist()
{
inti;
node*p;
for(i=0;i<20;i++)
{
p=phone[i]->next;
while(p)
{
printf("%s%s%s\n",p->name,p->address,p->num);
p=p->next;
}
}
}
voidlist2(){
inti;
node*p;
for(i=0;i<20;i++)
{
p=nam[i]->next;
while(p)
{
printf("%s%s%s\n",p->name,p->address,p->num);
p=p->next;
}
}
}
voidfind(charnum[11]){
haxi(num);
node*q=phone[key]->next;
while(q!
=NULL)
{
if(strcmp(num,q->num)==0)
break;
q=q->next;
}
if(q)
printf("%s%s%s\n",q->name,q->address,q->num);
elseprintf("无此记录\n");
}
voidfind2(charname[8]){
haxi(name);
node*q=nam[key2]->next;
while(q!
=NULL)
{
if(strcmp(name,q->name)==0)
break;
q=q->next;
}
if(q)
printf("%s%s%s\n",q->name,q->address,q->num);
elseprintf("无此记录\n");
}
voidsave(){
inti;
node*p;
for(i=0;i<20;i++)
{
p=phone[i]->next;
while(p)
{
fstreamiiout("out.txt",ios:
:
out);
iiout< p=p->next; } } } voidmenu(){ printf("*************************通讯录查询系统***************************\n"); printf("*0.添加记录*\n"); printf("*1.查找记录*\n"); printf("*2.姓名散列*\n"); printf("*3.号码散列*\n"); printf("*4.清空记录*\n"); printf("*5.保存记录*\n"); printf("*6.退出系统*\n"); printf("******************************************************************\n");} intmain() { charnum[11]; charname[8]; create(); create2(); intselect; while (1) { menu(); scanf("%d",&select); if(select==0) { printf("请输入要添加的内容: \n"); addnode(); } if(select==1) { printf("1.号码查询\n2.姓名查询\n"); intb; scanf("%d",&b); if(b==1) { printf("请输入电话号码: \n"); scanf("%s",num); printf("输出查找的信息: \n"); find(num); } else { if(b==2) { printf("请输入姓名: \n"); scanf("%s",name); printf("输出查找的信息: \n"); find2(name); } else printf("输入错误~\n"); } } if(select==2) { printf("姓名散列结果: \n"); list2(); } if(select==3) { printf("号码散列结果: \n"); list(); } if(select==4) { printf("列表已清空\n"); create(); create2(); } if(select==5) { printf("通信录已保存\n"); save(); } if(select==6) return0; } return0; } d)调试分析: 首先添加记录,分别输入qqwe111,aasd222,zzxc333三组记录。 查找记录,分别按号码和姓名查询。 查找成功。 姓名散列,把所有添加的记录打印出来。 号码散列,把所有添加的记录打印出来。 保存记录。 得到通讯录txt文档。 但是只可以存储最近添加的记录。 清空记录。 再次查询姓名散列,验证确实清空。 退出系统。 e)课设总结: 通过几天的查找编译对数据结构有了更深的理解锻炼了自己良好的程序习惯。 课程设计过程的收获、遇到问题、遇到问题解决问题过程的思考、程序调 试能力的思考、对数据结构这门课程的思考、在课程设计过程中对《数据结构》 课程的认识等内容
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 列表 设计 实现 数据结构 课程设计 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)