前言
建议先看顺序表(上卷)、顺序表(下卷),再来看本篇。
思路
通讯录就是由一条条联系人数据组成的。在一条联系人数据中会有一些相关信息:姓名、性别、年龄、电话、住址等。
在“顺序表(上卷)”中,将数组比喻为苍蝇馆子,顺序表比喻为米其林,那么现在的通讯录就可以比喻为“国宴”。
前面我们的顺序表存储的都是单一的内置类型,现在我们可以用顺序表存储自定义类型,也就是结构体类型。 我们的一条联系人数据就是一个结构体变量。
我们可以给顺序表的每一个单元存储结构体(也就是一条联系人数据),这个顺序表就成为了我们的通讯录。可以给这个顺序表取名叫通讯录。
正文
同样的我们的通讯录需要.h文件(通讯录的头文件), .c文件(通讯录的实现文件)。
首先,我们在Contact.h中定义联系人数据的结构:
有了这个结构后,我们就可以去SeqList.h中替换:
原本我们在SeqList.h中有这句代码:
typedef int SLDataType;
也就是我们原来的顺序表存的是int类型数据,现在我们应该改为我们刚定义的结构体类型:
为什么报错,别忘了这一步:
#include"Contact.h"
在SeqList.h中包含“Contact.h”,才能找到peoInfo。
然后在Contact.h中我们最好给SL换个名字,SL代表着顺序表,现在我们想将其改为更能直接体现通讯录的名字:
//给顺序表改名字,叫做通讯录
typedef SL Contact;
但是这时我们因为没有在Contact.h里包含SeqList.h,找不到SL的定义,但是如果使用包含,Contact.h和SeqList.h变成了相互包含,会报错,所以在Contact.h中使用前置声明更好:
这样,就不报错了。注意:SeqList.c中的方法如果是结构体无法使用的要先注释掉。
通讯录的初始化
通讯录的销毁
可以看到有了顺序表后做通讯录等其他项目我们无需再手动实现方法,可以利用现成的顺序表的各种方法。
通讯录添加数据
Contact.c
test.c
通讯录删除数据
要删除的数据必须要存在才能执行删除操作。那么要怎样才能保证删除的数据存在呢?
所以在删除之前我们要先进行查找。从哪个维度查找呢?一条联系人数据有姓名、年龄等,应该根据哪个来查找?其实可以个性化选择。这里演示根据姓名来找:
Contact.c
test.c
通讯录展示数据
Contact.c
test.c
此时我们的表头和展示的数据没有对齐,比较不美观,可以进行调整:
通讯录数据的修改
Contact.c
test.c
菜单
我们期望的是代码运行起来后,能有菜单提示命令,可以去选择执行什么具体操作。
加入具体方法的选择:
小结
我们可以看到其实通讯录就是把顺序表封装了一层, 通讯录里的增删查改其实就是顺序表的增删查改。
本文到此结束,祝阅读愉快^_^