c - C 编码训练的实际用例

标签 c tree

<分区>

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

我在 C 方面的经验相当有限,除了简单数据(如 2D 网格、图像存储和字符串)之外,我害怕使用指针,尽管我熟悉引用、malloc、realloc 和其他琐碎的操作,但我不习惯 C 的“困难”部分,这使得此类结构很难从理论上解决,我不想只将工作代码复制到其中。

为了处理基本树,我想知道的是它们的实际应用。一种带有一些指导方针的练习(类似于“不要这样做,否则会降低性能”或“不要那样做,否则会泄漏内存”),只是为了能够了解实际目的。即使我背了理论,我仍然不知道要进行什么样的实验才能理解它们的应用。

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

到目前为止,我一直在结合 Lua 进行编码以进行字典搜索和设计数据(以及一些逻辑部分),并将所有视频和音频存储、繁重的数学和“世界”存储留在 C 中(使用网格结构和不太-强制碰撞检测方法(使用线性阵列将对象放置在 map 的 1/24 中,代码方面并不复杂)。因为我总是可以依靠 Lua 的坚实代码来实现某些功能,所以我忽略了对 C 的更多学习,现在我正在为缺乏知识而付出代价。

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

最佳答案

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

树的另一个用途是当字符串属于一组单词时必须非常快速地匹配,使用很少的内存,您可以使用 DAWG ( Directed acyclic word graph )。

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

经典的 Sedgewick Algorithms in C, Part 5: Graph Algorithms有很多示例,如果您可以访问它的话。

关于c - C 编码训练的实际用例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6927676/

相关文章:

python - 我如何寻找包含他们自己的代码作为 child 的 parent ?

PHP非递归无限级别分类树

algorithm - 从数据创建决策树

c++ - 函数内的字符串文字 : automatic variables or allocated in heap?

c++ - 不同平台/系统中限定符大小的变化

c - 填充数组参数时堆栈溢出 (0xC00000fd),但填充静态数组时不会溢出

python - 如何将二叉树转换为级别字典

javafx - 将项目从 TreeView 拖放到文本区域中

c - 是否可以同时执行sendto()和recvfrom()?

c - 什么是参数前向声明?