C编码培训的实际用例

时间:2011-08-03 14:00:28

标签: c tree

a recent question中,我鼓励尝试使用一些基本的数据结构,如二叉树,红黑树等等,然后再处理四叉树等其他事情。

我在C方面的经验是相当有限的,我担心除了简单的数据(如2D网格,图像存储和字符串)之外的任何指针都使用指针,虽然我熟悉引用,malloc,realloc和其他琐碎的操作,我是不习惯C的“硬”部分,这使得这种结构很难从理论上解决,我不想只是将工作代码复制到这里。

为了解决基本的树木,我想知道的是它们的实际应用。有一些准则的练习(有点“不要这样做或者你会杀死性能”或“不要这样做或者这会泄漏记忆”)只是为了能够了解实际目的。即使我记住这个理论,我仍然不知道要进行什么样的实验才能理解它们的应用。

我主要尝试使用普通的C,在阅读时我并不真正理解C ++ /#代码,尽管我对Lua语言有一定的掌握,以防万一。

到目前为止,我一直在编写将Lua用于字典搜索和设计数据(以及一些逻辑部分)的编码,并将所有视频和音频存储,重数学和“世界”存储保留在C中(使用网格结构和不使用网格结构) - 强制碰撞检测方法(使用线性阵列将对象放置在地图的1/24处,在代码术语中没有任何复杂))。因为我总是可以依靠Lua的固定代码来完成某些功能,所以我忽略了更多的C语言,而现在我却因缺乏知识而付出代价。

因此,提出一个问题:“数据树的基本用例是什么?”到目前为止,我唯一的想法是使用一个splay树来匹配字符串(文件名?)到纹理。这是有效用途吗?我应该从那开始吗?

1 个答案:

答案 0 :(得分:0)

数据树的一个用途是编写解析器/编译器时。在分解源(词法分析)并运行解析(验证语法)之后,我们将构建源代码(Syntactic tree)的树结构,然后由编译器的下一部分重复访问。< / p>

树的另一种用法是,如果字符串非常快速地匹配一组单词,使用非常少的内存,则可以使用DAWG(Directed acyclic word graph)。

最后,一个经典的用法是使用数据树为Travelling Salesman problem编写求解器,将城市存储在内存中。

经典的Sedgewick Algorithms in C, Part 5: Graph Algorithms充满了例子,如果你有权访问它。