在c语言中用单链表实现通讯录系统并且具有输入,查找,添加,删除,修改和输出功能
时间: 2024-10-24 08:02:24 浏览: 43
在C语言中,我们可以使用结构体来表示联系人,并通过单链表的数据结构来存储通讯录信息。以下是基本的实现步骤:
1. **定义数据结构**:
```c
typedef struct Contact {
char name[50];
char phone[20];
struct Contact* next;
} Contact;
```
这里`Contact` 结构体包含姓名、电话号码以及指向下一个联系人的指针。
2. **链表操作函数**:
- **初始化列表**: 创建一个空链表
```c
Contact* createList() {
return NULL;
}
```
- **插入联系人**: 在链表末尾添加新的联系人
```c
void addContact(Contact* list, char* name, char* phone) {
Contact* newNode = (Contact*)malloc(sizeof(Contact));
strcpy(newNode->name, name);
strcpy(newNode->phone, phone);
newNode->next = NULL;
if (list == NULL) {
list = newNode;
} else {
Contact* temp = list;
while (temp->next != NULL) {
temp = temp->next;
}
temp->next = newNode;
}
}
```
- **查找联系人**: 搜索并返回指定姓名的节点
```c
Contact* searchContact(Contact* list, char* name) {
Contact* temp = list;
while (temp != NULL && strcmp(temp->name, name) != 0) {
temp = temp->next;
}
return temp;
}
```
- **删除联系人**: 删除指定名称的节点,如果存在
```c
void deleteContact(Contact** list, char* name) {
if (*list == NULL || (*list)->name == NULL) {
return;
}
Contact* prev = NULL, *current = *list;
if (strcmp(current->name, name) == 0) {
*list = current->next;
free(current);
return;
}
while (current != NULL && strcmp(current->name, name) != 0) {
prev = current;
current = current->next;
}
if (current != NULL) {
prev->next = current->next;
free(current);
}
}
```
- **修改联系人**: 更新指定名称的联系人信息
```c
void modifyContact(Contact** list, char* oldName, char* newName, char* newPhone) {
Contact* temp = searchContact(*list, oldName);
if (temp != NULL) {
strcpy(temp->name, newName);
strcpy(temp->phone, newPhone);
}
}
```
- **遍历并输出联系人**: 展示通讯录内容
```c
void displayContact(Contact* list) {
Contact* temp = list;
while (temp != NULL) {
printf("%s\t%s\n", temp->name, temp->phone);
temp = temp->next;
}
}
```
3. **主函数**:
```c
int main() {
// 初始化链表
Contact* contactList = createList();
// 用户交互操作...
return 0;
}
```
这个基础框架演示了如何使用单链表在C语言中构建一个简单的通讯录系统。用户可以调用上述函数来进行输入、查找、添加、删除、修改和输出联系人信息。记得处理用户输入错误和边界情况。
阅读全文