c++ - 关联数组、数组和树

标签 c++ arrays tree associative-array

我有两个问题: 如何修改数组抽象数据类型以实现关联数组? 如何修改树抽象数据类型来实现关联数组?

最佳答案

要从数组创建关联数组,您通常会从某种结构的数组开始:

struct item {
    key_type key;
    value_type value;
};

然后您将使用key 来查找value。为了提高效率,您通常希望根据 key 对数组进行排序,因此您可以使用二进制搜索(或插值搜索,如果您的键有任何程度的可预测性)分配)。

对于一棵树,你会做几乎相同的事情,除了对于一棵树,二分查找是默认的。您最终得到一个与数组非常相似的节点,外加几个指针:

struct node { 
    key_type key;
    value_type value;
    struct node *left;
    struct node *right;
};

根据涉及的树类型,您可能还需要另一个指针来创建线程树和/或一些平衡信息(例如,对于 AVL 或 R-B 树)。相反,对于 B 树,您最终会得到类似于关联数组的节点数组,并将它们链接在一起形成平衡树。

关于c++ - 关联数组、数组和树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17034775/

相关文章:

c++ - Valgrind 报告 "brk segment overflow in thread #1"

php多维数组去除重复

javascript - 如何用lodash改进这个例程?

java - Java的TreeSet和TreeMap用的是什么树?

c++ - 多参数树遍历

c++ - 访问堆中的数据比访问栈中的数据快吗?

c++ - 如何加载以前存储的 svm 分类器?

C++ Windows 在数组中设置值导致程序崩溃

java - 从资源数组中获取 List<Integer>

python - 从 python 中的列表构造二叉树的最佳方法