【问题标题】:Could someone please clarify dictionaries for me?有人可以为我澄清字典吗?
【发布时间】:2016-06-24 23:21:43
【问题描述】:

我正在学习数据结构课程,我相信我理解一些事情,比如我知道有不同种类的具有不同规则的树,而且我知道堆栈和队列之类的东西只是不同的具体实现方式链接列表或 ArrayList 取决于您想要做什么。但是,现在我有一个家谱项目,它说我需要读取前后顺序遍历,其中包含所有这些人的名字和姓氏和性别的列表,它说我需要构建一个通用树并将级别顺序遍历打印为逗号分隔列表但是;我必须为每个人创建一个唯一的密钥并创建两个字典和一个队列和一个列表来执行此操作???说明书长达 10 多页,我实际上很害怕。星期二到期,我什至不知道 如果字典只是实现链表的另一种方式?

【问题讨论】:

  • 在计算机科学中,关联数组、映射、符号表或字典是由(键、值)对的集合组成的抽象数据类型,这样每个可能的键在收藏。与此数据类型相关的操作允许: 将一对添加到集合中。 tldr - 字典由键(唯一标识符)和值对组成。

标签: dictionary data-structures tree linked-list key


【解决方案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< 运算符)。在上述情况下,您将比较名称(字符串)。

树会自动保证唯一的键。我想你需要广度优先遍历的队列和存储结果的链表。

你不是很清楚到底是什么问题,但我希望这会有所帮助。

编辑:也许我现在明白你的困惑了。您还可以将字典实现为数组或列表。正如克里特纳在 cmets 中所说。字典的概念是抽象的,并没有定义它是如何实现的。

作为数组或列表的有效实现需要您对元素进行排序并通过例如二进制搜索来访问它们。如果你已经有一些东西可以建立,我会去实现一棵树。成绩肯定更好。

【讨论】:

  • 谢谢!很抱歉我花了这么长时间才这样做,我是该网站的新手(:
  • 感谢您的反应。看看答案是否有帮助会让人松一口气。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-21
  • 2017-01-28
  • 1970-01-01
  • 2020-12-20
  • 2012-07-06
相关资源
最近更新 更多