📝 Python数据结构教程
34篇技术文档📅  最后修改于: 2020-11-07 08:37:27        🧑  作者: Mango
我们已经在前面的章节中看到了链表,其中只能向前移动。在本章中,我们将看到另一种类型的链表,其中可以向前和向后移动。这样的链接列表称为双重链接列表。以下是双向链表的功能。双链表包含一个名为first和last的链接元素。每个链接包含一个数据字段和两个链接字段,分别称为next和prev。每个链接都使用其下一个链接与其下一个链接链接。每个链接都使用其先前的链接与其先前的链接链接。最后一个链接带有一个空...
📅  最后修改于: 2020-11-07 08:37:48        🧑  作者: Mango
哈希表是一种数据结构,其中数据元素的地址或索引值是从哈希函数生成的。由于索引值充当数据值的键,因此可以更快地访问数据。换句话说,哈希表存储键值对,但是键是通过哈希函数生成的。因此,随着键值本身成为存储数据的数组的索引,数据元素的搜索和插入函数变得更快。在Python,Dictionary数据类型表示哈希表的实现。词典中的键满足以下要求。字典的键是可哈希的,即由哈希函数生成,哈希函数为提供给哈希函数...
📅  最后修改于: 2020-11-07 08:38:10        🧑  作者: Mango
树表示通过边连接的节点。它是一种非线性数据结构。它具有以下属性。一个节点被标记为根节点。除根节点外的每个节点都与一个父节点关联。每个节点可以具有chib节点的编号。我们使用前面讨论的概念os节点在Python创建树数据结构。我们将一个节点指定为根节点,然后添加更多节点作为子节点。下面是创建根节点的程序。创建根我们只创建一个Node类,并为该节点添加一个赋值。这变成只有根节点的树。执行以上代码后,将...
📅  最后修改于: 2020-11-07 08:38:27        🧑  作者: Mango
二进制搜索树(BST)是其中所有节点都遵循下述属性的树-节点的左子树的键小于或等于其父节点的键。节点的右子树的密钥大于其父节点的密钥。因此,BST将其所有子树分为两个部分:左子树和右子树,可以定义为–在B树中搜索值在树中搜索值涉及将输入值与值退出节点进行比较。在这里,我们也从左到右遍历节点,然后最终与父节点遍历。如果搜索到的值与任何退出值都不匹配,则返回“未找到”消息,否则返回找到的消息。执行以上...
📅  最后修改于: 2020-11-07 08:39:00        🧑  作者: Mango
堆是一种特殊的树结构,其中每个父节点均小于或等于其子节点。这就是所谓的Min Heap。如果每个父节点大于或等于其子节点,则称为最大堆。实施优先级队列非常有用,在该队列中,权重较高的队列项目在处理中具有更高的优先级。关于堆的详细讨论可以在我们的网站上找到。如果您不熟悉数据结构,请先进行研究。在本章中,我们将看到使用Python实现堆数据结构的方法。创建一个堆堆是使用python内置的名为heapq...
📅  最后修改于: 2020-11-07 08:39:31        🧑  作者: Mango
图形是一组对象的图形表示,其中一些对象对通过链接连接。相互连接的对象由称为顶点的点表示,而连接这些顶点的链接称为边。与图形相关的各种术语和功能在此处的教程中进行了详细描述。在本章中,我们将了解如何使用Python程序创建图形并向其中添加各种数据元素。以下是我们在图形上执行的基本操作。显示图顶点显示图形边缘添加一个顶点添加边缘创建图使用Python字典数据类型可以轻松呈现图形。我们将顶点表示为字典的...
📅  最后修改于: 2020-11-07 08:39:54        🧑  作者: Mango
算法是一个分步过程,它定义了一组指令,这些指令将以某种顺序执行以获得所需的输出。通常,算法是独立于基础语言而创建的,即,一种算法可以用一种以上的编程语言来实现。从数据结构的角度来看,以下是算法的一些重要类别-搜索-在数据结构中搜索项目的算法。排序–按特定顺序对项目进行排序的算法。插入-将项目插入数据结构的算法。更新-更新数据结构中现有项目的算法。删除-从数据结构中删除现有项目的算法。算法的特征并非...
📅  最后修改于: 2020-11-07 08:40:17        🧑  作者: Mango
在分而治之的方法中,将手头的问题分成较小的子问题,然后分别解决每个问题。当我们继续将子问题划分为更小的子问题时,我们最终可能会达到无法再进行划分的阶段。那些“原子的”最小可能的子问题(分数)得以解决。最后合并所有子问题的解决方案,以获得原始问题的解决方案。从广义上讲,我们可以通过三步过程来理解分而治之的方法。分割/断裂此步骤涉及将问题分解为较小的子问题。子问题应该代表原始问题的一部分。此步骤通常采...
📅  最后修改于: 2020-11-07 08:40:31        🧑  作者: Mango
递归允许函数调用自身。固定的代码步骤将针对新值一次又一次地执行。我们还必须设置判定递归调用何时结束的标准。在下面的示例中,我们看到了二进制搜索的递归方法。我们采用一个排序列表,并将其索引范围作为递归函数的输入。使用递归的二进制搜索我们使用Python实现了二进制搜索算法,如下所示。我们使用项目的有序列表,并设计一个递归函数以将列表以及开始和结束索引作为输入。然后,二进制搜索函数自行调用,直到找到被...
📅  最后修改于: 2020-11-07 08:40:46        🧑  作者: Mango
回溯是递归的一种形式。但这涉及从任何可能性中仅选择选项。首先,我们选择一个选项并从中回溯,如果我们得出的结论是,该特定选项未提供所需的解决方案,则我们从中进行回溯。我们通过遍历每个可用选项来重复这些步骤,直到获得所需的解决方案。以下是查找给定字母集的所有可能排列顺序的示例。当我们选择一个对时,我们将应用回溯来验证该对是否已经创建。如果尚未创建,则该对将添加到答案列表,否则将被忽略。执行以上代码后,...
📅  最后修改于: 2020-11-07 08:41:17        🧑  作者: Mango
遍历是访问树的所有节点并且也可以打印其值的过程。因为所有节点都是通过边(链接)连接的,所以我们总是从根(头)节点开始。也就是说,我们不能随机访问树中的节点。我们使用三种方式遍历树-有序遍历预购遍历订单遍历有序遍历在这种遍历方法中,首先访问左子树,然后访问根,然后再访问右子树。我们应该永远记住,每个节点都可能代表一个子树本身。在下面的Python程序中,我们使用Node类为根节点以及左右节点创建占位...
📅  最后修改于: 2020-11-07 08:41:47        🧑  作者: Mango
排序是指以特定格式排列数据。排序算法指定了按特定顺序排列数据的方式。最常见的顺序是按数字顺序或字典顺序。排序的重要性在于,如果以排序方式存储数据,则可以将数据搜索优化到很高的水平。排序还用于以更具可读性的格式表示数据。下面我们在Python看到五个这样的排序实现。气泡排序合并排序插入排序贝壳排序选择排序气泡排序这是一种基于比较的算法,其中比较每对相邻元素,如果元素顺序不正确,则将其交换。执行以上代...
📅  最后修改于: 2020-11-07 08:42:07        🧑  作者: Mango
当您将数据存储在不同的数据结构中时,搜索是非常基本的必要条件。最简单的方法是遍历数据结构中的每个元素,并将其与您要搜索的值匹配。这称为线性搜索。它效率低下并且很少使用,但是为此创建一个程序可以使我们了解如何实现一些高级搜索算法。线性搜寻在这种类型的搜索中,对所有项目进行逐个搜索。检查每个项目,如果找到匹配项,则返回该特定项目,否则继续搜索直到数据结构结束。执行以上代码后,将产生以下结果-插值搜索该...
📅  最后修改于: 2020-11-07 08:42:28        🧑  作者: Mango
在解决许多重要的数学挑战时,图形是非常有用的数据结构。例如计算机网络拓扑或分析化合物的分子结构。它们还用于城市交通或路线规划,甚至还用于人类语言及其语法。所有这些应用程序都有一个共同的挑战,即使用其边缘遍历图并确保访问图的所有节点。有两种常见的建立方法可以进行遍历,下面将对此进行介绍。深度优先遍历:也称为深度优先搜索(DFS),当任何迭代中出现死角时,该算法都会在深度守卫运动中遍历图形,并使用堆栈...
📅  最后修改于: 2020-11-07 08:42:49        🧑  作者: Mango
算法分析可以在实施之前和实施之后的两个不同阶段分析算法的效率。他们是以下-先验分析-这是算法的理论分析。通过假设所有其他因素(例如处理器速度)是恒定的,并且对实现没有影响,来衡量算法的效率。后验分析-这是对算法的经验分析。所选算法是使用编程语言实现的。然后在目标计算机上执行此操作。在此分析中,收集了诸如运行时间和所需空间之类的实际统计信息。算法复杂度假设X是一种算法,n是输入数据的大小,算法X使用...