当前位置: 首页 > news >正文

北京市网站建设企业网站推广苏州

北京市网站建设企业,网站推广苏州,视频网站怎么做排名,微信公众号优惠劵网站怎么做的这篇文章是在上期实现的通讯录基础上,增加了自动增容的功能,也解决了一开始通讯录自动开辟一个空间,可能会浪费空间,或者是信息过多无法增容的痛点,由于我们使用的是malloc这类函数来开辟空间,我们也需要来…

这篇文章是在上期实现的通讯录基础上,增加了自动增容的功能,也解决了一开始通讯录自动开辟一个空间,可能会浪费空间,或者是信息过多无法增容的痛点,由于我们使用的是malloc这类函数来开辟空间,我们也需要来释放空间,所以我们定义了一个销毁通讯录的函数.

上期文章 :1.0版本

 

1.增容策略 

这里我们也不用2倍或者是1.5倍增容,我们干脆就一开始给可以容纳三条信息的空间,后面每次增容两条信息的空间,主要是便于我们的测试,这里我们定义两个宏,便于我们以后来调整开始和增容的人数.

#define DEFAULT_SIZE 3
#define DEFAULT_INC 2

2.修改代码

2.1初始化

我们这里只需要修改三个地方的代码,首先是函数初始化的地方需要修改,我们需要将原来初始化为100的通讯录改成一开始初始化三个,然后每次扩容添加两个.

//静态版本
//void  InitContact(Contact* pc)
//{
//	assert(pc);
//	pc->sz = 0;
//	memset(pc->data, 0, sizeof(pc->data));
//}
//动态版本
void  InitContact(Contact* pc)
{assert(pc);pc->sz = 0;pc->capacity = DEFAULT_SIZE;pc->data = calloc(pc->capacity ,sizeof(PeoInfo));if (pc->data == NULL){perror("error");return;}
}

2.2 增容 

 接下来就是对添加函数进行修改了,这里我们将添加函数中的扩容功能封装成另一个函数,减少代码的耦合性,使得看起来更清爽.

//静态版本
//void AddContact(Contact* pc)
//{
//	assert(pc);
//	if (pc->sz == MAX)
//	{
//		printf("通讯录已满,无法增加");
//		return;
//	}
//	printf("请输入名字:>\n");
//	scanf("%s", pc->data[pc->sz].name);
//	printf("请输入年龄:>\n");
//	scanf("%d", &(pc->data[pc->sz].age));
//	printf("请输入性别:>\n");
//	scanf("%s", (pc->data[pc->sz].sex));
//	printf("请输入电话:>\n");
//	scanf("%s", (pc->data[pc->sz].tele));
//	printf("请输入地址:>\n");
//	scanf("%s", (pc->data[pc->sz].addr));
//	pc->sz++;
//	printf("增加成功\n");
//}//动态版本
void CheckCapacity(Contact* pc)
{if (pc->sz == pc->capacity){PeoInfo* ptr = (PeoInfo*)realloc(pc->data, (pc->capacity + DEFAULT_INC) * sizeof(PeoInfo));if (ptr != NULL){pc->data = ptr;pc->capacity += DEFAULT_INC;printf("增容成功");}else{perror("扩容失败");return;}}
}void AddContact(Contact* pc)
{assert(pc);CheckCapacity(pc);printf("请输入名字:>\n");scanf("%s", pc->data[pc->sz].name);printf("请输入年龄:>\n");scanf("%d", &(pc->data[pc->sz].age));printf("请输入性别:>\n");scanf("%s", (pc->data[pc->sz].sex));printf("请输入电话:>\n");scanf("%s", (pc->data[pc->sz].tele));printf("请输入地址:>\n");scanf("%s", (pc->data[pc->sz].addr));pc->sz++;printf("增加成功\n");
}

2.3 销毁空间 

 接下来我们对开辟的空间进行销毁,本质上就是对指针置空,释放空间即可.

void DestoryContact(Contact* pc)
{free(pc->data);pc->capacity = 0;pc->sz = 0;pc->data = NULL;
}

 

 

http://www.dt0577.cn/news/7950.html

相关文章:

  • 政府网站建设的目标做网络推广有前途吗
  • 做普通网站需要多少钱大连百度推广公司
  • 网站如何做单项链接如何创建网站教程
  • 杭州萧山做网站公司优化设计七年级上册数学答案
  • 聊城哪里做网站seo技术培训江门
  • 重庆网站建设公司多少钱东莞营销网站建设推广
  • 帮网贷做网站会判刑吗怎样优化网站排名靠前
  • 桂林网站开发网站优化seo培
  • 中国污水处理工程网成都seo培
  • 网站开发草图西安seo报价
  • 韩国美食做视频网站有哪些优化大师官网
  • 做网站的人会不会拿走我的网站集客营销软件官方网站
  • 深圳网站关键词排名优化百度推广找谁做
  • 营销型网站建设应该注意什么网络营销的未来发展趋势论文
  • 小微企业生产管理软件上海关键词优化按天计费
  • 微商城网站建设新闻网站开发步骤
  • 404 没有找到网站 试试申请收录吧厦门百度广告开户
  • 营销单页网站模板宁波谷歌seo推广
  • 一级a做爰免费网站今日广州新闻头条
  • css做网站企业网站seo多少钱
  • 常见的网站建设技术有哪些如何提升网站seo排名
  • 电商网站建设流程查域名注册详细信息查询
  • 网络推广网站首页大图百度搜索关键词设置
  • 达美网站建设360网站收录
  • 想做网站制作运营注册什么公司核实网络商城应该如何推广
  • 医药医疗行业网站建设网络营销的特点有
  • 网站程序怎么上传seo搜索排名影响因素主要有
  • 聚名网络代做seo排名
  • 政府网站建设应急预案泉州百度首页优化
  • 公司网站模板图片江苏网页定制