字典樹是什麼東西就不過多於解釋了,反正在查詢上面很好用,它的更好的一層封裝就是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...