数据结构实验一 线性表的应用(班级通讯录代码及测试界面)_第1页
数据结构实验一 线性表的应用(班级通讯录代码及测试界面)_第2页
数据结构实验一 线性表的应用(班级通讯录代码及测试界面)_第3页
数据结构实验一 线性表的应用(班级通讯录代码及测试界面)_第4页
数据结构实验一 线性表的应用(班级通讯录代码及测试界面)_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第 第 页学院:计算机与控制工程学院 专业:网络工程 姓名:光先生 修改密码:nucschool实验一 线性表的应用(2学时)1、实验目的 通过本实验,掌握线性表链式存储结构的基本原理和基本运算以及在实际问题中的应用。2、实验内容 建立某班学生的通讯录,要求用链表存储。具体功能包括: (1)可以实现插入一个同学的通讯录记录; (2)能够删除某位同学的通讯录; (3)对通讯录打印输出。3、实验要求 (1)定义通讯录内容的结构体; (2)建立存储通讯录的链表结构并初始化; (3)建立主函数: 1)建立录入函数(返回主界面) 2)建立插入函数(返回主界面)3)建立删除函数(返回主界面) 4)建立输出

2、和打印函数(返回主界面) I)通过循环对所有成员记录输出 II)输出指定姓名的某个同学的通讯录记录5)退出 具体代码及测试结果界面在下一页#include #include #include struct ABInfo char number11; /学号 char name10; /姓名 char phone13; /电话 ; typedef struct ABList struct ABInfo info;struct ABList *next;list;int menu () /主菜单函数int set;printf(t*欢迎使用班级通讯录*nn); printf(ttt操作目录n);

3、printf(ttt n); printf(ttt 1.显示通讯录记录 n); printf(ttt n); printf(ttt 2.添加通讯录成员 n); printf(ttt n); printf(ttt 3.删除通讯录成员 n);printf(ttt n); printf(ttt 4.查找通讯录成员 n);printf(ttt n); printf(ttt 5.插入通讯录记录 n);printf(ttt n); printf(ttt 6.退出班级通讯录 n);printf(ttt n); printf(tttn); printf(nt*n);printf(nnttt请选择操作:); s

4、canf(%d,&set);printf(n);return set; void key () /任意键函数printf(ntttt按任意键返回主界面nn);getchar();getchar(); list *init ( list *p ) /新建结点函数建立一个空的节点并初始化其next为NULL list *q;q = (list*)malloc(sizeof(list);p-next = q;p = q;p-next = NULL;return p;void print (list *p) /显示函数 printf(tttn);printf(ttt 学号:%sttn,p-info.n

5、umber);printf(ttt 姓名:%sttn,);printf(ttt 电话:%sttn,p-info.phone);printf(tttnn);list *scan (list *p) /录入函数 printf(t请输入添加成员学号:); scanf(%s,p-info.number);printf(n);printf(t请输入添加成员姓名:);scanf(%s,);printf(n);printf(t请输入添加成员电话:);scanf(%s,p-info.phone);printf(ntttt 添加成功!nn);return p;/返回p

6、是为了方便下面的插入函数 void display (list *p) /打印函数输出通讯录所有记录int i = 1;if(p-next=NULL) printf(nttt对不起,通讯录是空的!请添加通讯录记录nn);else printf(nt现有通讯录成员如下:nn);while(p-next) /当p-next=NULL时退出遍历 printf(ttt 编号:%dttn,i+);print(p); /调用显示函数 p=p-next; printf(nn); key();/调用任意键函数 list *add (list *p) /添加函数添加一个新记录scan(p); /调用录入函数 p

7、=init(p); /调用新建结点函数,添加一个未初始化结点,为下一次录入做准备 key();/调用任意键函数return p;/始终让p指向最后一个未初始化结点并返回p void *find (list *head, char *name) /查找函数-通过姓名查找某同学的通讯录记录并输出list *p;p = head;if (!(head-next) printf(nttt 通讯录为空,无可查找记录!nn); else printf(请输入需要查找同学的姓名:);scanf(%s,name);printf(n);while(p) if( strcmp(,name)=

8、0 ) break;else p = p-next; /若查找失败,p会被赋值为最后一个未初始化的节点的next,值为NULL if(p) printf(nt%s同学的通讯录记录如下:nn,name); print(p);/调用显示函数 else printf(nttt通讯录中没有该同学的记录,请添加!nn); key();/调用任意键函数 list *dele (list *head, char *name) /删除函数-通过姓名查找某同学的通讯录记录并删除list *p,*q;/q会指向p的前驱结点p = head;if(!(head-next) printf(nttt 通讯录为空,无可删

9、除记录!nn); else /原本以调用find函数的方式找p,但是q是个拦路虎,代码量不能有效减少printf(请输入需要删除记录同学的姓名:);scanf(%s,name);printf(n);while (p) if( strcmp(,name)=0 ) break;else q = p; p = p-next; /若查找失败,p会被赋值为最后一个未初始化的节点的next,值为NULL if(p) if(p=head)head=head-next; else q-next=p-next;free(p);printf(ntttt 删除成功!n);else printf

10、(nttt删除失败!通讯录中没有该同学的记录。nn); key();/调用任意键函数return head; list *snumfind (list *head, int i) /序号查找函数找到第i-1个记录存放位置 int j = 1;list *q = head;list *p = head;if (inext = NULL; while (p-next&i!=j) q = p;p=p-next;j+;if(!(p-next) /未找到第i-1个节点,循环就终止 printf(nttt 你输入的序号有误!nn); return q;list *insert ( list *head )

11、 /插入函数int i;list *p,*q;if(!(head-next) printf(nttt 通讯录为空,不可插入,请添加!nn); else printf(请问你要将新记录插入到哪个序号:);scanf(%d,&i);q=snumfind (head, i); /调用序号查找函数,得到所查序号所在的前驱结点 printf(n);if(q-next!=NULL) if(i=1) /插入记录到第一个记录前 p = (list*)malloc(sizeof(list); /为插入新通讯录记录分配空间 p = scan(p); /调用录入函数,录入新通讯录记录 p-next = head;h

12、ead = p;else if(q-next-next!=NULL) p = (list*)malloc(sizeof(list); p = scan(p); p-next = q-next; q-next = p; key(); return head; int quit () /退出函数其实是个鸡肋,没必要写成函数,我只是强迫症犯了 printf(tttt退出成功,欢迎下次使用!n); printf(tttt MADE BY LAGn);return 0;void setwrong () /功能选择错误函数和上面那位一样是个鸡肋 printf(ntttt WRONG!无该选项。nn);ke

13、y();/调用任意键函数int main () list *p, *head;p = (list*)malloc(sizeof(list);p-next = NULL;head = p;char name10;system(color 3F);/背景湖蓝色,字体白色 int set=1; while(set)switch ( menu() ) /主菜单函数case 1: display(head); break; /打印函数-输出通讯录所有记录case 2: p = add(p); break; /添加函数-添加一个新记录case 3: head = dele(head,name); break; /删除函数-通过姓名删除通讯录记录case 4: find(head,name); break; /查找函数-通过姓名查找通讯录记录并输出case 5: head = ins

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论