我在数据结构课程中,我相信我理解的东西,就像我知道有不同种类的树有不同的规则,我知道堆栈和队列只是不同的具体实现方式链接列表或ArrayList取决于您想要做什么。但是,现在我有一个家庭树项目,它说我需要阅读一个前后顺序遍历,其中列出了所有这些人的姓名和性别,并说它需要构建一个一般树和打印出水平顺序遍历为逗号分隔列表HOWEVER;我必须为每个人创建一个唯一的密钥,并创建两个字典,一个队列和一个列表来执行此操作???说明超过10页,我实在非常害怕。它将于周二到期,我甚至都不知道 如果字典只是实现链表的另一种方式吗?
答案 0 :(得分:1)
字典可以实现为树。通常,每个节点将存储两个到子节点的链接(两个子节点 - >二叉树)。所以我猜你可以将这个结构视为一个链表(带叉子)但是没有人把它称为链表。这是一棵树。
您还可以将树存储在普通数组中。通常,堆栈和队列也基于普通数组,因为它更有效。它们不是实现列表的不同方式。它们是组织数据的不同方式,它们各有利弊。
字典(或地图/关联数组/符号表)允许您创建类似的映射
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
或<
运算符)。在上面的例子中,您将比较名称(字符串)。
树将自动保证唯一键。我想你需要队列进行广度优先遍历和链接列表来存储结果。
你不清楚究竟是什么问题,但我希望这会有所帮助。
编辑:也许我现在明白你的困惑。您还可以将字典实现为数组或列表。正如克里特纳在评论中所说。字典的概念是抽象的,并没有定义它是如何实现的。
作为数组或列表的有效实现需要您对元素进行排序,并通过二进制搜索来访问它们。如果你已经有了构建的东西,我会把它作为树来实现。肯定会有更好的成绩。