数据结构 链表的应用 通讯录管理

合集下载

链表通讯录课程设计

链表通讯录课程设计

链表通讯录课程设计一、教学目标本课程的目标是让学生掌握链表在通讯录管理中的应用。

具体来说,知识目标包括理解链表的基本概念、结构及其在通讯录中的作用;技能目标则是培养学生运用链表进行通讯录数据管理的能力,包括创建、删除、查找和修改通讯录信息;情感态度价值观目标则是培养学生对计算机科学的好奇心、探索精神和责任感。

二、教学内容本课程的教学内容主要包括链表的基本概念、结构及其在通讯录管理中的应用。

具体安排如下:1.第一课时:链表的基本概念和结构。

介绍链表的定义、特点及其与数组的区别。

2.第二课时:链表的创建与删除。

讲解如何创建一个链表、如何删除链表中的节点以及如何释放链表内存。

3.第三课时:链表的查找与修改。

教授如何查找链表中的节点、如何修改链表中的节点数据以及如何实现链表的排序。

4.第四课时:链表在通讯录中的应用。

结合实际案例,讲解如何使用链表管理通讯录信息,包括增加、删除、查找和修改通讯录条目。

三、教学方法为了激发学生的学习兴趣和主动性,本课程将采用多种教学方法。

主要包括:1.讲授法:用于讲解链表的基本概念、结构和通讯录管理的基本原理。

2.案例分析法:通过分析实际案例,让学生了解链表在通讯录中的应用。

3.实验法:让学生动手实践,实际操作链表的操作方法,提高其实际应用能力。

四、教学资源为了支持教学内容和教学方法的实施,丰富学生的学习体验,我们将准备以下教学资源:1.教材:《数据结构与算法》。

提供链表的基本概念、结构和算法。

2.多媒体资料:包括链表的动画演示、实际案例的视频讲解等,帮助学生更直观地理解链表的操作。

3.实验设备:提供计算机和编程环境,让学生可以实际操作链表的操作方法。

五、教学评估本课程的评估方式包括平时表现、作业和考试三个部分,以全面、客观、公正地评价学生的学习成果。

具体安排如下:1.平时表现:占比30%,通过课堂参与、提问、小组讨论等方式评估学生的学习态度和理解程度。

2.作业:占比30%,布置与课程内容相关的编程练习,评估学生的实际操作能力。

数据结构通讯录管理系统课程设计实验报告心得

数据结构通讯录管理系统课程设计实验报告心得

数据结构通讯录管理系统课程设计实验报告背景随着信息化的快速发展,通讯录管理系统成为了每个人生活中必备的工具之一。

传统的纸质通讯录已经无法满足人们对于信息管理的需求,因此开发一个高效、便捷、用户友好的通讯录管理系统显得尤为重要。

本次课程设计实验的目标是设计一个基于数据结构的通讯录管理系统,实现通讯录的创建、查找、修改、删除等功能。

通过本次实验,我们可以学习和掌握数据结构中的链表、哈希表等基础概念和算法,并将其应用到实际项目中。

分析通讯录管理系统主要有以下几个功能:1.创建通讯录:通讯录是一个存储联系人信息的数据结构,可以存储联系人的姓名、电话号码、邮箱地址等信息。

2.添加联系人:可以向通讯录中添加新的联系人,包括姓名、电话号码、邮箱地址等信息。

3.查找联系人:可以根据姓名或电话号码查找通讯录中的联系人,并显示其详细信息。

4.修改联系人:可以根据姓名或电话号码修改通讯录中的联系人信息。

5.删除联系人:可以根据姓名或电话号码删除通讯录中的联系人。

为了实现上述功能,我们可以使用链表来实现通讯录的存储,每个节点表示一个联系人。

每个节点包含姓名、电话号码、邮箱地址等信息,并且有指向下一个节点的指针。

为了提高查找联系人的效率,我们还可以使用哈希表来实现联系人的快速查找。

哈希表采用键值对的方式存储数据,通讯录中的联系人可以以姓名为键,联系人节点为值存储在哈希表中。

结果实验的最终结果是一个完善的通讯录管理系统,能够实现创建通讯录、添加联系人、查找联系人、修改联系人和删除联系人等功能。

在实现过程中,我们遵循了以下步骤:1.首先,我们设计了联系人节点的数据结构,包括姓名、电话号码、邮箱地址等字段,并定义了节点的操作方法。

2.接着,我们设计了通讯录的数据结构,使用链表来存储联系人节点,并实现了通用的链表操作方法,如插入节点、删除节点等。

3.然后,我们设计了哈希表的数据结构,使用哈希函数将联系人节点存储在哈希表中,并实现了查找联系人的快速算法。

数据结构课程设计-通讯录管理系统

数据结构课程设计-通讯录管理系统

《数据结构》课程设计报告书题目:通讯录管理系统系别:计算机科学与应用系学号:学生姓名:指导教师:完成日期:2012年5月28日1 问题描述(1)题目内容:通讯录管理。

(2)基本要求:利用单链表实现通讯录的建立、通讯者的插入、通讯者的删除、通讯者的查询以及通讯录的输出。

(3)设计目的:通过本次课程设计,了解通讯录的一些基本功能。

掌握利用单链表进行插入,查找,用关键字建立单链表。

2 需求分析经过本次的课程设计,我认为通讯录主要实现的功能如下:(1)添加信息:一个通讯录应该有其基本的添加功能。

在程序设计时,我通过一个具有添加功能的函数,实现了个人信息的添加,如:姓名,性别,电话号码,QQ号码,地址。

(2)删除信息:当你不需要某个联系人的信息时,可以直接将该人的信息删除。

(3)查找:一个通讯录应该具有令一基本功能就是查找,本设计时可以按联系人为关键字查找的,只要你输入要查找人的姓名或手机号码或QQ号码就可出来相应的个人信息。

(4)输出:一个通讯录应该具有输出所有联系人的功能,本设计按照次序可以从头到尾把通讯录中的所有联系人都输出,供自己查看。

(5)退出:当你做完你要做的事情之后,就可以退出该程序。

3 总体设计3.1 算法的定义LinkList Creat_LinkList()创建空单链表void Insert_LinkList(LinkList H)建立通讯录,录入联系人的信息,可以把联系人的姓名,性别,手机号,QQ号,地址录入系统。

void Locate_LinkList(LinkList H)按照联系人的姓名,手机号码,QQ号码查找通讯录中联系人的信息。

void Delete_LinkList(LinkList H)按照联系人的姓名,手机号码,QQ号码删除联系人的所有信息。

void print_LinkList(LinkList H)输出通讯录中的所有联系人的信息供使用者查看。

3.2 系统流程图图3-1通讯录管理功能图3.3 详细程序设计1)定义数据结构typedef struct Node //定义数据结构{char name[20];//姓名char sex[4]; //性别char tel[11];//电话号码char qq[13]; //qq号码char ad[100];//地址Node *next;//存放后继元素的地址}LNode,*LinkList;2)创建一个空的单链表LinkList Creat_LinkList(){//创建空单链表,入口参数无LinkList H;H=new LNode;if(H)//确认创建头结点创建是否成功,若成功,修改单链表头结点的指针域为0表空表{H->next=NULL;}return H;}3)向通讯录中插入联系人void Insert_LinkList(LinkList H){LinkList p;p=new LNode;if(!p){cout<<"不能插入!"<<endl;}cout<<"请输入你要插入的联系人信息:"<<endl;cout<<"姓名:"<<endl;cin>>p->name;cout<<"性别:"<<endl;cin>>p->sex;cout<<"手机号码:"<<endl;cin>>p->tel;cout<<"QQ号码:"<<endl;cin>>p->qq;cout<<"地址:"<<endl;cin>>p->ad;p->next=H->next;H->next=p;cout<<"插入成功"<<endl;}4)查询通讯录中某个联系人的信息void Locate_LinkList(LinkList H){int x;LinkList p=H->next;cout<<"你要通过哪种方式查询?"<<endl;cout<<"1.通过联系人姓名查询"<<endl;cout<<"2.通过联系人手机号码查询"<<endl;cout<<"3.通过联系人QQ号码查询"<<endl;cin>>x;char str[30];if(x==1){cout<<"请输入你要查询的联系人的姓名:";cin>>str;while(p && strcmp(p->name,str)!=0){p=p->next;}}if(x==2){cout<<"请输入你要查询的联系人的手机号码:";cin>>str;while(p&&strcmp(p->tel,str)!=0){p=p->next;}}if(x==3){cout<<"请输入你要查询的联系人的QQ号码:";cin>>str;while(p&&strcmp(p->qq,str)!=0){p=p->next;}}if(p==NULL){cout<<"没有找到你要查找的联系人的信息!"<<endl;}else{cout<<"你要找的联系人的信息为:"<<endl;cout<<"姓名:"<<p->name<<endl;cout<<"性别:"<<p->sex<<endl;cout<<"手机号:"<<p->tel<<endl;cout<<"QQ号码"<<p->qq<<endl;cout<<"地址"<<p->ad<<endl;}}5)删除通讯录中某个联系人的信息void Delete_LinkList(LinkList H){if(H->next==NULL){cout<<"通讯录为空,不能删除"<<endl;}else{int x;char str[30];LinkList p,q;p=H->next;cout<<"请输入你要删除的方式:"<<endl;cout<<"1.按照联系人的姓名删除"<<endl;cout<<"2.按照联系人的手机号码删除"<<endl;cout<<"3.按照联系人的QQ号码删除"<<endl;cin>>x;q=H;if(x==1){cout<<"请输入你要删除的联系人的姓名:"<<endl;cin>>str;while(strcmp(p->name,str)!=0){q=p;p=p->next;}}if(x==2){cout<<"请输入你要删除的联系人的手机号码:"<<endl;cin>>str;while(strcmp(p->tel,str)!=0){q=p;p=p->next;}}if(x==3){cout<<"请输入你要删除的联系人的QQ号码:"<<endl;cin>>str;while(strcmp(p->qq,str)!=0){q=p;p=p->next;}}if(p==NULL){cout<<"没有你要删除的联系人的记录"<<endl;}else{q->next=p->next;p->next=NULL;free(p);cout<<"该联系人已删除"<<endl;}}}6)输出所有联系人void print_LinkList(LinkList H){if(H->next==NULL){cout<<"通讯录为空"<<endl;}else{LinkList p;p=H->next;while(p!=NULL){cout<<"性别:"<<p->sex<<endl;cout<<"手机号:"<<p->tel<<endl;cout<<"QQ号码:"<<p->qq<<endl;cout<<"地址:"<<p->ad<<endl;p=p->next;}}}7)主函数void main(){int a;LinkList List;List=Creat_LinkList();do{cout<<"*****欢迎进入通讯录管理*****"<<endl;cout<<"*****添加联系人请按1*****"<<endl;cout<<"*****查找联系人请按2*****"<<endl;cout<<"*****删除联系人请按3*****"<<endl;cout<<"*****输出所有联系人请按4*****"<<endl;cout<<"*****退出请按0*****"<<endl;cout<<"请输入你的选择:"<<endl;cin>>a;switch(a){case 0:break;case 1:Insert_LinkList(List);break;case 2:Locate_LinkList(List);break;case 3:Delete_LinkList(List);break;case 4:print_LinkList(List);break;}cout<<"操作完毕,请再次选择!"<<endl;}while(a!=0);}3.4 测试运行程序,看到主界面。

掌握数据结构中的链表和数组的应用场景

掌握数据结构中的链表和数组的应用场景

掌握数据结构中的链表和数组的应用场景链表和数组都是常用的数据结构,它们在不同的场景下有不同的应用。

一、链表的应用场景:1.链表适合动态插入和删除操作:链表的插入和删除操作非常高效,只需修改指针的指向,时间复杂度为O(1)。

因此,当需要频繁进行插入和删除操作时,链表是一个很好的选择。

-操作系统中的进程控制块(PCB):操作系统需要频繁地创建、停止、销毁进程,使用链表存储这些PCB,可以方便地插入、删除和管理进程。

-聊天记录:在聊天应用中,新的消息会动态插入到聊天记录中,使用链表存储聊天记录可以方便地插入新消息。

2.链表节省内存空间:每个节点只需存储当前元素和指向下一个节点的指针,不需要像数组一样预分配一块连续的内存空间,因此链表对内存空间的利用更加灵活。

-操作系统中的内存管理:操作系统使用链表来管理空闲内存块和已分配的内存块,可有效节省内存空间。

3.链表支持动态扩展:链表的长度可以随时变化,可以动态地扩容和缩容。

-缓存淘汰算法:在缓存中,如果链表已满,当有新数据需要加入缓存时,可以通过删除链表头部的节点来腾出空间。

4.链表可以快速合并和拆分:将两个链表合并成一个链表只要调整指针的指向即可,时间复杂度为O(1)。

-链表排序:在排序算法中,链表归并排序利用链表快速合并的特性,使得归并排序在链表上更高效。

二、数组的应用场景:1.随机访问:数组可以根据索引快速访问元素,时间复杂度为O(1)。

-图像处理:图像通常以像素点的形式存储在数组中,可以通过索引快速访问某个特定像素点的颜色信息。

2.内存连续存储:数组的元素在内存中是连续存储的,可以利用硬件缓存机制提高访问效率。

-矩阵运算:矩阵可以通过二维数组来表示,利用矩阵的连续存储特性,可以高效地进行矩阵运算。

3.大数据存储:数组可以预先分配一块连续的内存空间,非常适合存储大量的数据。

-数据库中的数据表:数据库中的数据表通常使用数组来实现,可以快速存取和处理大量的数据。

数据结构——通讯录实验报告

数据结构——通讯录实验报告

数据结构——通讯录实验报告
《数据结构课程设计》实验报告
编号实验一实验项目名称通讯录管理
班学姓08计科(1)班学时数 6 指导教师冯韵 5 黄媛级号名
成实验日期 2010年9月7日绩
一、实验目的:使用有关单链表的操作来实现通讯录信息系统的管理二、内容与设计思想:(设计思想、主要数据结构、主要代码结构、主要代码段分析) 设计思想:利用单链表的建立、查询、插入、删除、输出实现通讯录管理。

主要数据结构:单链表的建立、查询、插入、删除。

主要代码结构和分析:
void main( )主函数
for循环实现菜单循环。

int menu_select( ) 菜单选择函数
首先输出菜单选项,将输入的选项赋给sn,用sn判断输入值是否合理。

利用for循环实现重复选择,利用switch调用建立、查询、插入、删除和输出函数。

LinkList CreateList(void)建立带头结点链表
首先利用malloc申请头结点,置结束标志为0.通过0、1选择来结束建表。

三、调试过程(测试数据设计与测试结果分析) 四、总结
1、设计中遇到的问题及解决过程
2、设计中产生的错误及原因分析
3、设计体会和收获
五、评阅意见:。

数据结构课程设计通讯录管理系统报告

数据结构课程设计通讯录管理系统报告

数据结构课程设计通讯录管理系统报告前言通讯录管理系统是一种常见的应用程序,用于帮助用户有效地组织和管理他们的联系人信息。

本报告旨在介绍和分析一个基于数据结构设计的通讯录管理系统,其中实现了基本的通讯录功能,并且通过合适的数据结构和算法进行优化。

功能需求通讯录管理系统需要实现以下基本功能: - 添加联系人信息 - 查找联系人信息 - 删除联系人信息 - 更新联系人信息 - 显示所有联系人信息数据结构选择为了实现通讯录管理系统的功能,我们选择使用链表作为数据结构。

链表是一种简单而灵活的数据结构,可以动态地添加或删除节点,非常适合存储联系人信息这种动态的数据。

在这里,我们采用双向链表,使得查找、插入和删除操作更加高效。

算法设计添加联系人信息添加联系人信息时,我们需要遍历链表找到合适的位置插入新节点,这里的算法复杂度为O(n),其中n表示链表的长度。

查找联系人信息查找联系人信息时,我们需要遍历链表查找目标节点,这里的算法复杂度为O(n)。

删除联系人信息删除联系人信息时,我们同样需要遍历链表找到目标节点并删除,其算法复杂度为O(n)。

更新联系人信息更新联系人信息时,我们首先需要查找到目标节点,然后进行更新操作,其算法复杂度也为O(n)。

系统优化为了提高系统的性能,我们可以通过以下几种方式进行优化: - 使用哈希表索引联系人信息,减少查找联系人的时间复杂度; - 引入缓存机制,减少频繁的IO 操作。

总结通过本报告的介绍和分析,我们了解了一个基于数据结构设计的通讯录管理系统的实现原理和优化方法。

在实际应用中,针对具体需求和场景,我们可以进一步优化系统性能,提升用户体验。

通讯录管理系统作为一种简单而实用的应用程序,将在日常生活中发挥重要作用。

数据结构单链表通讯录

数据结构单链表通讯录

实验报告实验名称单链表通讯录一、实验目的1.熟练掌握线性表的类型定义方法、存储方法及其基本运算(元素的插入、删除等)的实现方法,培养综合运用所学知识,根据具体问题进行数据结构设计和算法设计的能力。

二、实验内容1.用带头结点的单链表作存储结构,实现通讯录单链表的建立、查询、修改、排序、合并、统计、结点的查找、移动以及通讯录链表的输出功能。

三、实验要求设计要求:为了实现通讯录管理的操作功能,首先设计一个含有多个菜单项的主控菜单程序,然后再为这些菜单项配上相应的功能。

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

四、实验概要设计1)功能框图五. 使用说明1.运行环境:VC6.02.首先选择主控菜单中的操作1,即建表,然后进行其它操作.六.实验截图(见下页)七实验体会附源程序代码:#include<stdio.h>#include<stdlib.h>#include<string.h>#define Newsp (TxlList *)malloc(sizeof(struct TxlList))typedef struct TxlList{char Name[16]; //姓名char MTel[11]; //手机号char Tel[9]; //固定电话char EMail[16]; //邮箱地址char BornAddr[20]; //籍贯(值域:"北京"、"上海"、"大连"等等,只写城市名称)char BroadN[50]; //博客名struct TxlList *next; //指针域}TxlList, *TxlLink;void Lbuild1(TxlLink &T){//创建文件FILE *fp;TxlLink q;q=Newsp;q=T;int NUM;char filename[20];printf("\n*请输入要创建的通讯录名:\n");gets(filename);if ((fp=fopen(filename, "wb"))==NULL) { /*以写方式在当前目录打开(新建)文件*/printf("can't open file!!!\n");exit(0); //如果文件无法打开,关闭已经打开的其它文件,结束程序。

数据结构通讯录管理系统报告

数据结构通讯录管理系统报告

数据结构通讯录管理系统报告数据结构通讯录管理系统报告⒈系统介绍⑴目的和背景本通讯录管理系统旨在提供一个便捷的方式来管理个人联系人信息。

用户可以使用该系统添加、编辑和删除联系人信息,并实现相关功能,如搜索、排序等。

⑵功能概述本系统主要包含以下功能:●添加联系人:用户可以输入联系人的姓名、方式号码、电子邮件等信息来添加新的联系人。

●编辑联系人:用户可以对已存在的联系人进行信息的修改或更新。

●删除联系人:用户可以选择删除指定联系人以删除其相关信息。

●搜索联系人:用户可以根据姓名或方式号码进行联系人的快速搜索。

●排序联系人:用户可以对联系人按照姓名或方式号码等属性进行升序或降序排列。

●显示联系人:用户可以查看已存储的所有联系人信息。

⑶系统架构本系统基于数据结构的链表实现,通过使用链表结构来存储所有的联系人信息。

每个联系人都是链表的一个节点,包含姓名、方式号码等属性,以及指向下一个联系人的指针。

⒉系统设计⑴数据结构设计本系统使用链表来存储联系人信息。

链表的每个节点包含以下数据项:●姓名:联系人的姓名,类型为字符串。

●方式号码:联系人的方式号码,类型为字符串。

●电子联系人的电子邮件地质,类型为字符串。

●下一个节点的指针:指向下一个联系人节点的指针,类型为链表节点指针。

⑵系统模块设计本系统包含以下模块:●菜单模块:显示主菜单和相应的选项,接受用户输入并调用其他模块执行相应的操作。

●添加模块:添加新的联系人信息,包括姓名、方式号码、电子邮件等。

●编辑模块:修改已存在联系人的信息,如姓名、方式号码、电子邮件等。

●删除模块:删除指定联系人的信息。

●搜索模块:根据指定的姓名或方式号码搜索联系人信息。

●排序模块:按照姓名或方式号码等属性对联系人信息进行排序。

●显示模块:显示当前存储的所有联系人信息。

⒊系统实现⑴编程语言和工具本系统使用C++编程语言实现,使用了链表和相关的指针操作来实现联系人管理功能。

⑵算法设计●添加联系人:通过创建新的链表节点并将其插入到链表末尾来实现联系人的添加功能。

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

数据结构链表的应用通讯录管理实验要求:一、设计一个含有多个菜单项的程序,菜单项内容如下:1通讯录链表的建立2通讯录链表的插入3通讯录链表的查询4通讯录链表的删除5通讯录链表的输出0退出管理系统要求只能用0-5来选择菜单项,其他的输入无效二、分别实现多个菜单项的功能,要求每个功能在操作时都有确认提示三、编写一个程序实现整个通讯录管理系统,把主菜单的生成和各菜单项功能的实现作为子程序或者函数或者过程来实现。

四、要求关键语句必须要写注释。

#include"stdio.h"#include"string.h"#include"stdlib.h"typedefstructabc{//通讯录结点类型charnum[5];//编号charname[9];//姓名charsex[3];//性别charphone[13];//电话charaddr[31];//地址}DataType;typedefstructnode{//结点类型定义DataTypedata;//结点数据域structnode*next;//结点指针域}ListNode;typedefListNode*LinkList; LinkListhead;ListNode*p;//函数说明intmenu_select();LinkListCreateList(void); voidInsertNode(LinkListhead,ListNode*p); ListNode*ListFind(LinkListhead); voidDelNode(LinkListhead); voidPrintList(LinkListhead);//主函数voidmain(){for(;;){switch(menu_select()){case1:printf("**********************************\n"); printf("*通讯录链表的建立*\n");printf("**********************************\n"); head=CreateList();break;case2:printf("*通讯者信息的添加*\n");printf("**********************************\n");printf("编号(4)姓名(8)性别(3)电话(11)地址(31)\n");printf("*************************************\n");p=(ListNode*)malloc(sizeof(ListNode));//申请新结点scanf("%s%s%s%s%s",p->data.num,p->,p->data.sex, p->data.phone,p->data.addr);InsertNode(head,p);break;case3:printf("***********************************\n");printf("*通讯录信息的查询*\n");printf("***********************************\n");p=ListFind(head);if(p!=NULL){printf("编号姓名性别联系电话地址\n");printf("--------------------------------------------------\n"); printf("%s,%s,%s,%s,%s\n",p->data.num,p->,p->data.sex,p->data.phone,p->data.addr);printf("---------------------------------------------------\n");}elseprintf("没有查到要查询的通讯者!\n");break;case4:printf("*通讯录信息的删除*\n");printf("***********************************\n"); DelNode(head);//删除结点break;case5:printf("************************************\n"); printf("*通讯录链表的输出*\n");printf("************************************\n"); PrintList(head);break;case0:printf("\t再见!\n");return;}}}intmenu_select(){intsn;printf("通讯录管理系统\n");printf("===================\n"); printf("1.通讯链表的建立\n");printf("2.通讯者结点的插入\n");printf("3.通讯者结点的查询\n");printf("4.通讯者结点的删除\n");printf("5.通讯录链表的输出\n");printf("0.退出管理系统\n");printf("==========================\n");printf("请选择0-5:");for(;;){scanf("%d",&sn);if(sn<0||sn>5)printf("\n\t输入错误,重选0-5:");elsebreak;}returnsn;}LinkListCreateList(void){//尾插法建立带头结点的通讯录链表算法LinkListhead=(ListNode*)malloc(sizeof(ListNode));//申请头结点ListNode*p,*rear;intflag=0;//结束标志置0rear=head;//尾指针初始指向头结点while(flag==0){p=(ListNode*)malloc(sizeof(ListNode));//申新结点printf("编号(4)姓名(8)性别电话(11)地址(31)\n");printf("--------------------------------------------------------------------------------------\n");scanf("%s%s%s%s%s",p->data.num,p->,p->data.sex,p->data.phone, p->data.addr);rear->next=p;//新结点连接到尾结点之后rear=p;//尾指针指向新结点printf("结束建表吗?(1/0):");scanf("%d",&flag);}rear->next=NULL;//终端结点指针置空returnhead;//返回链表头指针}voidInsertNode(LinkListhead,ListNode*p){ListNode*p1,*p2;p1=head;p2=p1->next;while(p2!=NULL&&strcmp(p2->data.num,p->data.num)<0) {p1=p2;//p1指向刚访问过的结点p2=p2->next;//p2指向表的下一个结点}p1->next=p;//插入p所指向的结点p->next=p2;//连接表中剩余的结点}ListNode*ListFind(LinkListhead){//有序通讯录链表上的查找ListNode*p;charnum[5];charname[9];intxz;printf("==================\n"); printf("1.按编号查询\n");printf("2.按姓名查询\n");printf("==================\n"); printf("请选择:");p=head->next;//假定通讯录表带头结点scanf("%d",&xz);if(xz==1){printf("请输入要查找者的编号:");scanf("%s",num);while(p&&strcmp(p->data.num,num)<0)p=p->next;if((p==NULL)||strcmp(p->data.num,num)>0) p=NULL;//没有查到要查找的通讯}elseif(xz==2){printf("请输入要查找者的姓名:");scanf("%s",name);while(p&&strcmp(p->,name)!=0) p=p->next;}returnp;}voidDelNode(LinkListhead){charjx;ListNode*p,*q;p=ListFind(head);//调用查找函数if(p==NULL){printf("没有查到要删除的通讯者!\n");return;}printf("真的要删除该结点吗?(y/n):");scanf("%c",&jx);if(jx=='y'||jx=='Y'){q=head;while((q!=NULL)&&(q->next!=p))q=q->next;q->next=p->next;//删除结点free(p);//释放被删结点空间printf("通讯者已被删除!\n");}}voidPrintList(LinkListhead){ListNode*p;p=head->next;printf("编号姓名性别联系电话地址\n");printf("--------------------------------------------------------------------------------\n" );while(p!=NULL){printf("%s,%s,%s,%s,%s\n",p->data.num,p->,p->data.sex,p->data.phone,p->data.addr);printf("---------------------------------------------------------------------------------\n ");p=p->next;//后移一个结点}}。

相关文档
最新文档