这8种数据结构,身为python开发的你必须得懂

2023-05-26 0 760

这8种数据结构,身为python开发的你必须得懂

在化解现实世界的标识符问题时,雇员和招工人员都在寻找运行时和资源工作效率。

知道别的计算机流程最适宜当前的化解方案将提高流程的性能,并减少合作开发所需的时间。出于这个原因,大多数世界顶级公司都要求对计算机流程有基盘的理解,并在标识符复试中对其进行深入的考察。

下面是他们今天要讲的内容:

甚么是计算机流程?在Python中字符串堆栈在Python中栈在Python中Python中的二叉树Python中的循环二叉树Python种的树图Python中的基元表接下去学甚么

甚么是计算机流程?

计算机流程是用作储存和组织机构统计数据的标识符内部结构,使修改、导航系统和访问信息变得更加容易。计算机流程决定了怎样搜集统计数据、他们可以实现的功能以及统计数据间的亲密关系。

计算机流程几乎用作软件工程和程式设计的大部份领域,从作业系统到前端合作开发,再到机器学习。

计算机流程有利于:

管理和利用大型统计数据集从统计资料库中快速搜寻某一统计数据在统计数据点间建立明晰的多层或亲密关系相连精简并加快统计信息处理

计算机流程是高效、真实化解问题的重要构筑组件。计算机流程是经过校正和强化的工具,为您提供了一个简单的架构来组织机构您的流程。毕竟,你没必要每次都重新制作车轮 (或内部结构)。

每个计算机流程都有一个最适宜化解的任务或情况。Python有4个内建的计算机流程、条目、词典、位元和子集。那些内建计算机流程带有预设方法和主脑强化,使其更易采用。

List:类似字符串的内部结构,允许将几组相同类型的气门第一类保存为表达式。位元:位元是不容变的条目,意味著原素不能被更动。它是用圆括弧新闻稿的,而不是方括弧。Set:子集是失序的子集,这意味著原素是没检索的,并且没子集字符串。它们Arbois括弧新闻稿。词典(dict):近似于其他语言中的hashmap或基元表,词典是键/值对的子集。用空花括弧调用空词典,他用大括号隔开的键和值充填。大部份键都是唯一的、不容变的第一类。

现在,让他们看看怎样采用那些内部结构来建立辩手想的大部份高级内部结构。

Arrays (Lists) in Python

Python没内建字符串类型,但您可以为大部份相同的任务采用条目。字符串是以相同名称保存的相同类型的值的子集。

字符串中的每个值都被称为“原素”,检索表示其位置。您可以通过采用所需原素的索

这8种数据结构,身为python开发的你必须得懂

不像Java这样的程式设计语言在新闻稿后有静态字符串,Python的字符串在添加/减去原素时自动伸缩。

例如,可以采用append()方法在现有字符串的末尾添加一个额外的原素,而不是新闻稿一个新字符串。

这使得Python字符串特别更易采用和动态适应。

cars = [“Toyota”, “Tesla”, “Hyundai”] print(len(cars)) cars.append(“Honda”) cars.pop(1) for x in cars: print(x)

优势:

建立和采用统计数据字符串简单自动缩放以满足不断变化的尺寸要求用作建立更复杂的计算机流程

缺点:

未针对科学统计数据进行强化 (与NumPy的字符串不同)只能操作条目的最右边

应用:

相关值或第一类的共享储存,即myDogs通过循环访问计算机流程的子集,例如位元条目

Python中的常见字符串面试问题

从条目中删除偶数整数合并两个排序条目在条目中找到最小值最大总和子条目打印大部份原素

Python中的堆栈

堆栈是一种线性计算机流程,以 “先进先出” (FIFO) 顺序储存统计数据。与字符串不同,您不能按检索访问原素,而只能提取下一个最旧的原素。这使得它非常适宜订单敏感任务,如在线订单处理或语音邮件储存。

你可以把在杂货店排队; 收银员不会选择下一个结账的人,而是会处理排队时间最长的人。

这8种数据结构,身为python开发的你必须得懂

他们可以采用带有append()和pop()方法的Python条目来实现堆栈。然而,这是低效的,因为当您向开始添加新原素时,条目必须按一个检索移动大部份原素。

相反,最好的做法是采用Python的collections组件中的deque类。deque对追加和弹出操作进行了强化。deque实现还允许建立双端堆栈,该堆栈可以通过popleft()和popright()方法访问堆栈的两端。

from collections import deque # Initializing a queue q = deque() # Adding elements to a queue q.append(a) q.append(b) q.append(c) print(“Initial queue”) print(q) # Removing elements from a queue print(“\nElements dequeued from the queue”) print(q.popleft()) print(q.popleft()) print(q.popleft()) print(“\nQueue after removing elements”) print(q) # Uncommenting q.popleft() # will raise an IndexError # as queue is now empty

优点:

按时间顺序自动处理统计数据根据统计数据量大小自动缩放deque类的时间工作效率高

缺点:

只能访问两端的统计数据

应用流程:

打印机或CPU核心等共享资源的操作作为批处理系统的临时储存为同等重要的任务提供一个简单的预设顺序

Python中的常见堆栈复试问题

反转堆栈的前k个原素采用二叉树实现堆栈采用堆栈实现堆栈

Python中的栈

栈是一种连续的计算机流程,充当堆栈的后进先出(LIFO)版本。插入到堆栈中的最后一个原素被认为是堆栈的顶部,并且是唯一可访问的原素。要访问中间原素,必须首先删除足够多的原素,使所需的原素位于堆栈顶部。

许多合作开发者将堆栈想象成一堆餐盘;你可以把盘子加到或移到盘子堆的顶部,但必须移动整个盘子堆才能把一个放在底部。

这8种数据结构,身为python开发的你必须得懂

添加原素称为push,删除原素称为pop。你可以在Python中采用内建的条目内部结构来实现栈。对于条目实现,推操作采用append()方法,弹出操作采用pop()。

stack = [] # append() function to push # element in the stack stack.append(a) stack.append(b) stack.append(c) print(Initial stack) print(stack) # pop() function to pop # element from stack in # LIFO order print(\nElements popped from stack:) print(stack.pop()) print(stack.pop()) print(stack.pop()) print(\nStack after elements are popped:) print(stack) # uncommenting print(stack.pop()) # will cause an IndexError # as the stack is now empty

优势:

提供应用流程无法实现的后进先出统计数据管理:自动缩放和第一类清理简单可靠的统计数据储存系统

缺点:

堆栈内存有限堆栈上的第一类太多会导致堆栈溢出错误

应用:

用作合作开发高吞吐量的系统内存管理系统首先采用堆栈来处理最近的请求对括弧匹配等问题有帮助

Python中的常见堆复试问题

Python中的二叉树

二叉树是统计数据的顺序子集,采用每个统计数据节点上的亲密关系指针链接到条目中的下一个节点。

与字符串不同,二叉树在条目中没目标位置。相反,它们基于节点串联起来。

这8种数据结构,身为python开发的你必须得懂

二叉树中的第一个节点称为头节点,最后一个节点称为尾节点,其中尾节点的next指向为null。

二叉树可以是单链,也可以是双链,这取决于每个节点是只有一个指向下一个节点的指针,还是还有一个指向前一个节点的指针。

你可以把二叉树想象成一条链;单个链接只与相邻的链接有一个相连,但大部份链接一起形成一个更大的内部结构。

Python没二叉树的内建实现,因此需要实现一个Node类来保存统计数据值和一个或多个指针。

class Node: def __init__(self, dataval=None): self.dataval = dataval self.nextval = None class SLinkedList: def __init__(self): self.headval = None list1 = SLinkedList() list1.headval = Node(“Mon”) e2 = Node(“Tue”) e3 = Node(“Wed”) # Link first Node to second node list1.headval.nextval = e2 # Link second Node to third node e2.nextval = e3

优点:

新原素插入和删除更高工作效率比字符串更更易重组高级计算机流程 (如图形或树)都是基于二叉树的

缺点:

每个统计数据点的指针储存增加了内存采用量必须始终从头节点遍历二叉树以查找某一原素

应用:

高级计算机流程的构筑块需要频繁添加和删除统计数据的化解方案

Python中的常见二叉树复试问题

打印给定二叉树的中间原素从已排序的二叉树中删除重复原素检查单链接条目是否为回文合并K排序二叉树查找两个二叉树的交点

Python中的循环二叉树

标准二叉树的主要缺点是,您总是必须从Head节点开始。循环二叉树通过将Tail节点的空指针替换为指向Head节点的指针来化解这个问题。当遍历时,流程将跟随指针,直到到达它开始的节点。

这8种数据结构,身为python开发的你必须得懂

这种设置的优点是,您可以从任何节点开始遍历整个条目。它还允许您通过设置内部结构中所需的循环次数来采用二叉树作为一个可循环内部结构。循环二叉树对于长时间循环的进程非常有用,比如作业系统中的CPU分配。

优点:

可以从任何节点开始遍历整个条目使二叉树更适宜循环内部结构

缺点:

如果没空标记,将更难找到条目的Head和Tail节点

应用:

定期循环化解方案,如CPU调度

Python中常见的循环二叉树复试问题

在二叉树中检测循环反转循环二叉树给定大小的组中的反向圆形二叉树

Python中的树形内部结构

树是另一种基于亲密关系的计算机流程,专门用作表示层次内部结构。与二叉树一样,它们也被Node第一类充填,Node第一类包含一个统计数据值和一个或多个指针,用作定义其与直接节点的亲密关系。

每棵树都有一个根节点,大部份其他节点都从根节点分支出来。根节点包含指向它正下方大部份原素的指针,那些原素被称为它的子节点。那些子节点可以有它们自己的子节点。二叉树的节点不能有两个以上的子节点。

在同一层上的任何节点都称为同级节点。没相连子节点的节点称为叶节点。

这8种数据结构,身为python开发的你必须得懂

二叉树最常见的应用是二叉搜寻树。二叉搜寻树擅长于搜寻大量的统计数据子集,因为时间复杂度取决于树的深度而不是节点的数量。

二叉搜寻树有四个严格的规则:

左子树只包含原素小于根的节点。右子树只包含原素大于根的节点。左右子树也必须是二叉搜寻树。他们必须以树的“根”来遵循上述规则。不能有重复的节点,即不能有两个节点具有相同的值。lassNode: def __init__(self, data): self.left = None self.right = None self.data = data def insert(self, data): # Comparethe new value with the parent nodeif self.data: if data < self.data: if self.left is None: self.left = Node(data)else: self.left.insert(data) elif data > self.data: if self.right is None: self.right = Node(data) else: self.right.insert(data) else: self.data = data # Print the tree def PrintTree(self): if self.left: self.left.PrintTree() print( self.data), if self.right: self.right.PrintTree() # Usethe insert method to add nodes root =Node(12) root.insert(6) root.insert(14) root.insert(3) root.PrintTree()

优点:

用作表示层次亲密关系动态大小,规模巨大快速插入和删除操作在二叉搜寻树中,插入的节点被立即排序。二叉搜寻树的搜寻工作效率高;长度只有O(高度)。

缺点:

修改或“平衡”树或从已知位置检索原素的时间开销为O(logn)子节点在父节点上没信息,并且很难向后遍历仅适用作排序的条目。未排序的统计数据退化为线性搜寻。

应用:

非常适宜储存多层统计数据,如文件位置

Python中的常见树复试问题

检查两棵二叉树是否相同实现一个二叉树的层次顺序遍历打印二叉搜寻树的周长对路径上的大部份节点求和相连二叉树的大部份兄弟

python中的图

图是一种计算机流程,用作表示统计数据顶点(图的节点)间亲密关系的可视化。将顶点相连在一起的链接称为边。

边定义了哪些顶点被相连,但没指明它们间的流向。每个顶点与其他顶点都有相连,那些相连以逗号隔开的条目形式保存在顶点上。

这8种数据结构,身为python开发的你必须得懂

还有一种特殊的图叫做有向图,它定义了亲密关系的方向,近似于二叉树。在建模单向亲密关系或类似流程图的内部结构时,有向图很有帮助。

这8种数据结构,身为python开发的你必须得懂

它们主要用作以标识符形式传达可视化的网络内部结构网络。那些内部结构可以为许多不同类型的亲密关系建模,比如层次内部结构、分支内部结构,或者只是一个失序的亲密关系网络。图形的通用性和直观性使它们成为统计数据科学的宠儿。

当以纯文本形式编写时,图具有顶点和边的条目:

V = {a, b, c, d, e} E = {ab, ac, bd, cd, de}

在Python中,图的最佳实现方式是采用词典,每个顶点的名称作为键,边条目作为值。

# Create the dictionary with graph elements graph = { “a” : [“b”,“c”], “b” : [“a”, “d”], “c” : [“a”, “d”], “d” : [“e”], “e” : [“d”] } # Print the graph print(graph)

优点:

通过标识符快速传达视觉信息可用作建模广泛的现实世界问题语法学习简单

缺点:

在大型图中很难理解顶点链接从图表中解析统计数据的时间昂贵

应用:

非常适宜网络或类似网络的内部结构筑模曾为Facebook等社交网站建模

Python中的常见图形复试问题

在有向图中检测周期在有向图中找到一个“母顶点”计算无向图中的边数检查两个顶点间是否存在路径求两个顶点间的最短路径

Python中的基元表

基元表是一种复杂的计算机流程,能够储存大量信息并有效检索某一原素。

此计算机流程采用键/值对,其中键是所需原素的名称,值是储存在该名称下的统计数据。

这8种数据结构,身为python开发的你必须得懂

每个输入键都要经过一个基元函数,该函数将其从初始形式转换为一个整数值,称为基元。基元函数必须始终从相同的输入产生相同的基元,必须快速计算,并产生固定长度的值。Python包含一个内建的hash()函数,可以加速实现。

然后,该表采用散列来查找所需值(称为储存桶)的一般位置。然后,流程只需要在这个子组中搜寻所需的值,而不必搜寻整个统计数据池。

除了这个通用架构之外,根据应用流程的不同,基元表也可能非常不同。有些可能允许来自不同统计数据类型的键,而有些可能有不同的设置桶或不同的散列函数。

下面是一个Python标识符中的基元表示例:

import pprint class Hashtable: def __init__(self, elements): self.bucket_size = len(elements) self.buckets = [[] for i in range(self.bucket_size)] self._assign_buckets(elements) def _assign_buckets(self, elements): for key, value in elements: #calculates the hash of each key hashed_value = hash(key) index = hashed_value % self.bucket_size# positions the element in the bucket using hash self.buckets[index].append((key, value)) #adds a tuple in the bucket def get_value(self, input_key): hashed_value = hash(input_key) index = hashed_value %self.bucket_size bucket = self.buckets[index] for key, value in bucket: if key == input_key: return(value) return None def __str__(self): return pprint.pformat(self.buckets) # pformat returns a printable representation of the object if __name__ == “__main__”: capitals = [ (France, Paris), (United States, Washington D.C.), (Italy, Rome), (Canada, Ottawa) ] hashtable = Hashtable(capitals) print(hashtable) print(f“The capital of Italy is {hashtable.get_value(Italy)}”

优点:

可以将任何形式的键隐藏为整数检索对于大型统计数据集非常有效搜寻工作效率高每次搜寻的步骤数不变,添加或删除原素的工作效率不变在Python 3中进一步强化

缺点:

基元值必须是唯一的,两个键转换为相同的基元值会导致冲突错误碰撞错误需要对基元函数进行全面修改对于初学者来说很难构筑

应用流程:

用作频繁查询的大型统计资料库根据关键字检索的系统

Python中常见的基元表复试问题

从头开始构筑基元表(不含内建函数)找出两个加起来是k的数为冲突处理实现开放寻址采用基元表检测条目是否循环

_学习愉快!

————————————————

版权新闻稿:本文为CSDN博主「流程员石磊」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本新闻稿。

原文链接:

https://blog.csdn.net/huangmingleiluo/article/details/119407531

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务