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中的小型随机字符串生成器