一个简单的Trie树实现

来源:互联网 发布:能组队的手游 知乎 编辑:程序博客网 时间:2024/05/20 09:43

header file

#ifndef TRIE_H_INCLUDED#define TRIE_H_INCLUDED#include<stdio.h>#include<malloc.h>typedef struct trie{    int words;    int prefixes;    struct trie *edges[26];} trie;trie * initialize(trie *node);trie * addWord(trie *ver,char *str);int countWords(trie *ver,char *str);int countPrefix(trie *ver,char *str);#endif // TRIE_H_INCLUDED

source file

#include "trie.h"trie * initialize(trie *node){    if(node==NULL)    {        node=(trie *)malloc(sizeof(trie));        node->words=0;        node->prefixes=0;        int i;        for(i=0; i<26; i++)            node->edges[i]=NULL;        return node;    }}trie * addWord(trie *ver,char *str){    printf("%d --- %c  ",ver->words, str[0]);    if(str[0]=='\0')    {        ver->words=ver->words+1;    }    else    {        ver->prefixes=(ver->prefixes)+1;        char k;        k=str[0];        str++;        int index=k-'a';        if(ver->edges[index]==NULL)        {            ver->edges[index]=initialize(ver->edges[index]);        }        ver->edges[index]=addWord(ver->edges[index],str);    }    return ver;}int countWords(trie *ver,char *str){    if(str[0]=='\0')        return ver->words;    else    {        int k=str[0]-'a';        str++;        if(ver->edges[k]==NULL)            return 0;        return countWords(ver->edges[k],str);    }}int countPrefix(trie *ver,char *str){    if(str[0]=='\0')        return ver->prefixes;    else    {        int k=str[0]-'a';        str++;        if(ver->edges[k]==NULL)            return 0;        return countPrefix(ver->edges[k],str);    }}

test file


#include<stdio.h>#include<malloc.h>#include "trie.h"void testTrie(){    trie *start=NULL;    start=initialize(start);    int ch=1;    while(ch)    {        printf("\n 1. Insert a word ");        printf("\n 2. Count words");        printf("\n 3. Count prefixes");        printf("\n 0. Exit\n");        printf("\nEnter your choice: ");        scanf("%d",&ch);        char input[1000];        switch(ch)        {        case 1:            printf("\nEnter a word to insert: ");            scanf("%s",input);            start=addWord(start,input);            break;        case 2:            printf("\nEnter a word to count words: ");            scanf("%s",input);            printf("\n%d",countWords(start,input));            break;        case 3:            printf("\nEnter a word to count prefixes: ");            scanf("%s",input);            printf("\n%d",countPrefix(start,input));            break;        }    }}int main(){    testTrie();    return 0;}


原创粉丝点击