【数据结构】顺序表的应用->通讯录(详细代码及配图)
小编主页详情-请点击小编gitee代码仓库-请点击本文主要介绍了数据结构的顺序表的应用-通讯录内容全由作者原创无AI同时深度解析了通讯录顺序表增删查改等功能并带有配图帮助博友们更好的理解点个关注不迷路下面进入正文~~目录1.顺序表需要实现的功能2.通讯录相关方法的具体实现2.1通讯录数据的定义2.2给通讯录改名字2.3通讯录的初始化2.4通讯录的销毁2.5通讯录添加数据2.6通讯录删除数据2.7展示通讯录数据2.8通讯录的修改2.9通讯录查找3.通讯录的具体实现结语1.顺序表需要实现的功能1.能够保存用户的信息姓名 性别 年龄 电话 地址。2.实现初始化、销毁、添加、删除、修改、查找、显示用户信息的功能代码如下图所示//通讯录的初始化 void ContactInit(Contact* con); //通讯录的销毁 void ContactDesTroy(Contact* con); //通讯录添加数据 void ContactAdd(Contact* con); //通讯录删除数据 void ContactDel(Contact* con); //通讯录的修改 void ContactModify(Contact* con); //通讯录查找 void ContactFind(Contact* con); //展示通讯录数据 void ContactShow(Contact* con);2.通讯录相关方法的具体实现2.1通讯录数据的定义我们的通讯录是建立在顺序表的基础上实现的我们先回顾一下顺序表的内容typedef int SLDataType; typedef struct SeqList { SLDataType* arr; int size; int capacity; }SL;可以看到顺序表中我们将int重命名为SLDateType所以存储的是整形类型的元素。但是我们现在要存的是一个用户的具体信息包含姓名、地址等信息因此SLDateType代表的数据不应该是整形类型而是一个包含用户具体信息的结构体我们创建Contact.h头文件用来包含通讯录需要实现的功能并将包含用户具体信息结构体的定义写在这个头文件中同时SeqList.h包含Contact.h头文件#define NAME_MAX 20 #define GENDER_MAX 10 #define TEL_MAX 20 #define ADDR_MAX 100 typedef struct personInfo { char name[NAME_MAX]; char gender[GENDER_MAX]; int age; char tel[TEL_MAX]; char addr[ADDR_MAX]; }peoInfo;为了方便后续代码的实现我们将struct personInfo重命名成peoInfo这个peoInfo就是我们顺序表应该要存的内容所以我们将peoInfo重命名为SLDateType//typedef int SLDataType; typedef peoInfo SLDataType;2.2给通讯录改名字要用到顺序表相关的方法对通讯录的操作实际就是对顺序表进行操作给顺序表改个名字叫做通讯录typedef struct SeqList Contact;需要注意我们不能写成typedef SL Contact;因为在这个Contact.h头文件里我们并没有包含SeqList.h两个头文件不能互相包含否则编译器会报错即使由链接器Contact.h头文件里也无法识别SL2.3通讯录的初始化通讯录的初始化实际上要进行的是顺序表的初始化而顺序表的初始化已经实现好了因此我们可以直接使用顺序表初始化的函数void ContactInit(Contact* con) { //实际上要进行的是顺序表的初始化 //顺序表的初始化已经实现好了 SLInit(con); }2.4通讯录的销毁同样的通讯录的销毁实际上要进行的是顺序表的销毁因此我们可以直接使用顺序表销毁的函数void ContactDesTroy(Contact* con) { SLDestory(con); }2.5通讯录添加数据实现的思路1.获取用户输入的内容姓名性别年龄电话地址2.往通讯录中添加联系人数据我们在顺序表实现了头插和尾插的方法可以任选一个使用这里使用尾插的方法void ContactAdd(Contact* con) { //获取用户输入的内容姓名性别年龄电话地址 peoInfo info; printf(请输入要添加的练习人姓名:\n); scanf(%s, info.name); printf(请输入要添加的练习人性别:\n); scanf(%s, info.gender); printf(请输入要添加的练习人年龄:\n); scanf(%d, info.age); printf(请输入要添加的练习人电话:\n); scanf(%s, info.tel); printf(请输入要添加的练习人地址:\n); scanf(%s, info.addr); //往通讯录中添加联系人数据 SLPushBack(con, info); }注意info.age需要取地址2.6通讯录删除数据在删除数据之前我们先要判断删除的数据是否存在如果数据不存在则删除失败如果存在则删除数据。因此我们先实现一个判断数据是否存在的函数。这个数据包含姓名、性别、地址等信息我们选择一个信息来判断这个数据是否存在这里我们选择通过姓名判断。int FindByName(Contact* con, char name[]) { for (int i 0; i con-size; i) { if (strcmp(con-arr[i].name, name) 0) { //找到了 return i; } } //没有找到 return -1; } //通讯录删除数据在这个函数里我们使用了strcmp函数来判断名字是否相同若相同则等于0当我们找到了对应的姓名则返回对应的下标方便数据的删除如果没找到则返回一个无效值-1删除数据我们同样可以使用顺序表定义的函数SLErase2.7展示通讯录数据1.打印表头姓名 性别 年龄 电话 地址2.遍历通讯录按照格式打印每个联系人数据void ContactShow(Contact* con) { //表头姓名 性别 年龄 电话 地址 printf(%s %s %s %s %s\n, 姓名, 性别, 年龄, 电话, 地址); //遍历通讯录按照格式打印每个联系人数据 for (int i 0; i con-size; i) { printf(%4s %4s %4d %4s %4s\n, con-arr[i].name, con-arr[i].gender, con-arr[i].age, con-arr[i].tel, con-arr[i].addr ); } }这里注意可以使用%4s向后对齐保证数据的对齐具体的对齐数据可以自行调试2.8通讯录的修改同样的修改数据之前也需要判断数据是否存在若存在再进行修改void ContactModify(Contact* con) { char name[NAME_MAX]; printf(请输入要修改的联系人姓名:\n); scanf(%s, name); int find FindByName(con, name); if (find 0) { printf(要修改的联系人姓名不存在!\n); return; } printf(请输入要修改的练习人姓名:\n); scanf(%s, con-arr[find].name); printf(请输入要修改的练习人性别:\n); scanf(%s, con-arr[find].gender); printf(请输入要修改的练习人年龄:\n); scanf(%d, con-arr[find].age); printf(请输入要修改的练习人电话:\n); scanf(%s, con-arr[find].tel); printf(请输入要修改的练习人地址:\n); scanf(%s, con-arr[find].addr); printf(修改成功!\n); }2.9通讯录查找1.打印表头姓名 性别 年龄 电话 地址2.判断数据是否存在若存在再打印数据void ContactFind(Contact* con) { char name[NAME_MAX]; printf(请输入要查找的联系人姓名:\n); scanf(%s, name); int find FindByName(con, name); if (find 0) { printf(要查找的联系人姓名不存在!\n); return; } //表头姓名 性别 年龄 电话 地址 printf(%s %s %s %s %s\n, 姓名, 性别, 年龄, 电话, 地址); //遍历通讯录按照格式打印查找联系人数据 printf(%4s %4s %4d %4s %4s\n, con-arr[find].name, con-arr[find].gender, con-arr[find].age, con-arr[find].tel, con-arr[find].addr ); }3.通讯录的具体实现1.打印目录2.创建通讯录变量con3.初始化通讯录4.通过switch case语句选择要执行的功能5.通过do while 循环执行打印目录和执行通讯录的功能6.销毁通讯录具体代码的呈现void menu() { printf(*****************通讯录****************\n); printf(*****1.增加联系人 2.删除联系人*****\n); printf(*****3.修改联系人 4.查找联系人*****\n); printf(*****5.展示联系人 0.退出通讯录*****\n); printf(***************************************\n); } int main() { int op -1; Contact con; ContactInit(con); do { menu(); printf(请选择您的操作:\n); scanf(%d, op); switch (op) { case 1: ContactAdd(con); break; case 2: ContactDel(con); break; case 3: ContactModify(con); break; case 4: ContactFind(con); break; case 5: ContactShow(con); break; case 0: printf(退出通讯录...\n); break; default: printf(选择错误请重新选择\n); break; } } while (op); ContactDesTroy(con); return 0; }结语这篇文章全文由作者手写图片由画图软件所制无AI制作希望各位博友能有所收获欢迎各位博友的讨论觉得不错的小伙伴别忘了点赞关注哦~
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2483751.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!