c_cpp 带有putc打印的小型trie框架
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp 带有putc打印的小型trie框架相关的知识,希望对你有一定的参考价值。
#include <stdio.h>
#include <stdlib.h>
/*Sample Trie Implementation*/
#define TrieNode_CHILDS 127
// macro that sets all children of a node to NULL
// might change to memset for faster perf
#define TrieNode_CLEAN(node) for(int i=0;i<TrieNode_CHILDS;i++) node->children[i] = NULL
struct TrieNode
{
struct TrieNode* children[TrieNode_CHILDS - 1];
int end;
};
typedef struct TrieNode TrieNode;
TrieNode* TrieNode_new(void)
{
TrieNode* trie = malloc(sizeof(TrieNode));
TrieNode_CLEAN(trie);
trie->end = 0;
return trie;
}
// sets some child of the trie as a new node
void TrieNode_set_new(TrieNode* trie, char ch)
{
if(trie->children[ch] == NULL) trie->children[ch] = TrieNode_new();
}
// Inserts an entire string into the trie.
void TrieNode_insert(TrieNode* trie, const char* string)
{
TrieNode* traverse = trie;
while(*string)
{
TrieNode_set_new(traverse, *string);
traverse = traverse->children[*string++];
}
traverse->end = 1;
}
//prints all the entries in a trie.
void TrieNode_print_all(TrieNode* trie)
{
if(trie->end)
{
putc('\n', stdout);
return;
}
for(char ch = 0; ch < TrieNode_CHILDS;ch++)
{
if(trie->children[ch] != NULL)
{
putc(ch, stdout);
TrieNode_print_all(trie->children[ch]);
}
}
}
int main(int argc, char const *argv[])
{
TrieNode* newt = TrieNode_new();
TrieNode_insert(newt, "Josh!");
TrieNode_insert(newt, "Posh!");
TrieNode_insert(newt, "Joshua!");
TrieNode_print_all(newt);
free(newt);
return 0;
}
以上是关于c_cpp 带有putc打印的小型trie框架的主要内容,如果未能解决你的问题,请参考以下文章
c_cpp 在c中实现trie
c_cpp CPP中的简单Trie面试问题
c_cpp Trie用于按字母顺序排列的面试问题
c_cpp 使用原始套接字发送和接收带有ICMP协议的OUTPUT的数据包的小程序是六进制格式的数据包。可以打印为%c来查看数据。 IP heade
c_cpp C ++中的小型多态系统
c_cpp C中的小型随机字符串生成器