当你听到数据结构时,你会想到什么? 数据结构是根据类型组织和分组数据的容器。它们基于可变性和顺序而不同。可变性是指创建后改变对象的能力。我们有两种类型的数据结构,内置数据结构和用户定义的数据结构。 什么是数据算法是由计算机执行的一系列步骤,接受输入并将其转换为目标输出。内置数据结构列表 列表是用方括号定义的,包含用逗号分隔的数据。该列表是可变的和有序的。它可以包含不同数据类型的混合。 months〔january,february,march,april,may,june,july,august,september,october,november,december〕 print(months〔0〕)printtheelementwithindex0 print(months〔0:7〕)alltheelementsfromindex0to6 months〔0〕birthdayexchangethevalueinindex0withthewordbirthday print(months)元组 元组是另一种容器。它是不可变有序元素序列的数据类型。不可变的,因为你不能从元组中添加和删除元素,或者就地排序。 length,width,height9,3,1Wecanassignmultiplevariablesinoneshot print(Thedimensionsare{}{}{}。format(length,width,height)) 一组 集合是唯一元素的可变且无序的集合。它可以让我们快速地从列表中删除重复项。 numbers〔1,2,3,4,6,3,3〕 uniquenumsset(numbers) print(uniquenums) models{declan,gift,jabali,viola,kinya,nick,betty} print(davisinmodels)checkifthereisturnerinthesetmodels models。add(davis) print(model。pop())removethelastitem 字典 字典是可变和无序的数据结构。它允许存储一对项目(即键和值) 下面的例子显示了将容器包含到其他容器中来创建复合数据结构的可能性。music{jazz:{coltrane:Inasentimentmood,M。Davis:BlueinGreen,T。Monk:DontBlameMe},classical:{Bach:cellosuit,Mozart:lacrimosa,satle:Gymnopedie}}print(music〔jazz〕〔coltrane〕)weselectthevalueofthekeycoltraneprint(music〔classical〕〔mozart〕) 用户定义的数据结构 使用数组的堆栈堆栈是一种线性数据结构,其中元素按顺序排列。它遵循L。I。F。O的机制,意思是后进先出。因此,最后插入的元素将作为第一个元素被删除。这些操作是:将元素推入堆栈。从堆栈中删除一个元素。要检查的条件 溢出情况当我们试图在一个已经有最大元素的堆栈中再放一个元素时,就会出现这种情况。 下溢情况当我们试图从一个空堆栈中删除一个元素时,就会出现这种情况。classmystack:definit(self):self。data〔〕deflength(self):lengthofthelistreturnlen(self。data)defisfull(self):checkifthelistisfullornotiflen(self。data)5:returnTrueelse:returnFalsedefpush(self,element):insertanewelementiflen(self。data)5:self。data。append(element)else:returnoverflowdefpop(self):removethelastelementfromalistiflen(self。data)0:returnunderflowelse:returnself。data。pop()amystack()Icreatemyobjecta。push(10)inserttheelementa。push(23)a。push(25)a。push(27)a。push(11)print(a。length())print(a。isfull())print(a。data)print(a。push(31))wetrytoinsertonemoreelementinthelisttheoutputwillbeoverflowprint(a。pop())print(a。pop())print(a。pop())print(a。pop())print(a。pop())print(a。pop())trytodeleteanelementinalistwithoutelementstheoutputwillbeunderflow使用数组排队 队列是一种线性数据结构,其中的元素按顺序排列。它遵循先进先出的F。I。F。O机制。 描述队列特征的方面 两端: 前端指向起始元素。 指向最后一个元素。 有两种操作:enqueue将元素插入队列。它将在后方完成。出列从队列中删除元素。这将在前线完成。有两个条件。溢出插入到一个已满的队列中。下溢从空队列中删除。classmyqueue:definit(self):self。data〔〕deflength(self):returnlen(self。data)defenque(self,element):puttheelementinthequeueiflen(self。data)5:returnself。data。append(element)else:returnoverflowdefdeque(self):removethefirstelementthatwehaveputinqueueiflen(self。data)0:returnunderflowelse:self。data。pop(0)bmyqueue()b。enque(2)puttheelementintothequeueb。enque(3)b。enque(4)b。enque(5)print(b。data)b。deque()removethefirstelementthatwehaveputinthequeueprint(b。data)树(普通树) 树用于定义层次结构。它从根节点开始,再往下,最后的节点称为子节点。 在本文中,我主要关注二叉树。二叉树是一种树形数据结构,其中每个节点最多有两个孩子,称为左孩子和右孩子。 createtheclassNodeandtheattrbutesclassNode:definit(self,letter):self。childleftNoneself。childrightNoneself。nodedatalettercreatethenodesforthetreerootNode(A)root。childleftNode(B)root。childrightNode(C)root。childleft。childleftNode(D)root。childleft。childrightNode(E) 链表 它是具有一系列连接节点的线性数据。每个节点存储数据并显示到下一个节点的路由。它们用来实现撤销功能和动态内存分配。classLinkedList:definit(self):self。headNonedefiter(self):nodeself。headwhilenodeisnotNone:yieldnodenodenode。nextdefrepr(self):nodes〔〕fornodeinself:nodes。append(node。val)return。join(nodes)defaddtotail(self,node):ifself。headNone:self。headnodereturnforcurrentnodeinself:passcurrentnode。setnext(node)defremovefromhead(self):ifself。headNone:returnNonetempself。headself。headself。head。nextreturntempclassNode:definit(self,val):self。valvalself。nextNonedefsetnext(self,node):self。nextnodedefrepr(self):returnself。val 图表 这是一种数据结构,它收集了具有连接到其他节点的数据的节点。 它包括:顶点的集合。边E的集合,表示为有序的顶点对(u,v) 算法 在算法方面,我不会讲得太深,只是陈述方法和类型:分而治之以将问题分成子部分并分别解决而闻名。动态它将问题分成子部分,记住子部分的结果,并将其应用于类似的问题。贪婪算法在解决问题时采取最简单的步骤,而不用担心未来的复杂性。算法的类型树遍历算法是非线性数据结构。以根和节点为特征。这里有三种类型的按序遍历,前序遍历和后序遍历。排序算法用于按照给定的顺序对数据进行排序。可分为归并排序和冒泡排序。搜索算法用于寻找给定数据集中存在的一些元素。一些类型的搜索算法是:线性搜索,二分搜索法和指数搜索。 原文:https:www。tuicool。comarticleshitVRRvYr3