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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

数据结构单链表通讯录.docx

1、数据结构单链表通讯录数据结构单链表通讯录(总20页)实验报告实验名称 单链表通讯录 一、实验目的1.熟练掌握线性表的类型定义方法、存储方法及其基本运算(元素的插入、删除等)的实现方法,培养综合运用所学知识,根据具体问题进行数据结构设计和算法设计的能力。二、实验内容1 用带头结点的单链表作存储结构,实现通讯录单链表的建立、查询、修改、排序、合并、统计、结点的查找、移动以及通讯录链表的输出功能。三、实验要求 设计要求:为了实现通讯录管理的操作功能,首先设计一个含有多个菜单项的主控菜单程序,然后再为这些菜单项配上相应的功能。主控菜单设计要求: 菜单内容程序运行后,给出9个菜单项的内容和输入提示:1.

2、创建通讯录链表;2.将姓名为Name的好友的手机号改为MTel;3.输出通讯录;4.插入姓名为Name、手机号为MTel的好友信息,将链表中姓名Name的结点放到该结点的前面,将姓名Name的结点放到该结点后面5.将通讯录按照好友姓名进行非递减排序;6.将两个按姓名非递减排序的通讯录合并为一个,姓名相同且手机号相同的好友记录在结果中只保留一个;7.统计籍贯是“大连”的好友人数;8.将通讯录中倒数第k个结点之后的所有结点移到头结点后面(保持结点间的先后顺序);9.将通讯录的正中间位置结点之后的全部结点倒置;0.退出管理系统请选择09: 菜单设计要求:使用数字09来选择菜单项,其它输入则不起作用。

3、四、实验概要设计1)功能框图五. 使用说明1.运行环境:VC6.0 2.首先选择主控菜单中的操作,即建表,然后进行其它操作六实验截图 (见下页)七 实验体会附源程序代码:#include#include#include#define Newsp (TxlList *)malloc(sizeof(struct TxlList)typedef struct TxlList char Name16; /姓名 char MTel11; /手机号 char Tel9; /固定电话 char EMail16; /邮箱地址 char BornAddr20; /籍贯(值域:北京、上海、大连等等,只写城市名称)

4、 char BroadN50; /博客名 struct TxlList *next; /指针域 TxlList, *TxlLink;void Lbuild1(TxlLink &T)/创建文件 FILE *fp; TxlLink q; q=Newsp; q=T; int NUM; char filename20; printf(n*请输入要创建的通讯录名:n); gets(filename); if (fp=fopen(filename, wb)=NULL) /*以写方式在当前目录打开(新建)文件*/ printf(cant open file!n); exit(0); /如果文件无法打开,关闭

5、已经打开的其它文件,结束程序。 printf(*请输入要储存的人数:); scanf(%d,&NUM); getchar(); for(int a=0;aName); printf(*手机号:); gets(p-MTel); printf(*固定电话:); gets(p-Tel); printf(*邮箱地址:); gets(p-EMail); printf(*籍贯:); gets(p-BornAddr); printf(*博客名:); gets(p-BroadN); p-next=NULL; q-next=p; q=q-next; if (fprintf(fp,%s %s %s %s %s %

6、sn,p-Name,p-MTel,p-Tel,p-EMail,p-BornAddr,p-BroadN)=1)/向文件中一次写一个结构体量值 printf(file write errorn); break; fclose(fp);void Lbuild2(TxlLink &T)/读取文件 FILE *fp; TxlLink q; q=Newsp; q=T; char filename20; printf(n*请输入要读取的通讯表名:n); gets(filename); if(fp=fopen(filename,rb)=NULL) printf(cant open file!n); exit(

7、0); /如果文件无法打开,关闭已经打开的其它文件,结束程序。 while(!feof(fp) TxlLink p; p=Newsp; fscanf(fp,%s %s %s %s %s %s ,p-Name,p-MTel,p-Tel,p-EMail,p-BornAddr,p-BroadN); q-next=p; p-next=NULL; q=q-next; fclose(fp);void Build(TxlLink &T)/选择建立方式的函数 int Choice; printf(*) ; printf(n*请输入想要实现的功能编号:n); printf(*1.新建通讯录;n*2.输出已有有通

8、讯录;n*其它-退出。n*选择为:); scanf(%d,&Choice); printf(*) ; getchar(); switch(Choice) case 1: Lbuild1(T); break; case 2: Lbuild2(T); break; default: printf(无通讯录nn); break; void Update(TxlLink &T, char *Name, char *MTel)/将姓名为Name的好友的手机号改为MTel; TxlLink p; p=T-next; while(p) if(strcmp(p-Name,Name)=0) strcpy(p-M

9、Tel,MTel); p=p-next; void Buildnew(TxlLink &T)/创建一个空资料单元 char a=无; strcpy(T-Name,a); strcpy(T-MTel,a); strcpy(T-EMail,a); strcpy(T-BornAddr,a); strcpy(T-BroadN,a); strcpy(T-Tel,a); T-next=NULL;void OutPut(TxlLink T)/输出通讯表数据 TxlLink p; p=Newsp; p=T-next; printf(*) ; printf(n*通讯录信息:n姓名,手机号,固定电话,邮箱地址,籍

10、贯,博客名分别为:n); while(p) printf(%s %s %s %s %s %sn,p-Name,p-MTel,p-Tel,p-EMail,p-BornAddr,p-BroadN); p=p-next; void Sort(TxlLink &T) /将该通讯录按照好友姓名进行非递减排序 TxlLink p,q,r; p=T; q=p-next; int SUM=0; while(q)/记录通讯表数据个数 SUM+; q=q-next; q=p-next; for(int i=0;iSUM;i+) for(int j=0;jnext; if(r) if(strcmp(q-Name,r

11、-Name)0) p-next=r; q-next=r-next; r-next=q; p=p-next; q=p-next; p=T; q=p-next; r=q-next; void Merge(TxlLink &T1, TxlLink &T2) /将两个按姓名非递减排序的通讯录合并为一个,姓名相同且手机号相同的好友记录在结果中只保留一个 Sort(T1); Sort(T2); TxlLink p,q,r,t,head; p=T1-next; q=T2-next; head=T1; while(p|q) r=p; t=q; if(strcmp(p-Name,q-Name)0) q=q-ne

12、xt; head-next=t; head=head-next; head-next=NULL; printf(w ); else if(strcmp(p-Name,q-Name)next; head-next=r; head=head-next; head-next=NULL; else if(strcmp(p-MTel,q-MTel)0) q=q-next; head-next=t; head=head-next; head-next=NULL; else if(strcmp(p-MTel,q-MTel)next; head-next=r; head=head-next; head-nex

13、t=NULL; else p=p-next; free(r); printf(x ); if(!p) while(q) head-next=q; q=q-next; head=head-next; head-next=NULL; if(!q) while(p) head-next=p; p=p-next; head=head-next; head-next=NULL; T2=T1;void Insert(TxlLink &T, char *Name, char *MTel) /插入姓名为Name、手机号为MTel的好友信息,将链表中姓名Name的结点放到该结点的前面,将姓名Name的结点放到该

14、结点后面; Sort(T); TxlLink p,q,r; int n=1; r=Newsp; Buildnew(r); strcpy(r-Name,Name); strcpy(r-MTel,MTel); p=T-next; q=p-next; while(q) if(strcmp(p-Name,r-Name)=0) T-next=r; r-next=p; n=0; break; if(strcmp(p-Name,r-Name)Name,r-Name)=0) p-next=r; r-next=q; n=0; break; p=p-next; q=q-next; if(n=1) p-next=r

15、; int Count(TxlLink T)/统计籍贯是某地的好友人数; int x=0; char BornAddr20; TxlLink p; p=T-next; printf(*请输入要查询的地址:); gets(BornAddr); while(p) if(strcmp(p-BornAddr,BornAddr)=0) x+; p=p-next; return x;int Number1(TxlLink p,TxlLink &r,TxlLink &t,int k)/运用递归方法找到倒数第k个结点的地址 int x=0; TxlLink q; if(p) q=p; p=p-next; x=

16、Number1(p,r,t,k)+1; if(k=x) r=q; if(k+1)=x) t=q; return x;int Number2(TxlLink p,TxlLink &r,TxlLink &t,int &k)/运用递归方法找到倒数第k个的地址 int x=0; TxlLink q; if(p) q=p; k+; p=p-next; x=Number2(p,r,t,k)+1; if(k/2)=x) r=q; if(k/2+1)=x) t=q; return x;void MoveK(TxlLink &T, int k)/将通讯录中倒数第k个结点之后的所有结点移到头结点后面 int x;

17、 TxlLink p,q,r,t; p=T-next; x=Number1(p,r,t,k); T-next=r; t-next=NULL; while(r) q=r; r=r-next; q-next=p;void ReverseN(TxlLink T)/将通讯录的正中间位置结点之后的全部结点倒置 int k=0; TxlLink p,q,r,t; p=T-next; Number2(p,r,t,k); T-next=r; t-next=NULL; while(r) q=r; r=r-next; q-next=p;int main(void) TxlLink P; int x=1; P=Ne

18、wsp; Build(P); int Choice; while(x) printf(n*请输入想要实现的功能编号:n); printf(*1.排序;n*2.插入信息;n*3.更改手机;n*4.合并;n*5.统计籍贯人数;n*6.移节点;n*7.倒置链表;n*其它退出。n*选择为:); scanf(%d,&Choice); getchar(); switch(Choice) case 1: printf(*) ; printf(n*排序前的通讯表*n); OutPut(P); Sort(P); printf(n*排序后的通讯表*n); OutPut(P); break; case 2: pri

19、ntf(n*插入前的通讯录*n); OutPut(P); char name16,mtel11; printf(n*请输入要插入的好友姓名:); gets(name); printf(n*请输入要插入的好友号码:); gets(mtel); Insert(P,name,mtel); printf(n*插入后的通讯录*n); OutPut(P); printf(*); break; case 3: printf(n*改写前的通讯录*n); OutPut(P); char name16,mtel11; printf(n*请输入要改写的好友姓名:); gets(name); printf(n*请输入

20、要改写的好友号码:); gets(mtel); Update(P,name,mtel); printf(n*改写后的通讯录*n); OutPut(P); printf(*); break; case 4: TxlLink Q; Q=Newsp; printf(*); printf(n*建立另一个通讯录n); Build(Q); printf(n*第一个通讯录n); OutPut(P); printf(n*第二个通讯录n); OutPut(Q); Merge(P,Q); printf(n*合并并排序后的通讯录*n); OutPut(P); printf(*); break; case 5: in

21、t N; printf(n*输出通讯录*n); OutPut(P); N=Count(P); printf(n*统计结果为:n*共%d个人n,N); printf(*); break; case 6: int n; printf(n*请输入移动节点数:n n=); scanf(%d,&n); printf(n*移动前的通讯录:n); OutPut(P); MoveK(P,n); printf(n*移动后的通讯录:n); OutPut(P); break; case 7: printf(n*倒置前的通讯录*n); OutPut(P); ReverseN(P); printf(n*倒置后的通讯录*n); OutPut(P); printf(*); break; default: x=0; break; return 0;

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

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