片头
在上一篇中,我们学习了什么是顺序表以及如何实现顺序表,今天我们将使用顺序表的结构来完成通讯录的实现,准备好了吗? 我们开始咯!
我们都知道,顺序表实际上就是一个数组,而使用顺序表来实现通讯录,它的本质就是将顺序表中存放的数据类型改为结构体,将联系人的信息存放到结构体中,通过对顺序表的操作来访问通讯录。
因此,我们可以将通讯录理解为套壳的顺序表。
一、功能
(1)能够保存联系人的姓名、年龄、性别、电话、住址
(2)添加联系人信息
(3)删除联系人信息
(4)修改联系人信息
(5)查找联系人信息
(6)查看通讯录中所有联系人的信息
(7)清空通讯录
二、代码实现
实现通讯录我们要创建5个文件来实现不同的部分:
SeqList.h | 顺序表定义、头文件引用和顺序表接口函数的声明 |
SeqList.c | 顺序表接口函数的实现 |
Contact.h | 信息结构体的定义和通讯录函数的声明 |
Contact.c | 通讯录函数的实现 |
test.c | 界面设计和通讯录主函数实现 |
(1) SeqList.h
在实现通讯录函数的时候我们可以套用顺序表的接口函数以减轻工作量,但是这并不意味着所有顺序表的函数都能直接照搬。下面展示SeqList.h的代码:
#pragma once
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<string.h>
#include"Contact.h"
//顺序表元素种类为存放个人信息的结构体
typedef struct PersonInfo ElemType;
typedef struct SeqList {
ElemType* arr;
int size;
int capacity;
}SL;
//顺序表初始化
void SLInit(SL* ps);
//检查空间,如果为空或者已满,进行扩容
void SLCheckCapacity(SL* ps);
//顺序表尾插
void SLPushBack(SL* ps, ElemType x);
//指定位置删除数据
void SLErase(SL* ps, int pos);
//顺序表销毁
void SLDestroy(SL* ps);
(2) SeqList.c
SeqList.c 的代码如下:
#include"SeqList.h"
//顺序表初始化
void SLInit(SL* ps) {
assert(ps);
ps->arr = NULL;
ps->capacity = 0;
ps->size = 0;
}
//顺序表销毁
void SLDestroy(SL* ps) {
assert(ps);
if (ps->arr) {
free(ps->arr);
ps->