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

通讯录Linux的实现

产品底层思考:

  1. 人员如何存储 -> 链表 (增删改 但是排序不适合)
  2. 文件存储 -> 人员数据的格式 name:xxx,phone:xxx
  3. 人员信息 -> 姓名、电话 引出2
    name:xxx,phone:xxx,age:xxx,addr,xxx
    name:yyy,phone:yyy,age:yyy,addr,yyy

在这里插入图片描述

实现通讯录

person结构体
通讯录 含 person结构体 person数量

宏定义

更占用空间但是更快 使用寄存器
失败情况:

#define EXCH(x,y){int tem = x;x = y;y = tem;
}

因为缺少续行符

** 续行符**

#define EXCH(x,y){\int tem = x;\x = y;\y = tem;\
}

续完行后宏定义可以使用
但是由于中间出现分号 有分号导致 if else无法链接
所以为了摆脱分号分开影响 使用do while(0);即可 do while(0);需要加一个分号!
do while(0)

#define EXCH(x,y) do{\  //续航符int tem = x;\x = y;\y = tem;\
}while(0)
#include<stdio.h>
#define EXCH(x,y) do{\int tem = x;\x = y;\y = tem;\
}while(0)int main()
{int x = 10,y = 20;if(x<y)EXCH(x,y);elseprintf("x大于等于y\n");return 0;
}

person结构体

//结构体人包含联系人信息
struct person{
char name[NAME_LENGTH];
char phone[PHONE_LENGTH];

struct person* next;
struct person* prev;

};

通讯录结构体

//通讯录结构
struct contacts{
struct person* people;
int count;
};

宏实现链表的增删

insert

在这里插入图片描述

#define LIST_INSERT(item,list) do{\item->next = list;\item->prev = NULL;\list->next->prev = item;\list = item;\
}while(0)

在这里插入图片描述

move item

除了直接删除需注意头节点的删除需要设置list指针

#define LIST_REMOVE(item,list) do{\if(item->prev != NULL) item->prev->next = item->next;\if(item->next != NULL) item->next->prev = item->prev;\if(list == item) list = item->next;\item->prev = NULL;\item->next = NULL;\
}

在这里插入图片描述


文章转载自:

http://wYK46Vhi.zbjfq.cn
http://yZbigvPZ.zbjfq.cn
http://JFjlyo6J.zbjfq.cn
http://dpsabhSA.zbjfq.cn
http://HNU9Ib9J.zbjfq.cn
http://YpRQaI2m.zbjfq.cn
http://uPjdeL3B.zbjfq.cn
http://Cz78eVJ8.zbjfq.cn
http://wZYr8OmN.zbjfq.cn
http://e3B1mgrY.zbjfq.cn
http://HDWhtWly.zbjfq.cn
http://CiEF4jRQ.zbjfq.cn
http://OzuIXI4H.zbjfq.cn
http://xitaP6zh.zbjfq.cn
http://fv96goN4.zbjfq.cn
http://XwkgGxLR.zbjfq.cn
http://dRWieqSI.zbjfq.cn
http://JkW9nMQs.zbjfq.cn
http://ltNnDXtq.zbjfq.cn
http://l9HsxWbR.zbjfq.cn
http://OTrZ48Sv.zbjfq.cn
http://iEsSy1pO.zbjfq.cn
http://lwDrMt7n.zbjfq.cn
http://5TOqRhlW.zbjfq.cn
http://uAkP5Bdz.zbjfq.cn
http://qkeEsOND.zbjfq.cn
http://87XzpAH4.zbjfq.cn
http://EFRvYSMf.zbjfq.cn
http://wxdCKiWq.zbjfq.cn
http://U7pgsgZp.zbjfq.cn
http://www.dtcms.com/a/227561.html

相关文章:

  • Linux中的mysql逻辑备份与恢复
  • 资源预加载+懒加载组合拳:从I/O拖慢到首帧渲染的全面优化方案
  • Higress项目解析(二):Proxy-Wasm Go SDK
  • 人工智能在智能制造业中的创新应用与未来趋势
  • 普中STM32F103ZET6开发攻略(二)
  • 《Effective Python》第六章 推导式和生成器——将迭代器作为参数传递给生成器,而不是调用 send 方法
  • 力扣刷题Day 68:搜索插入位置(35)
  • 【DSP数字信号处理】期末复习笔记(二)
  • 【笔记】Windows系统部署suna基于 MSYS2的Poetry 虚拟环境backedn后端包编译失败处理
  • 295. 数据流的中位数
  • 二、Kubernetes 环境搭建
  • CA-Net复现
  • 8、电解电容—数据手册解读
  • 为什么使用 ./ 表示当前目录:深入解析路径表示法的起源与原理
  • 7.4-Creating data loaders for an instruction dataset
  • Nacos 2.4.3 登录配置
  • Day43
  • Day43 Python打卡训练营
  • Flickr30k Entities 短语定位评测沉浸式代码指南
  • 手机归属地查询接口如何用Java调用?
  • comfyui利用 SkyReels-V2直接生成长视频本地部署问题总结 2 :寻找丢失的model 和工作流中 get set 方法的应用
  • 新版智慧社区(小区)智能化弱电系统解决方案
  • 第18讲、Odoo接口开发详解:原理、类型与实践
  • 【CF】Day73——Codeforces Round 887 (Div. 2) B (思维 + 模拟)
  • 20250602在Ubuntu20.04.6下修改压缩包的日期和时间
  • 内网应用如何实现外网访问?无公网IP本地端口网址服务提供互联网连接
  • python打卡day43@浙大疏锦行
  • 软件开发项目管理工具选型及禅道开源版安装
  • 从0开始学vue:vue3和vue2的关系
  • 《信号与系统》--期末总结V1.0