请用C语言编写单链表通讯录
时间: 2023-11-29 14:05:42 浏览: 76
C语言实现链表通讯录
好的,以下是使用C语言编写的单链表通讯录的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义通讯录结构体
typedef struct Contact {
char name[20]; // 姓名
char phone[12]; // 电话号码
struct Contact *next; // 指向下一个节点的指针
} Contact;
// 全局变量,指向头节点
Contact *head = NULL;
// 函数声明
void addContact();
void deleteContact();
void searchContact();
void displayContacts();
void freeContacts();
int main() {
int choice;
printf("欢迎使用单链表通讯录!\n");
while (1) {
printf("请选择您要进行的操作:\n");
printf("1. 添加联系人\n");
printf("2. 删除联系人\n");
printf("3. 查找联系人\n");
printf("4. 显示所有联系人\n");
printf("5. 退出程序\n");
scanf("%d", &choice);
switch (choice) {
case 1:
addContact();
break;
case 2:
deleteContact();
break;
case 3:
searchContact();
break;
case 4:
displayContacts();
break;
case 5:
freeContacts();
printf("感谢使用单链表通讯录!\n");
exit(0);
default:
printf("无效的选择,请重新输入。\n");
break;
}
}
}
// 添加联系人
void addContact() {
Contact *newContact = (Contact*)malloc(sizeof(Contact));
if (newContact == NULL) {
printf("内存分配失败,添加联系人失败。\n");
return;
}
printf("请输入联系人姓名:\n");
scanf("%s", newContact->name);
printf("请输入联系人电话号码:\n");
scanf("%s", newContact->phone);
newContact->next = NULL;
if (head == NULL) {
head = newContact;
printf("联系人添加成功。\n");
return;
}
Contact *p = head;
while (p->next != NULL) {
p = p->next;
}
p->next = newContact;
printf("联系人添加成功。\n");
}
// 删除联系人
void deleteContact() {
if (head == NULL) {
printf("通讯录为空,没有联系人可删除。\n");
return;
}
char name[20];
printf("请输入要删除的联系人姓名:\n");
scanf("%s", name);
Contact *p = head;
Contact *prev = NULL;
while (p != NULL) {
if (strcmp(p->name, name) == 0) {
if (prev == NULL) {
head = p->next;
} else {
prev->next = p->next;
}
free(p);
printf("联系人删除成功。\n");
return;
}
prev = p;
p = p->next;
}
printf("未找到该联系人,删除失败。\n");
}
// 查找联系人
void searchContact() {
if (head == NULL) {
printf("通讯录为空,没有联系人可查找。\n");
return;
}
char name[20];
printf("请输入要查找的联系人姓名:\n");
scanf("%s", name);
Contact *p = head;
while (p != NULL) {
if (strcmp(p->name, name) == 0) {
printf("联系人姓名:%s,电话号码:%s\n", p->name, p->phone);
return;
}
p = p->next;
}
printf("未找到该联系人。\n");
}
// 显示所有联系人
void displayContacts() {
if (head == NULL) {
printf("通讯录为空,没有联系人可显示。\n");
return;
}
printf("所有联系人如下:\n");
Contact *p = head;
while (p != NULL) {
printf("联系人姓名:%s,电话号码:%s\n", p->name, p->phone);
p = p->next;
}
}
// 释放所有联系人节点的内存
void freeContacts() {
Contact *p = head;
while (p != NULL) {
Contact *temp = p;
p = p->next;
free(temp);
}
head = NULL;
}
```
这段代码实现了添加联系人、删除联系人、查找联系人、显示所有联系人以及退出程序等功能。其中使用了单链表来存储联系人信息,每个节点包含了姓名、电话号码以及指向下一个节点的指针。通讯录的头节点使用全局变量来保存,方便各个函数之间的数据共享。
阅读全文