用C语言二叉排序树写通讯录管理系统
时间: 2023-10-25 21:13:26 浏览: 117
好的,下面是一个简单的通讯录管理系统的代码,使用了二叉排序树来存储联系人信息:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义联系人结构体
typedef struct Contact {
char name[20];
char phone[12];
struct Contact *left;
struct Contact *right;
} Contact;
// 创建新的联系人节点
Contact *createContact(char *name, char *phone) {
Contact *newContact = (Contact *) malloc(sizeof(Contact));
strcpy(newContact->name, name);
strcpy(newContact->phone, phone);
newContact->left = NULL;
newContact->right = NULL;
return newContact;
}
// 插入联系人节点
Contact *insert(Contact *root, char *name, char *phone) {
if (root == NULL) {
return createContact(name, phone);
} else if (strcmp(name, root->name) < 0) {
root->left = insert(root->left, name, phone);
} else if (strcmp(name, root->name) > 0) {
root->right = insert(root->right, name, phone);
}
return root;
}
// 查找联系人节点
Contact *find(Contact *root, char *name) {
if (root == NULL) {
return NULL;
} else if (strcmp(name, root->name) < 0) {
return find(root->left, name);
} else if (strcmp(name, root->name) > 0) {
return find(root->right, name);
} else {
return root;
}
}
// 打印联系人信息
void printContact(Contact *contact) {
printf("Name: %s\n", contact->name);
printf("Phone: %s\n", contact->phone);
}
// 中序遍历二叉排序树,打印所有联系人信息
void printContacts(Contact *root) {
if (root != NULL) {
printContacts(root->left);
printContact(root);
printContacts(root->right);
}
}
int main() {
Contact *root = NULL;
int choice;
char name[20];
char phone[12];
Contact *contact;
do {
printf("\n");
printf("1. Add Contact\n");
printf("2. Find Contact\n");
printf("3. Print Contacts\n");
printf("4. Exit\n");
printf("Enter your choice: ");
scanf("%d", &choice);
switch (choice) {
case 1:
printf("Enter name: ");
scanf("%s", name);
printf("Enter phone: ");
scanf("%s", phone);
root = insert(root, name, phone);
printf("Contact added successfully.\n");
break;
case 2:
printf("Enter name: ");
scanf("%s", name);
contact = find(root, name);
if (contact == NULL) {
printf("Contact not found.\n");
} else {
printContact(contact);
}
break;
case 3:
printf("Contacts:\n");
printContacts(root);
break;
case 4:
printf("Exiting...\n");
break;
default:
printf("Invalid choice.\n");
break;
}
} while (choice != 4);
return 0;
}
```
这个程序中,我们定义了一个 `Contact` 结构体,用来存储联系人信息,包括姓名和电话号码,以及左右子节点。然后我们定义了 `createContact` 函数来创建新的联系人节点,和 `insert` 函数来插入联系人节点到二叉排序树中。我们还定义了 `find` 函数来查找特定联系人节点,和 `printContact` 函数来打印联系人信息。
在 `main` 函数中,我们使用一个循环来等待用户输入命令,并根据用户输入的命令执行相应的操作。用户可以选择添加联系人、查找联系人、打印所有联系人信息或退出程序。在添加联系人时,我们调用 `insert` 函数将新的联系人节点插入到二叉排序树中。在查找联系人时,我们调用 `find` 函数查找特定联系人节点,并打印联系人信息。在打印所有联系人信息时,我们使用中序遍历二叉排序树,将所有联系人信息按照字母顺序打印出来。
希望这个简单的通讯录管理系统的代码能够对你有所帮助!
阅读全文