有人可以为我澄清字典吗?
Could someone please clarify dictionaries for me?
我在上数据结构课程,另外我相信我理解一些东西,比如我知道有不同种类的树有不同的规则,我知道堆栈和队列只是不同的具体方式根据您要执行的操作来实现链接列表或 ArrayList。然而,现在我有一个家谱项目,它说我需要阅读一个 pre 和 post 顺序遍历,它包含在一个列表中所有这些人的名字和姓氏以及他们的性别,它说我然而,需要构造一个通用树并将层序遍历打印为逗号分隔列表;我必须为每个人都有一个唯一的密钥,并创建两个字典、一个队列和一个列表来执行此操作???说明书长达 10 多页,我其实很害怕。预产期是星期二,我什至不知道
如果字典只是实现链表的另一种方式?
字典可以实现为树。通常,每个节点会存储两个指向子节点的链接(两个子节点 -> 二叉树)。所以我猜你可以把这个结构看作一个链表(带叉),但没有人称它为链表。是一棵树。
您还可以将树存储在普通数组中。通常,堆栈和队列也基于普通数组,因为它更高效。它们不是实现列表的不同方式。它们是组织数据的不同方式,各有优缺点。
字典(或map/associative array/symbol table)允许你创建像
这样的映射
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
或 <
运算符)。在上述情况下,您将比较名称 (Strings)。
树会自动保证唯一键。我想你需要广度优先遍历的队列和存储结果的链表。
你不是很清楚到底是什么问题,但我希望这对你有所帮助。
编辑: 也许我现在明白你的困惑了。您还可以将字典实现为数组或列表。正如克里特纳在评论中所说。字典的概念是抽象的,并没有定义它是如何实现的。
作为数组或列表的高效实现需要您对元素进行排序并通过二进制搜索等方式访问它们。如果您已经有了可以构建的东西,我会选择作为树来实现。肯定会有更好的成绩。
我在上数据结构课程,另外我相信我理解一些东西,比如我知道有不同种类的树有不同的规则,我知道堆栈和队列只是不同的具体方式根据您要执行的操作来实现链接列表或 ArrayList。然而,现在我有一个家谱项目,它说我需要阅读一个 pre 和 post 顺序遍历,它包含在一个列表中所有这些人的名字和姓氏以及他们的性别,它说我然而,需要构造一个通用树并将层序遍历打印为逗号分隔列表;我必须为每个人都有一个唯一的密钥,并创建两个字典、一个队列和一个列表来执行此操作???说明书长达 10 多页,我其实很害怕。预产期是星期二,我什至不知道 如果字典只是实现链表的另一种方式?
字典可以实现为树。通常,每个节点会存储两个指向子节点的链接(两个子节点 -> 二叉树)。所以我猜你可以把这个结构看作一个链表(带叉),但没有人称它为链表。是一棵树。
您还可以将树存储在普通数组中。通常,堆栈和队列也基于普通数组,因为它更高效。它们不是实现列表的不同方式。它们是组织数据的不同方式,各有优缺点。
字典(或map/associative array/symbol table)允许你创建像
这样的映射
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
或 <
运算符)。在上述情况下,您将比较名称 (Strings)。
树会自动保证唯一键。我想你需要广度优先遍历的队列和存储结果的链表。
你不是很清楚到底是什么问题,但我希望这对你有所帮助。
编辑: 也许我现在明白你的困惑了。您还可以将字典实现为数组或列表。正如克里特纳在评论中所说。字典的概念是抽象的,并没有定义它是如何实现的。
作为数组或列表的高效实现需要您对元素进行排序并通过二进制搜索等方式访问它们。如果您已经有了可以构建的东西,我会选择作为树来实现。肯定会有更好的成绩。