当前位置: 首页 > 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://www.xdnf.cn/news/774919.html

相关文章:

  • 如何选择合适的哈希算法以确保数据安全?
  • 列表推导式(Python)
  • 线程间和进程间是如何进行通信
  • PH热榜 | 2025-05-30
  • Linux中的mysql逻辑备份与恢复
  • 【AI+若依框架】基础应用篇
  • CUDA内存溢出问题解决方案
  • C++学习打卡1.01
  • SAP BC 修复MM60 报错的问题
  • MySQL 核心知识整理【一】
  • AI智能体|扣子(Coze)搭建【合同/文档审查】工作流
  • 应用程序错误 application error (0xc000007b) 处理方法
  • URL的结构与作用
  • ubuntu系统扩容
  • [SC]SystemC dont_initialize的应用场景详解(一)
  • 198. 打家劫舍
  • 如何用AI写作?
  • RFC 4862 IPv6 Stateless Address Autoconfiguration 翻译
  • [蓝桥杯]交换次数
  • 《汇编语言》第13章 int指令——实验13 编写、应用中断例程
  • Redis持久化机制详解:RDB与AOF的深度剖析
  • 麒麟信安安装谷歌浏览器
  • 计算机视觉---深度学习框架(Backbone、Neck、Head)
  • webpack和vite的区别
  • 技术博客:线程池的暗礁——Executors工厂类为何成为Java高并发系统的禁忌
  • 探秘Transformer系列之(35)--- 大模型量化基础
  • node-sass 报错
  • 第二章 AI大模型接入
  • jquery复习
  • MySQL指令个人笔记