动态版通讯录

来了朋友们,今天给大家分享的是动态版本的通讯录。这个动态版本的通讯录较静态版本的通讯录的好处是,动态版本的通讯录对空间的浪费较少,并且可以随时增加空间,使用更加灵活。其实基本逻辑是跟静态版本的通讯录是一样的。在学习动态版本通讯录之前,我们可以先来看看静态版本的通讯录是怎样实现的吧。静态版本通讯录

我们的动态版本通讯录跟静态版本通讯录唯一不同的就是我们要实现增容函数以及不用的时候需要释放空间。那么我们就来看看动态版本的通讯录是怎样实现的吧。

因为我们的动态版本的通讯录内存是随时可变的,所以我们在定义通讯录的时候以及初始化通讯录的时候就不需要定义一个内存一定的数组。

结构体存放联系人信息

#define MAX_NAME 20
#define MAX_SEX 5
#define MAX_ADDR 20
#define MAX_TEL 12
#define ADD_CAPACITY 2

typedef struct PeoInfo
{
	char name[MAX_NAME];
	int age;
	char sex[MAX_SEX];
	char addr[MAX_ADDR];
	char tel[MAX_TEL];
}PeoInfo;

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

初始化通讯录

void InitContact(Contact* ps)
{
	PeoInfo* P = (PeoInfo*)malloc(3 * sizeof(PeoInfo));
	if (P == NULL)
	{
		printf("通讯录初始化失败:%s\n", strerror(errno));
		return;
	}
	ps->data = P;
	ps->capacity = 3;
	ps->size = 0;
}

添加联系人

void AddContact(Contact* ps)
{
	if (ps->size == ps->capacity)
	{
		PeoInfo* P1 = (PeoInfo*)realloc(ps->data, (ADD_CAPACITY + ps->capacity) * sizeof(PeoInfo));
		if (P1 == NULL)
		{
			printf("增容失败%s\n", strerror(errno));
			return;
		}
		ps->data = P1;
		ps->capacity += ADD_CAPACITY;
	}
	printf("请输入姓名:>");
	scanf("%s", ps->data[ps->size].name);
	printf("请输入年龄:>");
	scanf("%d", &(ps->data[ps->size].age));
	printf("请输入性别:>");
	scanf("%s", ps->data[ps->size].sex);
	printf("请输入地址:>");
	scanf("%s", ps->data[ps->size].addr);
	printf("请输入电话号码:>");
	scanf("%s", ps->data[ps->size].tel);

	printf("增加成功\n");
	ps->size++;
}

然后动态版本的通讯录跟静态版本的通讯录就差不多是这些差别,大家可以好好揣摩揣摩,感谢大家的观看。

  • 16
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不能再留遗憾了

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值