C语言实现前缀树
时间: 2023-08-20 17:16:06 浏览: 104
C语言树的实现
以下是一个简单的C语言实现前缀树的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LEN 32
struct trie_node {
int is_end;
struct trie_node* children[2];
};
struct trie_node* create_node() {
struct trie_node* node = (struct trie_node*)malloc(sizeof(struct trie_node));
node->is_end = 0;
node->children[0] = node->children[1] = NULL;
return node;
}
void insert(struct trie_node* root, char* ip) {
struct trie_node* cur = root;
int len = strlen(ip);
for (int i = 0; i < len; i++) {
int idx = ip[i] - '0';
if (cur->children[idx] == NULL) {
cur->children[idx] = create_node();
}
cur = cur->children[idx];
}
cur->is_end = 1;
}
int search(struct trie_node* root, char* ip) {
struct trie_node* cur = root;
int len = strlen(ip);
for (int i = 0; i < len; i++) {
int idx = ip[i] - '0';
if (cur->children[idx] == NULL) {
return 0;
}
cur = cur->children[idx];
}
return cur->is_end;
}
int main() {
char ip[MAX_LEN];
struct trie_node* root = create_node();
insert(root, "10101101");
insert(root, "10101110");
insert(root, "11000011");
insert(root, "11000100");
while (1) {
printf("Enter an IP address: ");
scanf("%s", ip);
if (strcmp(ip, "exit") == 0) {
break;
}
if (search(root, ip)) {
printf("IP found\n");
} else {
printf("IP not found\n");
}
}
return 0;
}
```
该代码实现了一个简单的前缀树,可以用于IP地址的插入和查找。在代码中,使用结构体`trie_node`表示前缀树的节点,其中`is_end`表示该节点是否为一个IP地址的结束节点,`children`数组表示该节点的子节点。函数`create_node`用于创建一个新的节点,函数`insert`用于将一个IP地址插入到前缀树中,函数`search`用于查找一个IP地址是否存在于前缀树中。在`main`函数中,程序可以不断输入IP地址进行查找,直到输入“exit”退出程序。
阅读全文