当前位置:实例文章 » 其他实例» [文章]C语言实现通讯录——动态内存

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语言中实现一个基本的通讯录系统。该系统使用动态内存来存储联系人的信息,并提供添加、删除、修改和查询等功能。主函数演示了如何使用这些功能。

相关标签:
其他信息

其他资源

Top