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

西安市规划建设局网站/兰州seo培训

西安市规划建设局网站,兰州seo培训,网站建设与网站设计,wordpress 导入分类一. 增加需求 在学习了动态开辟内存之后 我们对于通讯录产生了新的需求 要求我们做出一个动态增长的版本 即 随着我们储存联系人的增加 储存的空间增加 要求 : 1 初始空间为3 2 每次达到上限之后 扩容两个内存 二. 动手实施 我们首先要创建一个结构体 结构体…

一. 增加需求

在学习了动态开辟内存之后 我们对于通讯录产生了新的需求

要求我们做出一个动态增长的版本

即 随着我们储存联系人的增加 储存的空间增加

要求 :

1 初始空间为3
2 每次达到上限之后 扩容两个内存

二. 动手实施 

我们首先要创建一个结构体

结构体的代码暂定为这样子

typedef struct Contact
{PeoInfo* date;//存放人的信息int sz;//当前已经放的信息个数int capacity;//当前通信录的最大容量
}Contact;

 既然结构体改变了 那么我们的初始化也需要改变一下

void InitContact(Contact* pc)
{assert(pc);pc->sz = 0;PeoInfo* ptr = (PeoInfo*)calloc(DEFAULT_SZ, sizeof(PeoInfo*));if (ptr == NULL){perror("InitContact::calloc");return ;}pc->date = ptr;pc->capacity = DEFAULT_SZ;
}

这样我们就初始化出来了 一块新的空间

那么这个时候我们开始设计增加联系人的功能

主要思路就是 如果联系人到了上线的话 那么realloc增容上线+2

另外 上线也加上2

代码表示如下

void check_capacity(Contact* pc)
{if (pc->sz == pc->capacity){//增容PeoInfo* ptr = (PeoInfo*)realloc(pc->date, (pc->capacity + INC_SZ) * sizeof(PeoInfo));if (ptr == NULL){perror("check_capacity::realloc");}elsepc->date = ptr;pc->capacity += INC_SZ;printf("增容成功\n");}
}
//动态版本
void AddContact(Contact* pc)
{assert(pc);check_capacity(pc);//增加一个人的信息printf("请输入名字:>");scanf("%s", pc->date[pc->sz].name);printf("请输入年龄:>");scanf("%d", &(pc->date[pc->sz].age));printf("请输入性别:>");scanf("%s", pc->date[pc->sz].sex);printf("请输入地址:>");scanf("%s", pc->date[pc->sz].addr);printf("请输入电话:>");scanf("%s", pc->date[pc->sz].tele);pc->sz++;}

代码显示效果如下

三. 回收空间

其他要修改的地方只是一个回收动态开辟的空间 防止内存泄漏

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

代码很简单 只需要这样子就好啦

四. 所有代码文件

1. 头文件

#include<stdio.h>
#include<assert.h>
#include<string.h>
#include<stdlib.h>
#include<stdlib.h>#define MAX 100
#define MAX_NEME 20
#define MAX_SEX 5
#define MAX_ADDR 30
#define MAX_TELE 12
#define DEFAULT_SZ 3
#define INC_SZ 2//人的信息
typedef struct PeoInfo
{char name[MAX_NEME];int age;char sex[MAX_SEX];char addr[MAX_ADDR];char tele[MAX_TELE];
}PeoInfo;
//静态版本
//typedef struct Contact
//{
//	PeoInfo date[MAX];//存放人的信息
//	int sz;//当前已经放的信息个数
//}Contact;
//动态版本
typedef struct Contact
{PeoInfo* date;//存放人的信息int sz;//当前已经放的信息个数int capacity;//当前通信录的最大容量
}Contact;

2. 主函数文件

void memu()
{printf("********************************\n");printf("*****   1.add     2.del    *****\n");printf("*****   3.search  4.modify *****\n");printf("*****   5.show    6.sort   *****\n");printf("*****   0.exit             *****\n");printf("********************************\n");
}
enum Option
{EXIT,ADD,DEL,SEARCH,MODIFY,SHOW,SORT
};
void test()
{int input = 0;//创建通信录Contact con;//初始化通信录InitContact(&con);do{memu();printf("请选择:>");scanf("%d", &input);switch (input){case ADD:AddContact(&con);break;case DEL:DelContact(&con);break;case SEARCH:SearchContact(&con);break;case MODIFY:ModityContact(&con);break;case SHOW:ShowContact(&con);break;case SORT://SortContact(&con);break;case EXIT:DestroyContact(&con);printf("退出通信录\n");break;default:printf("选择错误,请重新选择\n");break;}} while (input);
}
int main()
{test();return 0;
}

3. 测试文件

#define _CRT_SECURE_NO_WARNINGS
#include"contact.h"
//静态版本
//void InitContact(Contact* pc)
//{
//	assert(pc);
//	pc->sz = 0;
//	memset(pc->date, 0, sizeof(pc->date));
//}
//动态版本
void InitContact(Contact* pc)
{assert(pc);pc->sz = 0;PeoInfo* ptr = (PeoInfo*)calloc(DEFAULT_SZ, sizeof(PeoInfo*));if (ptr == NULL){perror("InitContact::calloc");return ;}pc->date = ptr;pc->capacity = DEFAULT_SZ;
}//静态版本
//void AddContact(Contact* pc)
//{
//	assert(pc);
//	if (pc->sz == MAX)
//	{
//		printf("通信录已满,无法添加\n");
//		return ;
//	}
//	//增加一个人的信息
//	printf("请输入名字:>");
//	scanf("%s", pc->date[pc->sz].name);
//	printf("请输入年龄:>");
//	scanf("%d", &(pc->date[pc->sz].age));
//	printf("请输入性别:>");
//	scanf("%s", pc->date[pc->sz].sex);
//	printf("请输入地址:>");
//	scanf("%s", pc->date[pc->sz].addr);
//	printf("请输入电话:>");
//	scanf("%s", pc->date[pc->sz].tele);
//	pc->sz++;
//
//}void check_capacity(Contact* pc)
{if (pc->sz == pc->capacity){//增容PeoInfo* ptr = (PeoInfo*)realloc(pc->date, (pc->capacity + INC_SZ) * sizeof(PeoInfo));if (ptr == NULL){perror("check_capacity::realloc");}elsepc->date = ptr;pc->capacity += INC_SZ;printf("增容成功\n");}
}
//动态版本
void AddContact(Contact* pc)
{assert(pc);check_capacity(pc);//增加一个人的信息printf("请输入名字:>");scanf("%s", pc->date[pc->sz].name);printf("请输入年龄:>");scanf("%d", &(pc->date[pc->sz].age));printf("请输入性别:>");scanf("%s", pc->date[pc->sz].sex);printf("请输入地址:>");scanf("%s", pc->date[pc->sz].addr);printf("请输入电话:>");scanf("%s", pc->date[pc->sz].tele);pc->sz++;}void DestroyContact(Contact* pc)
{free(pc->date);pc->date = NULL;pc->capacity = 0;pc->sz = 0;pc = NULL;
}void ShowContact(const Contact* pc)
{assert(pc);int i = 0;printf("%-20s\t%-4s\t%-5s\t%-20s\t%-12s\n", "名字", "年龄", "性别", "地址", "电话");for (i = 0; i < pc->sz; i++){printf("%-20s\t%-4d\t%-5s\t%-20s\t%-12s\n", pc->date[i].name,pc->date[i].age,pc->date[i].sex,pc->date[i].addr,pc->date[i].tele);}
}int FindByName(Contact* pc, char name[])
{int i = 0;for (i = 0; i < pc->sz; i++){if (strcmp(pc->date[i].name, name) == 0){return i;}}return -1;
}void DelContact(Contact* pc)
{assert(pc);int i = 0;char name[MAX_NEME];if (pc->sz == 0){printf("通讯录为空,无法删除\n");}printf("请输入要删除人的名字:>");scanf("%s", &name);int del = 0;//找到删除人的名字int ret = FindByName(pc, name);if (-1 == ret){printf("要删除的人不存在\n");}//删除for (i = ret; i < pc->sz - 1; i++){pc->date[i] = pc->date[i + 1];}pc->sz--;printf("删除成功\n");
}void SearchContact(const Contact* pc)
{char name[MAX_NEME] = { 0 };printf("请输入查找人的名字:>");scanf("%s", &name);int pos = FindByName(pc, name);if (-1 == pos){printf("查找人的信息不存在\n");return ;}//打印信息printf("%-20s\t%-4s\t%-5s\t%-20s\t%-12s\n", "名字", "年龄", "性别", "地址", "电话");printf("%-20s\t%-4d\t%-5s\t%-20s\t%-12s\n", pc->date[pos].name,pc->date[pos].age,pc->date[pos].sex,pc->date[pos].addr,pc->date[pos].tele);}void ModityContact(Contact* pc)
{assert(pc);char name[MAX_NEME] = { 0 };printf("请输入修改人的名字:>");scanf("%s", &name);int pos = FindByName(pc, name);if (-1 == pos){printf("修改人的信息不存在\n");return;}//录入信息printf("请输入名字:>");scanf("%s", pc->date[pos].name);printf("请输入年龄:>");scanf("%d", &(pc->date[pos].age));printf("请输入性别:>");scanf("%s", pc->date[pos].sex);printf("请输入地址:>");scanf("%s", pc->date[pos].addr);printf("请输入电话:>");scanf("%s", pc->date[pos].tele);printf("修改完成\n");
}//int cmp(void* a, void* b)
//{
//	Contact* p1 = (Contact*)a;
//	Contact* p2 = (Contact*)b;
//	return strcmp(p1->date->name, p2->date->name);
//}
//
//void SortContact(Contact* pc)
//{
//
//	qsort(pc, pc->sz, sizeof(Contact*), cmp);
//}

以上便是本文所有内容,如有错误请各位大佬不吝赐教,感谢留言

http://www.jmfq.cn/news/5348917.html

相关文章:

  • 金寨县建设局网站/外链平台
  • 浙江省建设厅干部学校门户网站/东莞营销网站建设推广
  • 宁夏住房和城乡建设厅网站办事窗口/广告推广免费发布
  • 学网站建设与管理好吗/信息流广告优化
  • 网站建设内容清单/建个网站需要多少钱?
  • 绵阳辉煌网站建设/东莞做好网络推广
  • 个人网站建设的计划书/企业推广策划书
  • 四川高速公路建设开发集团有限公司网站/百度识图搜索图片来源
  • 建设网站要什么/写软文推广
  • 赣州网站建设平台/seo搜索引擎优化岗位要求
  • 海安企业网站建设/网站seo报告
  • 民兵信息化网站建设/百度优化点击软件
  • 网站建设深圳公司哪家好/个人建网站步骤
  • 江西专业的网站建设公司/百度关键词收录
  • 网站建设成立领导小组/纯注册app拉新平台
  • 金乡网站建设/如何做互联网营销推广
  • 中国建设网站用户名/站外推广渠道
  • 泸州市住房和城乡建设网站/百度投诉中心24小时电话
  • 信息公司网站建设方案+游戏/软文新闻发布网站
  • 武汉大型网站建设/全面落实疫情防控优化措施
  • 智能网站建设哪家好/免费手游推广平台
  • 企业网站建设内容规划/品牌推广手段
  • 网站建设费用请示/网站模板源码
  • 网站建设的设计总结/东莞百度快照优化排名
  • 网站建设维护工作/seo搜索是什么
  • 建设个电影网站多少钱/代运营
  • 网站建设品/纵横seo
  • 加盟餐饮的网站建设/搜索引擎主要包括三个部分
  • web个人网站的建设/网络营销型网站
  • 什么是网站建设的重点/软文营销的本质