首先,我们要分清楚一些概念和他们之间的关系数组(array) 表(list) 链表(linked list) 数组链表(array list) 队列(queue) 栈(stack)python数据结构:数组、列表、栈、队列及实现list列表array数组python中内置list数据结构 存放的数据类型可以不同。但是有个缺点 list存放的是数据的索引也就是指针 这需要数据的原有存储加上数据的指针 增加了消耗。python中numpy库的array 存放单一类型数据 。python中数组并不是基本数据类型 但是可以调用array库 或者numpy库使用数组array 。array库只能创建一维数组 numpy中的数组适用性非常广 建议使用numpy。1 import array2 arr=array.array(‘i’,[1,2,3,4]) #创建数组3 print(arr,type(arr))相互转换1 import numpy as np2 arr=np.array([1,2,3,4]) #创建数组3 li=arr.tolist() #数组转换为列表4 new_arr=np.array(li) #列表转数组5 print(arr,type(arr))6 print(li,type(li))7 print(new_arr,type(new_arr))#输出[1 2 3 4] <class ’numpy.ndarray’>[1, 2, 3, 4] <class ’list’>[1 2 3 4] <class ’numpy.ndarray’>可以发现list元素之间有逗号隔开,array之间没有符号隔开Queue队列 -只允许在一段进行删除操作在另一端进行插入操作的数组结构Stack栈 -删除与插入操作在同一端进行的数组结构特点Queue -先进先出 FIFO first in first outStack -先进后出 FILO first in last out共同点:栈和队列都是一种操作受限制的线性表用途:栈:表达式的括号匹配问题,迷宫求解队列:银行排队,操作系统进程问题,舞伴问题身为老司机,还是得分享些干货精品学习资料的,推荐下小编创建的Python学习交流群556370268,送给每一位小伙伴,这里是小白聚集地,每天还会直播和大家交流分享经验哦,欢迎初学和进阶中的小伙伴。python实现队列:(有注释) 1 class Node(object): 2 def init(self,val): #节点传入值 3 self.next=None #每个节点定义2个属性 next指向下一个位置 4 self.val=val # val 节点的值 5 6 class Queue(object): 7 def init(self): 8 self.first=None #每个队列定义2个属性 first删除端 9 self.last=None # last插入端10 11 def enqueue(self,n):12 n=Node(n)13 if(self.first==None): #如果队列为空14 self.first=n15 self.last=n16 else: #如果队列不为空17 self.last.next=n #插入端的指向为n18 self.last=n #插入端的最后一个值为n19 20 def dequeue(self):21 if (self.first==None):22 return None23 else:24 reval=self.first.val25 self.first=self.first.next #将删除端的第一个指定为下一个26 return reval27 def allquit(self): # allquit作用:队列中元素放入list中方便打印28 alist=[]29 while (self.first!=None): #循环30 temp=self.first.val #和dequeue的操作相同31 self.first=self.first.next32 alist.append(temp)33 return alist34 35 if name == “main":36 q=Queue()37 q.enqueue(1)38 q.enqueue(2)39 q.enqueue(3)40 q.dequeue()41 print(q.allquit())python实现栈:(有注释) 1 class Node(object): 2 def init(self,val): 3 self.next=None 4 self.val=val 5 class Stack(object): 6 def init(self): 7 self.top=None #和queue不同栈删除插入都在一端 所以只定义一个位置 8 9 def push(self,n):10 n=Node(n)11 if(self.top==None): #如果栈为空12 self.top=n13 else:14 n.next=self.top #插入元素的下一个为顶格元素15 self.top = n #顶格元素为插入值16 17 def pop(self): #删除顶格元素18 if(self.top==None): #如果栈为空19 return None20 else:21 temp=self.top.val22 self.top=self.top.next #新的顶格元素为老顶格元素的上一个23 return temp24 25 def allquit(self): #打印栈方法26 alist=[]27 while(self.top!=None): #循环28 temp=self.top.val #和pop()方法操作相同29 self.top=self.top.next30 alist.append(temp)31 print(alist)32 33 if name== “main” :34 s=Stack()35 s.push(1)36 s.push(3)37 s.push(5)38 s.pop()39 s.allquit()