C语言动态内存练习:【通讯录(动态内存版本)实现】

这篇具有很好参考价值的文章主要介绍了C语言动态内存练习:【通讯录(动态内存版本)实现】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

😀 前言

前面我们写了一个静态数组版本的通讯录,再结合刚学习的动态内存管理的知识,我们现在来实现一个动态内存版本的通讯录。

🤔 目标规划

动态内存版本的通讯录,主要还是为了解决静态数组版本的通讯录空间太大导致的内存浪费和空间太小不够存放的问题。

扩容策略:

为通讯录设置一个初始容量大小capacity,如果sizecapacity一样的,capacity扩大两个元素(如果觉得扩容操作太过频繁,可以实现二倍扩容)

🤨 结构变化

因为是动态内存版本,有扩容等操作,所以我们需要用capacity来表示空间的大小,size来表示使用了多少空间。其他的可以不用发生变化。

#define DEFAULT_CAPACITY 3	// 默认容量大小

typedef struct Contact 
{
	PeoInform* data;
	int size;
	int capacity;
} Contact;

😵‍💫 功能实现的不同点

既然结构变了,那么在实现功能的时候也会有点差异。

🙄 添加功能 AddContact

😍 扩容检查 CheckCapacity

再添加联系人之前我们需要先检查容量够不够,为了方便维护,我们还是封装一个函数。

// 检查增容
void CheckCapacity(Contact* con)
{
	assert(con);

	if (con->size == con->capacity)
	{
		PeoInform* temp = (PeoInform*)realloc(con->data, (con->capacity + 2) * sizeof(PeoInform));
		if (temp == NULL)
		{
			perror("CheckCapacity::realloc"); 
			return;
		}
		else
		{
			con->data = temp;
			con->capacity += 2;

			puts("扩容成功\n");
		}
	}
}

其他的还是老样子

// 添加联系人
void AddContact(Contact* con)
{
	assert(con);
	puts("");

	CheckCapacity(con);
	
	printf("请输入姓名 ->");
	scanf("%s", con->data[con->size].name);
	printf("请输入性别 ->");
	scanf("%s", con->data[con->size].sex);
	printf("请输入年龄 ->");
	scanf("%s", con->data[con->size].age);
	printf("请输入电话号码 ->");
	scanf("%s", con->data[con->size].telephon);
	printf("请输入地址 ->");
	scanf("%s", con->data[con->size].addrs);
	puts("");

	con->size++;

	printf("添加成功!\n");
}

🙄 销毁通讯录 DestroyContact

既然使用了动态内存,那么就需要注意内存泄漏问题,再退出之前需要将申请的空间释放。

// 销毁通讯录
void DestroyContact(Contact* con);
{
	assert(con);
	free(con->data);
	con->data = NULL;
	con->size = con->capacity = 0;
}

🌈 总结 + 源码

相较于静态数组,动态内存写起来更麻烦,但是对内存有着更加严谨的控制,所以还是推荐动态内存。

源码地址:动态内存版本通讯录文章来源地址https://www.toymoban.com/news/detail-412572.html

到了这里,关于C语言动态内存练习:【通讯录(动态内存版本)实现】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

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

    目录 前言: 一:单个节点的设计和主逻辑  结点设计 主逻辑 二:接口实现 (1)生成一个新的结点 (2)增加信息 (3)打印信息 (4)查找  (5)删除信息 (6)修改信息 (7)排序  插入排序 快速排序 (8)已有数据读取 (9)更新数据录入 三:全部代码 contact.h(声明) contact.c(接口) test.c(主逻辑) 本

    2024年02月05日
    浏览(58)
  • 【C语言】实现通讯录(动态+文件)

    在之前三子棋和扫雷的基础上,本篇文章博主将给大家逐步分析实现通讯录,介绍通讯录的每个功能( 动态增长和文件保存 )。 —————————————————————— test.c - 测试通讯录 Contact.c - 函数的实现 Contact.h - 函数和类型的声明 以多文件的形式分模块写的

    2024年02月13日
    浏览(56)
  • 【C语言】实现动态版通讯录

    💌内容专栏:【C语言】进阶部分 💌本文概括: 结合自定义类型、动态内存管理知识,对静态版本的通讯录进行优化。 💌本文作者:花 碟 💌发布时间:2023.4.2   目录 前言: 一、静态版本代码实现: 二、动态通讯录  三、代码整理  前面我们学过了结构体、枚举等自定义

    2024年02月02日
    浏览(45)
  • C语言实现通讯录--动态版

    实现一个通讯录,联系人的数量可多可少 1.在静态版本的基础上改用动态的方法: (1)默认能够存放三个人的信息 (2)不够的话,每次增加两个人的信息 2.其他功能不变 建立三个文件: test.c 用于测试通讯录的相关功能 contsct.c 通讯录的实现模块(用函数实现功能) conta

    2024年02月15日
    浏览(52)
  • 通讯录的实现(静态版本,动态版本,文件版本)(后附完整源代码)

    对于通讯录来说,我们需要它实现以下几个功能。 1.人的信息:姓名+年龄+性别+电话+地址。 2.可以存放100个人的信息。 功能: 1增加联系人。 2删除联系人。 3查找指定联系人信息。 4修改指定联系人信息。 5显示所有联系人信息。 6按名字排序。 接下来分为三个模块,test.c

    2024年01月19日
    浏览(47)
  • 手机通讯录的实现——C语言(静态版本)

    目录 一:通讯录的思想 二:通讯录的实现 1.创建文件 2.打印菜单 3.创建联系人结构体 4.初始化菜单 5.实现菜单的功能 a.增加联系人 b.删除联系人 c.查找联系人 d.修改联系人 e.打印联系人 三:总结 我们将每一位联系人的姓名,性别,年龄,电话,地址来用一个结构体保存,用

    2024年02月09日
    浏览(42)
  • C语言实现通讯录(三合一版本)

    作者主页: paper jie的博客_CSDN博客 本文作者: 大家好,我是paper jie,感谢你阅读本文,欢迎一建三连哦。 本文录入于 《C语言》专栏,本专栏是针对于大学生,编程小白精心打造的。笔者用重金(时间和精力)打造,将基础知识一网打尽,希望可以帮到读者们哦。 其他专栏:

    2024年02月16日
    浏览(44)
  • 【C语言】——动态内存管理与文件操作,后面加一个通讯录福利,万字解读,看完你会有一个全新认识

    目录 一.动态内存管理 1.为什么有动态内存管理 2.malloc和free  2.calloc和realloc 3.柔性数组 二.文件操作 1.为什么使用文件  2.二进制文件和文本文件  3.文件的打开和关闭 4.文件的顺序读写 5.文件缓冲区 三.通讯录  1.预处理  2.基本框架 3.初始化函数 4.增加联系人  5.显示联系人

    2024年03月13日
    浏览(38)
  • C语言之通讯录的实现(静态版,动态版,文件版)

    个人主页(找往期文章包括但不限于本期文章中不懂的知识点): 我要学编程(ಥ_ಥ)-CSDN博客 目录 静态通讯录的实现逻辑  test.c:通讯录的逻辑实现 Contact.h:函数的声明与头文件的包含 Contact.c:函数的实现  通讯录源码:  test.c: Contact.c: Contect.h: 动态版通讯录  test.c: Co

    2024年04月13日
    浏览(42)
  • 【进阶C语言】动态版通讯录的实现(详细讲解+全部码源)

    前言 📕作者简介: 热爱跑步的恒川 ,致力于 C/C++、Java、Python 等多编程语言,热爱跑步,喜爱音乐的一位博主。 📗本文收录于 C语言进阶 系列,本专栏主要内容为数据的存储、指针的进阶、字符串和内存函数的介绍、自定义类型结构、动态内存管理、文件操作等,持续更

    2024年02月01日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包