我在上数据结构的课程,我相信我单独理解了一些东西,比如我知道有不同类型的树,有不同的规则,我知道堆栈和队列只是实现链表或数组列表的不同方式,这取决于你想做什么。然而,现在我有一个家谱项目,它说我需要读取一个前后顺序遍历,其中包含所有这些人的名字,姓氏和性别,它说我需要构建一个一般树,并打印出级别顺序遍历作为一个逗号分隔的列表;我必须有一个唯一的键为每个人,并创建两个字典和队列和列表来做到这一点??说明书长达10多页,我真的很害怕。周二就要交了,我都不知道如果字典只是实现链表的另一种方式?
字典可以实现为树。通常,每个节点将存储两个到子节点的链接(two children ->二叉树)。所以我猜你可以把这个结构看成一个链表(带分叉)但是没人叫它链表。这是一棵树。
也可以将树存储在普通数组中。通常,堆栈和队列也是基于普通数组的,因为它更高效。它们并不是实现列表的不同方法。它们是组织数据的不同方式,它们都有不同的优点和缺点。
字典(或map/关联数组/符号表)允许你创建像
这样的映射String (Key) => String (Value)
。从概念上讲,您可以将其用于Name => Gender
的映射。
map.insert("Daddy", "male");
map.insert("Mommy", "female");
map.insert("Sister Olga", "female");
map.insert("Brother Kevin", "male");
map.get("Mommy"); // returns "female"
如果实现为树,映射总是按键排序。您可以像构建任何其他树一样构建它,但是需要一个函数来比较键(例如less than
或<
操作符)。在上面的例子中,您将比较名称(字符串)。
树将自动保证唯一的键。我猜您需要用队列进行广度优先遍历,用链表存储结果。
你不是很清楚问题到底是什么,但我希望这对你有帮助。
编辑:也许我现在明白你的困惑了。还可以将字典实现为数组或列表。正如克里特纳在评论中所说。字典的概念是抽象的,没有定义它是如何实现的。
作为数组或列表的有效实现需要对元素进行排序,并通过二进制搜索来访问它们。如果你已经有了可以构建的东西,我会把实现作为树来实现。肯定会有更好的成绩。