C语言实现通讯录——动态内存
发布人:shili8
发布时间:2025-01-07 20:20
阅读次数:0
**通讯录系统**
本文将介绍如何在 C语言中实现一个基本的通讯录系统。该系统将使用动态内存来存储联系人的信息。
### 系统设计我们的通讯录系统将包含以下功能:
* 添加联系人* 删除联系人* 修改联系人信息* 查询联系人信息* 显示所有联系人列表### 数据结构为了实现这些功能,我们需要定义一个数据结构来存储联系人的信息。我们将使用一个结构体来表示每个联系人:
ctypedef struct { char name[50]; // 名字 int age; // 年龄 char phone[20]; //电话号码} Person;
### 动态内存管理为了动态地分配和释放内存,我们将使用 `malloc` 和 `free` 函数:
c#include <stdlib.h> // 分配内存Person* allocatePerson() { return (Person*) malloc(sizeof(Person)); } //释放内存void freePerson(Person* person) { free(person); }
### 通讯录系统实现现在,我们可以开始实现通讯录系统的各个功能:
#### 添加联系人
c// 添加联系人void addContact(Person** contacts, int* size, Person* newContact) { // 检查是否有空闲空间 if (*size ==0 || *size %10 ==0) { // 扩容内存 *size *=2; *contacts = (Person**) realloc(*contacts, sizeof(Person*) * (*size)); } // 添加新联系人 for (int i = *size -1; i >=0; --i) { if (!*contacts[i]) { *contacts[i] = newContact; return; } } // 如果没有空闲空间,重新分配内存 *size *=2; *contacts = (Person**) realloc(*contacts, sizeof(Person*) * (*size)); addContact(contacts, size, newContact); }
#### 删除联系人
c// 删除联系人void deleteContact(Person** contacts, int* size, char* name) { // 找到要删除的联系人 for (int i =0; i < *size; ++i) { if (!strcmp(contacts[i]->name, name)) { // 将后面的联系人向前移动 for (int j = i +1; j < *size; ++j) { contacts[j -1] = contacts[j]; } // 缩容内存 *size -=1; if (*size >0 && *size %10 ==0) { *contacts = (Person**) realloc(*contacts, sizeof(Person*) * (*size)); } return; } } }
#### 修改联系人信息
c// 修改联系人信息void updateContact(Person** contacts, int* size, char* name, Person* newContact) { // 找到要修改的联系人 for (int i =0; i < *size; ++i) { if (!strcmp(contacts[i]->name, name)) { // 将新信息赋值给该联系人 contacts[i] = newContact; return; } } }
#### 查询联系人信息
c// 查询联系人信息Person* searchContact(Person** contacts, int size, char* name) { for (int i =0; i < size; ++i) { if (!strcmp(contacts[i]->name, name)) { return contacts[i]; } } return NULL; }
#### 显示所有联系人列表
c// 显示所有联系人列表void displayContacts(Person** contacts, int size) { for (int i =0; i < size; ++i) { printf("Name: %s, Age: %d, Phone: %s ", contacts[i]->name, contacts[i]->age, contacts[i]->phone); } }
### 主函数
cint main() { Person** contacts = NULL; int size =0; // 添加联系人 Person* newContact1 = allocatePerson(); strcpy(newContact1->name, "John"); newContact1->age =30; strcpy(newContact1->phone, "1234567890"); addContact(&contacts, &size, newContact1); Person* newContact2 = allocatePerson(); strcpy(newContact2->name, "Alice"); newContact2->age =25; strcpy(newContact2->phone, "9876543210"); addContact(&contacts, &size, newContact2); // 删除联系人 deleteContact(contacts, &size, "John"); // 修改联系人信息 Person* updatedContact = allocatePerson(); strcpy(updatedContact->name, "Alice"); updatedContact->age =26; strcpy(updatedContact->phone, "9876543210"); updateContact(contacts, &size, "Alice", updatedContact); // 查询联系人信息 Person* searchedContact = searchContact(contacts, size, "Alice"); if (searchedContact) { printf("Name: %s, Age: %d, Phone: %s ", searchedContact->name, searchedContact->age, searchedContact->phone); } else { printf("Not found! "); } // 显示所有联系人列表 displayContacts(contacts, size); return0; }
### 总结本文介绍了如何在 C语言中实现一个基本的通讯录系统。该系统使用动态内存来存储联系人的信息,并提供添加、删除、修改和查询等功能。主函数演示了如何使用这些功能。