C语言二叉排序树读取记事本内容通讯录
时间: 2023-07-16 15:15:33 浏览: 97
好的,我可以为您提供一些思路和代码示例。
首先,您需要使用文件操作函数来读取记事本中的内容,并将其存储到二叉排序树中。以下是一个示例函数,用于从文件中读取通讯录信息并将其存储到二叉排序树中:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义通讯录结构体
typedef struct AddressBook {
char name[20];
char phone[20];
struct AddressBook *left;
struct AddressBook *right;
} AddressBook;
// 从文件中读取通讯录信息并将其存储到二叉排序树中
void readAddressBookFromFile(char *filename, AddressBook **root) {
FILE *fp = fopen(filename, "r");
if (fp == NULL) {
printf("Failed to open file: %s\n", filename);
return;
}
char line[50];
while (fgets(line, sizeof(line), fp) != NULL) {
char *name = strtok(line, ",");
char *phone = strtok(NULL, ",");
if (name != NULL && phone != NULL) {
AddressBook *node = (AddressBook *)malloc(sizeof(AddressBook));
strcpy(node->name, name);
strcpy(node->phone, phone);
node->left = NULL;
node->right = NULL;
insertNode(root, node);
}
}
fclose(fp);
}
```
在上面的代码中,我们使用了 `fgets` 函数逐行读取记事本中的内容,并使用 `strtok` 函数将每行内容按照逗号分隔成姓名和电话号码两个部分。然后,我们创建一个 `AddressBook` 结构体节点,并将姓名和电话号码存储到节点中。最后,我们调用 `insertNode` 函数将节点插入到二叉排序树中。
下面是一个示例的 `insertNode` 函数,用于将节点插入到二叉排序树中:
```c
// 将节点插入到二叉排序树中
void insertNode(AddressBook **root, AddressBook *node) {
if (*root == NULL) {
*root = node;
return;
}
if (strcmp(node->name, (*root)->name) < 0) {
insertNode(&(*root)->left, node);
} else {
insertNode(&(*root)->right, node);
}
}
```
在上面的代码中,我们使用了递归的方法将节点插入到二叉排序树中。当根节点为空时,我们直接将节点作为根节点。否则,我们比较节点的姓名和根节点的姓名,如果小于根节点的姓名,就将节点插入到左子树中;否则,就将节点插入到右子树中。
最后,您可以编写一个函数来遍历二叉排序树,并输出通讯录中的所有联系人和电话号码。以下是一个示例函数:
```c
// 遍历二叉排序树并输出通讯录信息
void printAddressBook(AddressBook *root) {
if (root == NULL) {
return;
}
printAddressBook(root->left);
printf("%s: %s\n", root->name, root->phone);
printAddressBook(root->right);
}
```
在上面的代码中,我们使用了中序遍历的方法遍历二叉排序树,并输出每个节点的姓名和电话号码。
最后,您可以在 `main` 函数中调用上面的函数,从文件中读取通讯录信息并将其存储到二叉排序树中,然后遍历二叉排序树并输出通讯录信息。以下是一个示例 `main` 函数:
```c
int main() {
AddressBook *root = NULL;
readAddressBookFromFile("addressbook.txt", &root);
printAddressBook(root);
return 0;
}
```
在上面的代码中,我们首先创建一个空的二叉排序树,并调用 `readAddressBookFromFile` 函数从文件中读取通讯录信息并将其存储到二叉排序树中。然后,我们调用 `printAddressBook` 函数遍历二叉排序树并输出通讯录信息。
阅读全文