使用C语言创建通讯录链表
时间: 2023-09-03 09:15:52 浏览: 47
以下是使用C语言创建通讯录链表的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义通讯录结构体
typedef struct AddressBook {
char name[20];
char phone[12];
struct AddressBook* next;
} AddressBook;
// 函数声明
void addContact(AddressBook** head);
void printContacts(AddressBook* head);
void deleteContact(AddressBook** head, char* name);
void searchContact(AddressBook* head, char* name);
int main() {
AddressBook* head = NULL;
int choice;
do {
printf("\n--通讯录操作--\n");
printf("1. 添加联系人\n");
printf("2. 显示所有联系人\n");
printf("3. 删除联系人\n");
printf("4. 查找联系人\n");
printf("5. 退出程序\n");
printf("请选择要进行的操作:");
scanf("%d", &choice);
switch (choice) {
case 1:
addContact(&head);
break;
case 2:
printContacts(head);
break;
case 3:
char name[20];
printf("请输入要删除的联系人姓名:");
scanf("%s", name);
deleteContact(&head, name);
break;
case 4:
char searchName[20];
printf("请输入要查找的联系人姓名:");
scanf("%s", searchName);
searchContact(head, searchName);
break;
case 5:
printf("程序已退出。\n");
break;
default:
printf("无效的选项,请重新选择。\n");
break;
}
} while (choice != 5);
return 0;
}
// 添加联系人
void addContact(AddressBook** head) {
AddressBook* newContact = (AddressBook*)malloc(sizeof(AddressBook));
printf("请输入联系人姓名:");
scanf("%s", newContact->name);
printf("请输入联系人电话:");
scanf("%s", newContact->phone);
newContact->next = NULL;
if (*head == NULL) {
*head = newContact;
} else {
AddressBook* current = *head;
while (current->next != NULL) {
current = current->next;
}
current->next = newContact;
}
printf("联系人添加成功。\n");
}
// 显示所有联系人
void printContacts(AddressBook* head) {
if (head == NULL) {
printf("通讯录为空。\n");
} else {
AddressBook* current = head;
printf("\n--所有联系人--\n");
while (current != NULL) {
printf("姓名:%s,电话:%s\n", current->name, current->phone);
current = current->next;
}
}
}
// 删除联系人
void deleteContact(AddressBook** head, char* name) {
if (*head == NULL) {
printf("通讯录为空,无法删除联系人。\n");
} else {
AddressBook* current = *head;
AddressBook* previous = NULL;
while (current != NULL) {
if (strcmp(current->name, name) == 0) {
if (previous == NULL) { // 要删除的是头节点
*head = current->next;
} else {
previous->next = current->next;
}
free(current);
printf("联系人删除成功。\n");
return;
}
previous = current;
current = current->next;
}
printf("未找到该联系人。\n");
}
}
// 查找联系人
void searchContact(AddressBook* head, char* name) {
if (head == NULL) {
printf("通讯录为空,无法查找联系人。\n");
} else {
AddressBook* current = head;
while (current != NULL) {
if (strcmp(current->name, name) == 0) {
printf("姓名:%s,电话:%s\n", current->name, current->phone);
return;
}
current = current->next;
}
printf("未找到该联系人。\n");
}
}
```