C语言实现静态通讯录(顺序表):原理与完整代码解析
使用C语言基于静态数组(顺序表)实现拥有1000个位置的通讯录。通过模块化设计(头文件声明、源文件实现、主函数控制),涵盖联系人信息的增、删、改、查、显示、清空及按姓名字符串排序功能。
项目架构与核心逻辑
为了实现清晰的代码结构,项目拆分为三个部分:
Contact.h负责定义通讯录的结构体 Contact 和成员信息结构体 PeoInfo,以及所有函数的声明;test.c作为入口文件,处理菜单交互和主循环;Contact.c则集中实现所有具体的业务逻辑。
通讯录采用静态方式构建,容量固定为1000,一旦满员无法动态扩容。这种模式虽然简单直观,但存在空间利用率不高或缺席时浪费的问题,适合理解线性表的底层操作。
第1步:定义数据结构与接口
目的:建立数据模型并明确对外提供的功能范围。
文件:Contact.h
在头文件中,首先通过枚举 enum OP 定义菜单选项标识,避免使用魔法数字。随后定义两个核心结构体:
PeoInfo:包含姓名、性别、年龄、电话和住址的字符数组或整型字段。Contact:包含一个最大容量为MAX(1000)的PeoInfo数组data以及记录当前有效人数的size。
#define MAX 1000
typedef struct PeoInfo {
char name[20];
int age;
// 其他字段...
}PeoInfo;
typedef struct Contact {
PeoInfo data[MAX];
int size;
}Contact;
第2步:初始化与菜单驱动
目的:确保程序运行时通讯录处于空状态,并通过死循环响应用户操作。
文件:test.c
主函数中创建 Contact con 变量。调用 init_contact(&con) 使用 memset 清零内存并将 size 设为0。接着进入 while(input != 0) 循环,每轮打印菜单并根据输入调用对应的处理函数。这种方式将复杂的逻辑隐藏在各函数内部,保持了主函数的简洁性。
第3步:核心功能的模块化实现
目的:分别实现通讯录的业务规则。
文件:Contact.c
1. 添加信息 (_add_contact):
检查当前 pcon->size < MAX 以避免越界。若未满,提示用户输入各项字段数据存入 pcon->data[pcon->size],并在成功后将 size 加1。
2. 删除指定信息 (_del_contact):
先调用辅助函数 find 查找目标姓名索引。若找到(返回值不为-1),为了提高效率,直接将数组最后一个有效元素覆盖到被删除的位置,然后将 size 减1。这种方法不需要移动中间的大量元素,时间复杂度极低,但会改变被删除元素之后的排序。
3. 查找 (_search_contact):
利用 strcmp 遍历数组比对姓名,返回匹配者的全部详细信息。
4. 修改 (_modify_contact):
通过 find 定位后,弹出子菜单让用户选择要修改的字段(如姓名、电话等)。利用 strcpy 或赋值语句更新对应位置,注意年龄需转换为字符串读取后再赋值给整型变量。
第4步:排序与数据管理
排序 (_sort_contact):
采用冒泡排序算法,按照姓名字符串的字典序(ASCII值)进行比较。由于涉及整个结构体的交换,代码中定义了临时结构体变量 PeoInfo tmp 来保存交换数据,而非简单的指针互换(因为这里使用的是定长数组元素,直接拷贝最稳妥)。
清空 (_clear_contact):
仅将 size 重置为0即可。在实际物理内存尚未释放的情况下,这表示逻辑上的清空,下次添加将从索引0开始覆盖原有数据。
总结
该示例展示了C语言中使用结构体和数组模拟数据库的基本形态。虽然在现代开发中我们更多使用动态内存管理和文件持久化,但静态通讯录对于掌握内存布局、指针传递以及基础算法(如查找与排序)至关重要。
以上就是C语言编程内存分配通讯录静态实现示例代码教程的详细内容,更多关于C语言实现静态通讯录的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













