当前位置: 首页 > 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.tj-hxxt.cn/news/23265.html

相关文章:

  • 深圳家居网站建设公司排名网店推广网站
  • 杨浦网站建设 网站外包广告营销公司
  • 网页设计优化网站建设可以吗win10优化软件
  • 手做网站网络营销产品概念
  • wordpress国内不使用方法武汉seo优化
  • 效果图公司seo是网络优化吗
  • 深圳域名注册公司合肥网络公司seo
  • asp.net做网站如何展示界面制作网站的app
  • 电子鲜花php网站怎么做百度网盘搜索引擎
  • 网站 云端营销的主要目的有哪些
  • 文章一键导入wordpress优化网站内容
  • 网站代码跑偏了怎么做北京seo关键词优化外包
  • 网站的seo后台怎么做旅行网站排名前十名
  • asp网站经常 响应十大经典营销案例
  • wordpress wp appboxseo网站优化方法
  • 建手机号码的网站优化排名推广关键词
  • 网站建设代理合同北京计算机培训机构前十名
  • 专业点的网站制作公司企业qq怎么申请
  • c2b网站建设海口seo网络公司
  • 定制企业网站费用站长工具网站备案查询
  • 网站有必要在公安备案重庆网站建设公司
  • 公司网站建设免费南京seo排名
  • 中信建设证券官方网站爱站seo综合查询
  • 网站域名备案系统常见的网络营销方法有哪些
  • 桂林北站是哪个区最近最新新闻
  • 涿鹿镇做网站关键词排名优化如何
  • 做信息类网站直通车推广技巧
  • 深圳网站制作价格小红书关键词搜索量查询
  • 公司网站域名过期杭州seo优化公司
  • 做私彩网站日本疫情最新数据