Javatpoint标志
Javatpoint标志

Python中的数据结构和算法

本课将简单介绍Python的数据结构和算法。借助实际和详细解释的插图,我们将讨论内置的数据结构,如列表、集、字典、元组等,以及其他一些用户定义的数据结构,如链接树、列表和图,以及一些常用的算法。

列表

同样,其他计算机语言中的数组和Python中的列表是以任何方式排列的项的集合。它允许列表中元素的多种数据类型。Python版本的列表可与c++的向量或Java的数组列表相媲美。由于所有组件都必须重新定位,因此从列表头部添加或删除成员是最昂贵的操作。如果预先分配的内存全部用完,在列表末尾插入和删除元素的代价也可能很高。

代码

输出

创建的Python列表为:['Python', 'Data', 'Structures', 'Tutorial']多维列表为:[['Python', 'Data'], ['Structures', 'Tutorial']]单个元素:数据多个元素(切片):['Python', 'Data']对于嵌套列表:Structures最后一个元素:['Structures', 'Tutorial']最后两个元素:['Tutorial', 'Structures']

元组

列表和Python元组是等价的,但与列表不同的是,元组是不可变的,这意味着一旦形成,我们就不能更改它们。元组可以包括多种类型的组件,就像List一样。

Python元组由一系列值分组而成。无论是否使用圆括号,这些值都由“逗号”分隔。

代码

输出

Python元组是:('Python', 'Data', 'Structures', 'Tutorial')使用列表的元组:单个元素:数据多个元素(切片):('Python', 'Data')最后一个元素:教程异常引发:'tuple'对象不支持项赋值

Python集数据结构是可修改的非重复数据集合。集合主要用于成员筛选和去除冗余项。这些进程使用哈希数据结构,这是一种用于遍历、插入和删除元素的流行方法,通常需要O(1)时间。

代码

输出

Python集合是:{'Python', 'Data', 'Tutorial', 'Structures'} 0 Python 1 Data 2 Tutorial 3 Structures交集:{'Python', 'Data'}联合:{1,2,'Structures', 'Python', 'Tutorial', 'Data'}

字典

被称为Python字典的键值对格式的数据集合用于存储数据。这个数据结构的时间复杂度是O(1),很像其他编码语言中的哈希表。Python字典是在键的帮助下索引的。键的值可以是任何类型,例如字符串、整数、序列等常量项。我们可以使用花括号{}或字典推导式来构建字典。

代码

输出

Python字典是:{'1':'Python', '2': 'Data', '3': 'Structures', '4': 'Tutorial'}键2的值是:Data使用get方法:Data

链表

称为链表的线性数据结构具有不在内存中连续位置保存的元素。链表的元素是通过指针连接的。

指向链表第一个节点的指针作为链表的表示。头指的是顶部节点。如果链表为空,头的值为NULL。在列表中,每个节点至少有两个组件:

  • 数据
  • 指向下一个节点的指针(或引用)

代码

输出

Python教程数据结构

链表是重要的数据结构。下面是链表的一些基本操作。

代码

输出

链表:9 4 8 7 2删除节点后:在列表中发现9 4 7 2 4排序链表:2 4 7 9

堆栈

堆栈是一种线性数据结构,它使用先入后出(FILO)或后进先出(LIFO)排序来存储对象。在堆栈中,一个项只从一端删除,而一个新项则放在另一端。推送和弹出是插入和删除操作的常用名称。

栈的基本操作

我们可以使用一些基本操作在堆栈上执行各种活动。

推动:此方法将一个项添加到堆栈顶部

流行:此方法将从堆栈顶部删除一个项

IsEmpty:这个方法检查堆栈是否为空。

IsFull:这个方法检查堆栈是否已满。

看:此方法将返回顶部元素,但不会删除它。

代码

输出

推入后的新堆栈:[2]推入后的新堆栈:[2,5]推入后的新堆栈:[2,5,3]推入后的新堆栈:[2,5,3,1]弹出后的新堆栈:[2,5,3]堆栈最后一个元素:3

队列

队列以先进先出(FIFO)的顺序保存对象,是另一种类似于堆栈的线性数据结构。队列按照最近添加项的顺序删除项。任何排队等待访问服务的用户,其中最先到达的用户最先得到服务,都是队列的极好说明。

链接到队列的操作包括:

排队:向队列中添加一段内容。溢出条件定义为当队列被填充时。向队列中添加元素的时间复杂度:O(1)

出列:从队列中取出一些东西。这些东西以与值排队相同的顺序弹出。如果队列为空,则称为下溢条件。获取队列的第一项的时间复杂度为O(1)。

后:获取队列中的最后一项。获取队列最后一项的时间复杂度为O(1)。

代码

输出

enqueuing后的新队列:[6]enqueuing后的新队列:[6,3]enqueuing后的新队列:[3,9]最后一个元素:9

堆数据结构主要用于描述优先级队列,由Python heapq模块提供。堆数据结构的特点是,每当弹出一个项时,它总是返回最小的项(min-heap)。在保留堆结构的同时,始终将项推入或弹出。此外,堆[0]项始终返回最小值。它支持O(log n)时间检索和插入最小值元素。

堆通常有两种类型:

Max-Heap:Max-Heap数据结构的根节点的键必须在其子节点的键中排名最高。对于二叉树中的每一个子树,同样的条件应该递归为真。

最小堆:Min-Heap的根节点的键应该是它所有子节点的键中最小的公共键。对于二叉树中的每一个子树,同样的条件应该递归为真。

代码

输出

堆数组:[6,4,5,3,8]删除项后:[8,4,6,3]

二叉树

一种称为树的非线性层次数据结构由节点和边组成。

被称为二叉树的Python树数据结构允许每个父节点最多有两个子节点。二叉树在每个节点上有三个分量:

  1. 数据元素
  2. 左子节点的地址
  3. 右子节点的地址

代码

输出

树的前序遍历:4 5 10 10 7 2 9树的序遍历:10 1 5 0 4 2 9 7树的后序遍历:1 10 0 5 9 2 7 4

冒泡排序算法

一种称为冒泡排序的排序方法分析附近的两个项并交换它们,直到达到所需的顺序。

在每次迭代中,列表中的每个项都移动到列表的末尾。这与液体中浮到表面的气泡的行为类似。因此,它被称为冒泡排序。

代码

输出

按降序排序的列表:[9,7,5,3,2,0]

选择排序算法

一种称为选择排序的排序算法在每次迭代中选择未排序列表的最大元素,并将其插入到列表的开头。

代码

输出

按降序排序列表:[97,85,35,29,23,20]

快速排序算法

使用称为快速排序(从数组中取出的项)的排序算法中的分治策略,将数组分割为更小的数组。

拆分给定数组时,应该设置枢轴组件,以便值大于枢轴组件的项位于右侧,值小于枢轴值的组件存储在左侧。

同样的方法用于划分左右子数组。重复这个过程,直到每个子数组中只剩下一个元素。

此时元素已经排序。这些项的组合在最后创建一个排序数组。

代码

输出

按升序排序列表:[0,1,2,3,4,7,8,9]

计数排序算法

一种称为计数排序的排序方法根据每个不同元素在给定数组中出现的次数来排列给定的元素数组。排序是通过将数组的元素计数映射为我们所创建的另一个数组的索引来完成的。该数组存储元素的计数。

代码

输出

排序列表:[2,2,3,4,7,7,8,9]

二分搜索算法

二分搜索是一种在已排序数组中查找元素位置的搜索算法。

在这种方法中,元素总是在数组的一部分中间进行搜索。

代码

输出

我们搜索的元素出现在:4






Youtube 观看视频请加入我们的Youtube频道:现在加入

反馈


帮助他人,请分享

脸谱网 推特 pinterest

学习最新教程


准备


热门的技术


B.Tech / MCA






Baidu
map