1

C语言实现通讯录(动态版)

 2 years ago
source link: https://blog.csdn.net/chuxinchangcun/article/details/120616347
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

前面我们已经了解过了C语言实现通讯录( 静态版),接下来,我们了解一下动态版的通讯录是怎么实现的。


目录

一.动态通讯录和静态通讯录的区别

二.动态通讯录接口函数实现

动态通讯录基本结构

1.初始化

2.增容

3.打印成员

4.删除成员

5.增加成员

6.查找成员信息

7.查找成员是否存在

8.修改成员信息

9.按名字排序通讯录成员

10.按年龄排序通讯录成员

11.释放通讯录

三.源码

Contact.c

Contact.h

test.c


一.动态通讯录和静态通讯录的区别

静态通讯录:通讯录成员数组是一个定长数组.当数组大小过大时,可能会造成空间的浪费。当数组大小过小时,存储不了太多的成员。

动态通讯录:使用的是动态数组。指针指向一个动态开辟的数组。当空间不够时,可以进行扩容,这样的话就不会造成空间的浪费。


二.动态通讯录接口函数实现

文件名功能Contact.c通讯录函数接口的实现Contact.h宏定义,头文件,接口函数的声明test.c函数接口测试

动态通讯录基本结构

与静态通讯录的不同点:指针指向动态开辟的数组,空间不够可以扩容!

1.初始化

动态开辟空间,先给3个成员大小。不够则每次增加两个成员。


一次增加两个成员,要重新调整通讯录成员数组的空间->使用realloc函数

注意:容量也需要改变,增加两个成员->容量+2


3.打印成员

遍历动态开辟的数组进行打印即可,pc->size的大小即为成员个数


4.删除成员

思路:在要删除成员的位置:后面的成员往前覆盖


5.增加成员

注意:增加成员时:要判断容量是否满了

当容量和size大小一样时,说明通讯录满了,增容


6.查找成员信息

输入名字,调用查找函数,找到了返回下标,则打印下标对应成员的信息。


7.查找成员是否存在

遍历通讯录成员数组进行名字比对,找到了返回对应的下标


8.修改成员信息

输入名字,调用查找函数,找到了返回下标,修改对应成员的信息。


9.按名字排序通讯录成员

方法1:qsort函数

不知道的可以看一下我以前写过的文章:qsort函数详解

注意:此时写的比较函数,比较的是通讯录成员,所以e1和e2强转的类型为:struct PenInfo*

而不是struct Contact*


方法2:冒泡排序

要排序的是通讯录成员数组,可以按名字排序->strcmp


10.按年龄排序通讯录成员

和按名字排序同理

方法1:qsort函数

返回值为:两个指针指向的年龄直接相减的结果


方法2:冒泡排序 


11.释放通讯录

因为通讯录内的成员数组是动态开辟的,所以使用完要进行释放,并把指针置空。防止内存泄漏


Contact.c


Contact.h


test.c


如果感觉此文章对你有帮助,欢迎各位大佬留个三连呀~


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK