C語言的字典樹實現

2021-08-14 04:28:23 字數 3623 閱讀 3929

字典樹是什麼東西就不過多於解釋了,反正在查詢上面很好用,它的更好的一層封裝就是ac自動機.

c語言的字典樹的實現就是如下:

#include 

#include

#include

#define max 128

#define idxerr -1

#define invalid 0

#define valid 1

#define true 1

#define false 0

typedef

struct trienode

trie;

trie * trie_malloc();

void trie_init(trie *p);

void trie_insert(trie *root, char *s);

int trie_search(trie *root, char *s);

void trie_del(trie *root);

void trie_node_del(trie *root, char *s);

static

int verify_str( char *s);

static

int get_index(char ch);

static

void delete_subtrie(trie **root);

static

void delete_node(trie **node, char *chr);

void trie_init(trie *p)

p->isstr = false;

p->elemcount = 0;

p->passcount = 0;

} trie * trie_malloc()

void trie_insert(trie *root, char *s)

else

s++;

p->passcount++;

} p->isstr=true;

p->elemcount++;

} int trie_search(trie *root, char *s)

if(p != null && true == p->isstr)

return p->elemcount;

else

return

0;

} void trie_del(trie *root)

static

int verify_str(char *s)

return valid;

} static

int get_index(char ch)

return idx;

} static

void delete_subtrie(trie **root)

} }

if(null != root)

} static

void delete_node(trie **node, char *chr)

if(*node != null)

return;

}

void trie_node_del(trie *root, char *s)

else

s++;

} /*clear word flag*/

if(p != null)

}

主檔案:

#include "trie.h"  

#define str1 "hello"

#define str2 "hell"

#define str3 "helloworld"

#define str4 "world"

#define starline "****"

int main(int argc, char *argv)

trie_init(root);

/*insert*/

printf("\n %sinsert string%s\n",starline,starline);

trie_insert(root,str1);

printf("%s\n",str1);

trie_insert(root,str2);

printf("%s\n",str2);

trie_insert(root,str3);

printf("%s\n",str3);

trie_insert(root,str4);

printf("%s\n",str4);

trie_insert(root,str2);

printf("%s\n",str2);

/*search*/

printf("\n %ssearch string%s\n",starline,starline);

printf("%s, %d times\n",str1, trie_search(root,str1));

printf("%s, %d times\n",str2, trie_search(root,str2));

printf("%s, %d times\n",str3, trie_search(root,str3));

printf("%s, %d times\n",str4, trie_search(root,str4));

/*delete*/

printf("\n %sdelete string%s\n",starline,starline);

trie_node_del(root, str1);

printf("%s\n", str1);

printf("search %s, %d times\n",str1, trie_search(root,str1));

trie_node_del(root, str2);

printf("%s\n", str2);

printf("search %s, %d times\n",str2, trie_search(root,str2));

trie_node_del(root, str3);

printf("%s\n", str3);

printf("search %s, %d times\n",str3, trie_search(root,str3));

trie_node_del(root, str4);

printf("%s\n", str4);

printf("search %s, %d times\n",str4, trie_search(root,str4));

/*free trie*/

printf("\n %sfree trie%s\n",starline,starline);

trie_del(root);

root = null;

return

0;

}

字典樹C語言實現

又稱單詞查詢樹,trie樹,是一種 樹形結構,是一種雜湊樹的變種。典型應用是用於統計,排序和儲存大量的 字串 但不僅限於字串 所以經常被搜尋引擎系統用於文字詞頻統計。它的優點是 利用字串的公共字首來減少查詢時間,最大限度地減少無謂的字串比較,查詢效率比 雜湊樹高。include include de...

字典樹 c語言

1 trie.h ifndef trie h define trie h typedef struct word trie t word trie t typedef enum bool bool enum bool struct word trie t word trie t word trie ...

Trie樹(字典樹)的C 實現

trie樹,又稱字典樹 單詞查詢樹 字首樹,是一種雜湊樹的變種,應用於字串的統計與排序,經常被搜尋引擎系統用於文字詞頻統計。優點是查詢快,利用字串的公共字首來節省儲存空間,最大限度的減少無謂的字串比較。對於長度為m的鍵值,最壞情況下只需花費o m 的時間 而bst需要o mlogn 的時間。leet...