动态版通讯录

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

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


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


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


结构体存放联系人信息

#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++;
}


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

相关文章
|
安全 图形学
|
存储 缓存 负载均衡
数据库分库分表:提升系统性能的必由之路
数据库分库分表:提升系统性能的必由之路
330 1
|
9月前
|
人工智能
AI对话网站一键生成系统源码
可以添加进自己的工具箱,也可以嵌入自己博客的页面中,引流效果杠杠的,新拟态设计风格,有能力的大佬可以进行二开,仅提供学习,用户可输入网站名称、AI默认的开场白、AI头像昵称、AI网站中引流的你的网站等等内容,所有生成的网页全部保存到你的服务器上
243 27
AI对话网站一键生成系统源码
|
9月前
|
存储 算法 Java
解锁“分享文件”高效密码:探秘 Java 二叉搜索树算法
在信息爆炸的时代,文件分享至关重要。二叉搜索树(BST)以其高效的查找性能,为文件分享优化提供了新路径。本文聚焦Java环境下BST的应用,介绍其基础结构、实现示例及进阶优化。BST通过有序节点快速定位文件,结合自平衡树、多线程和权限管理,大幅提升文件分享效率与安全性。代码示例展示了文件插入与查找的基本操作,适用于大规模并发场景,确保分享过程流畅高效。掌握BST算法,助力文件分享创新发展。
|
11月前
|
机器学习/深度学习 测试技术 定位技术
新扩散模型OmniGen一统图像生成,架构还高度简化、易用
近期,一篇题为“OmniGen: Unified Image Generation”的论文介绍了一种新型扩散模型OmniGen,旨在统一图像生成任务。OmniGen架构简洁,无需额外模块即可处理多种任务,如文本到图像生成、图像编辑等。该模型通过修正流优化,展现出与现有模型相当或更优的性能,尤其在图像编辑和视觉条件生成方面表现突出。OmniGen仅含3.8亿参数,却能有效处理复杂任务,简化工作流程。尽管如此,OmniGen仍存在对文本提示敏感、文本渲染能力有限等问题,未来研究将继续优化其架构与功能。
282 16
|
前端开发 JavaScript API
前端JS读取文件内容并展示到页面上
前端JavaScript使用FileReader API读取文件内容,支持文本类型文件。在文件读取成功后,可以通过onload事件处理函数获取文件内容,然后展示到页面上。
469 2
前端JS读取文件内容并展示到页面上
|
关系型数据库 MySQL PostgreSQL
postgresql和mysql中的limit使用方法
postgresql和mysql中的limit使用方法
443 1
OpenStack技术栈-OpenStack环境初始化
文章介绍了如何配置网卡bond模式,搭建时间同步服务器,并提供了OpenStack环境初始化的步骤和建议。
206 1
OpenStack技术栈-OpenStack环境初始化
|
供应链 网络协议 数据安全/隐私保护