将trie保留到文件中 - C.

Nav*_*K N 8 c serialization persistence trie

我有一个trie我用来做一些字符串处理.我有一个简单的编译器,它trie从一些数据生成.生成后,我trie不会在运行时更改.

我正在寻找一种方法,我可以将trie保存在文件中并有效地加载它.我已经看过sqllite了解它们是如何持久的,b-tree但它们的文件格式看起来有点先进,我可能不需要所有这些.

如果有人可以提供一些想法来坚持和阅读,那将会很有帮助trie.我用C编程

Ran*_*pho 11

我做了一些研究,在网上发现了以下小宝石:

  1. trie.h
  2. trie.c

一个带序列化和反序列化的工作特里.它最初是为在Python中使用而编写的(有相应的triemodule.c用于将它绑定到Python),但它是纯C; 你可以挖掘它的想法或按你的意愿使用它.

更新:

看来链接不再有效.我会保持原件,但这里是回路机器中的链接:

  1. trie.h
  2. trie.c

  • 看起来很有希望.让我试一试. (2认同)

int*_*jay 5

假设您的整个数据结构适合内存,递归序列化方法是最简单的。Sqllite 处理不适合内存的数据结构,因此尝试复制它们的方法可能有点过分。

这是用于读取/写入节点的示例伪代码。它通过递归读取/写入子节点来工作。它没有特定于树的东西,也应该适用于其他树数据结构。

void writeNode(Node *node)
    write node data to file
    write node.numOfChildren to file
    for each child:
        writeNode(child)

Node *readNode()
    Node *node = allocateNewNode()
    read node data from file
    read node.numOfChildren from file
    for (i=0; i<node.numOfChildren; i++)
        Node *child = readNode()
        node.addChild(child)
Run Code Online (Sandbox Code Playgroud)