听到数据结构,你会想到什么?数据结构是根据类型组织和分组数据的容器。它们因可变性和顺序而异。可变性是指在创建对象后更改对象的能力。我们有两种类型的数据结构,内置数据结构和用户定义的数据结构。什么是数据算法-是计算机执行的一系列步骤,它接受输入并将其转换为目标输出。内置数据结构列表列表用方括号定义并包含以逗号分隔的数据。该列表是可变的和有序的。它可以包含不同数据类型的混合。months=['一月','二月','三月','四月','五月','六月','七月','八月','九月','十月','十一月','十二月']print(months[0])#打印索引为0的元素print(months[0:7])#索引0到6的所有元素months[0]='birthday#将索引0中的值与单词birthday进行交换print(月)元组是另一种容器。它是一种不可变的有序元素序列的数据类型。不可变,因为您不能在元组中添加和删除元素,也不能就地对其进行排序。length,width,height=9,3,1#Wecanassignmultiplevariablesinoneshotprint("Thedimensionsare{}*{}*{}".format(length,width,height))一组集合是onlyelement的可变且无序的集合。它使我们能够快速从列表中删除重复项。numbers=[1,2,3,4,6,3,3]unique_nums=set(numbers)print(unique_nums)models={'declan','gift','jabali','viola','kinya','nick',betty'}print('davis'inmodels)#检查集合models中是否有turnermodels.add('davis')print(model.pop())删除最后一项#dictionary字典是可变的无序数据结构。它允许存储一对项目(即键和值)。以下示例显示了将容器包含到其他容器中以创建复合数据结构的可能性。music={'jazz':{"coltrane":"Inasentimentalmood","M.Davis":BlueinGreen","T.Monk":"Don'tBlameMe"},"classical":{"Bach":"cellosuit","Mozart":"lacrimosa","satle":"Gymnopedie"}}print(music["jazz"]["coltrane'])#我们选择键的值coltraneprint(music["classical"]['mozart"])Stacksusingarrays栈是一种线性数据结构,其中的元素按顺序排列,遵循L.I.F.O机制,即后进先出。因此,最后插入的元素将用作第一个元素被移除。这些操作是:将一个元素压入堆栈。从堆栈中移除一个元素。要检查的条件溢出条件-当我们尝试将另一个元素放入已经具有最大元素的堆栈中时,这会发生。下溢条件-当我们试图从空堆栈中删除一个元素时会发生这种情况。classmystack:def__init__(self):self.data=[]deflength(self):#listreturnlen(self.data)defis_full(self):#checkifthelistisfullornotiflen(self.data)==5:returnTrueelse:returnFalsedefpush(self,element):#insertanewelementiflen(self.data)<5:self.data.append(element)else:return"溢出"defpop(self):##从列表中删除最后一个元素iflen(self.data)==0:return"underflow"else:returnself.data.pop()a=mystack()#我创建了我的对象a。push(10)#插入元素a.push(23)a.push(25)a.push(27)a.push(11)print(a.length())print(a.is_full())print(a.data)print(a.push(31))#我们尝试在列表中再插入一个元素-输出将是overflowprint(a.pop())print(a.pop())print(a.pop())print(a.pop())print(a.pop())print(a.pop())#尝试删除列表中没有元素的元素-输出将下溢使用数组队列queueisa线性数据结构,其中元素是有序的。它遵循先进先出的F.I.F.O机制。描述队列两端特征的方面:Front-指向起始元素。指向最后一个元素。有两个操作:enqueue-将一个元素插入队列。这将在后面完成。dequeue-从队列中移除一个元素。这将在前线完成。有两个条件。溢出-插入已满的队列。下溢-从空队列中移除。类myqueue:def__init__(self):自我。data=[]deflength(self):returnlen(self.data)defenque(self,element):#将元素放入队列中iflen(self.data)<5:returnself.data.append(element)else:return"overflow"defdeque(self):#删除我们放入队列的第一个元素iflen(self.data)==0:return"underflow"else:self.data.pop(0)b=myqueue()b.enque(2)#将元素放入队列b.enque(3)b.enque(4)b.enque(5)print(b.data)b.deque()##移除第一个我们放在queueprint(b.data)树(普通树)树中的元素用于定义层次结构。它从根节点开始,向下到称为子节点的最终节点。在本文中,我主要关注二叉树。二叉树是一种树状数据结构,其中每个节点最多有两个孩子,称为左孩子和右孩子。#创建类Node和属性classNode:def__init__(self,letter):self.childleft=Noneself.childright=Noneself.nodedata=letter#createthenodesforthetreeroot=Node('A')root.childleft=Node('B')root.childright=Node('C')root.childleft.childleft=Node('D')root.childleft.childright=Node('E')链表这是一个连接的列表节点线性数据。每个节点存储数据并显示到下一个节点的路由。它们用于实现撤消功能和动态内存分配。类LinkedList:def__init__(self):self.head=Nonedef__iter__(self):node=self.headwhilenodeisnotNone:yieldnodenode=node.nextdef__repr__(self):nodes=[]fornodeinself:nodes.append(node.val)return"->".join(nodes)defadd_to_tail(self,node):ifself.head==None:self.head=node返回current_nodeinself:passcurrent_node.set_next(node)defremove_from_head(self):ifself.head==None:returnNonetemp=self.headself.head=self.head.next返回tempclassNode:def__init__(self,val):self.val=valself.next=Nonedefset_next(self,node):self.next=nodedef__repr__(self):returnself.valgraph这是一个数据结构,收集节点和连接到其他节点的数据。它包括:顶点的集合。边的集合E,表示为一对有序的顶点(u,v)并分别解决。动态-它将问题分成子部分,记住子部分的结果,并将它们应用于类似的问题。贪心算法-在解决问题时采取最简单的步骤,而不用担心未来的复杂性。算法类型树遍历算法是非线性数据结构。以根和节点为特征。这里的中序遍历分为三种,前序遍历和后序遍历。排序算法-用于按给定顺序对数据进行排序。可分为归并排序和冒泡排序。搜索算法-用于查找给定数据集中存在的某些元素。一些类型的搜索算法是:线性搜索、二分搜索和指数搜索。
