首先

我们要分清楚一些概念和他们之间的关系

数组(array)  表(list)  链表(linked list)  数组链表(array list)   队列(queue)  栈(stack)

list列表

array数组

python中内置list数据结构 存放的数据类型可以不同。

但是有个缺点 list存放的是数据的索引也就是指针 这需要数据的原有存储加上数据的指针 增加了消耗

python中numpy库的array 存放单一类型数据

python中数组并不是基本数据类型 但是可以调用array库 或者numpy库使用数组array

array库只能创建一维数组 numpy中的数组适用性非常广  建议使用numpy

  1. import array
  2. arr=array.array('i',[1,2,3,4]) #创建数组
  3. print(arr,type(arr))

相互转换

  1. import numpy as np
  2. 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. [1 2 3 4] <class 'numpy.ndarray'>
  3. [1, 2, 3, 4] <class 'list'>
  4. [1 2 3 4] <class 'numpy.ndarray'>

可以发现list元素之间有逗号隔开,array之间没有符号隔开

Queue队列  -只允许在一段进行删除操作在另一端进行插入操作的数组结构

Stack栈  -删除与插入操作在同一端进行的数组结构

特点

Queue -先进先出 FIFO first in first out

Stack  -先进后出 FILO first in last out

共同点:栈和队列都是一种操作受限制的线性表

用途:栈:表达式的括号匹配问题,迷宫求解

队列:银行排队,操作系统进程问题,舞伴问题

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=n
  15. self.last=n
  16. else: #如果队列不为空
  17. self.last.next=n #插入端的指向为n
  18. self.last=n #插入端的最后一个值为n
  19.  
  20. def dequeue(self):
  21. if (self.first==None):
  22. return None
  23. else:
  24. reval=self.first.val
  25. self.first=self.first.next #将删除端的第一个指定为下一个
  26. return reval
  27. def allquit(self): # allquit作用:队列中元素放入list中方便打印
  28. alist=[]
  29. while (self.first!=None): #循环
  30. temp=self.first.val #和dequeue的操作相同
  31. self.first=self.first.next
  32. alist.append(temp)
  33. return alist
  34.  
  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=n
  13. else:
  14. n.next=self.top #插入元素的下一个为顶格元素
  15. self.top = n #顶格元素为插入值
  16.  
  17. def pop(self): #删除顶格元素
  18. if(self.top==None): #如果栈为空
  19. return None
  20. else:
  21. temp=self.top.val
  22. self.top=self.top.next #新的顶格元素为老顶格元素的上一个
  23. return temp
  24.  
  25. def allquit(self): #打印栈方法
  26. alist=[]
  27. while(self.top!=None): #循环
  28. temp=self.top.val #和pop()方法操作相同
  29. self.top=self.top.next
  30. 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()

python数据结构-数组/列表/栈/队列及实现的更多相关文章

  1. Python数据结构 将列表作为栈和队列使用

    列表作为栈使用 Python列表方法使得列表作为堆栈非常容易,最后一个插入,最先取出(“后进先出”).要添加一个元素到堆栈的顶端,使用 append() .要从堆栈顶部取出一个元素,使用 pop()  ...

  2. python之把列表当做队列使用

    把列表当做队列使用,只是在列表中第一个加入的元素,第一个提取出来,拿列表当做队列用,效率并不高.在列表中最后添加或者删除元素速度很快,然而从列表里插入或者从头弹出速度却不快,因为其他所有元素都要一个一 ...

  3. Python数据结构之列表

    1.Python列表是Python内置的数据结构对象之一,相当于数组 2.列表用[] 包含,内有任意的数据对象,每一个数据对象以 ,逗号分隔,每隔数据对象称之为元素 3.Python列表是一个有序的序 ...

  4. python数据结构与算法——栈

    # 栈# 其实python里面的list就可以当栈使用啦,用collections.deque也可以# 1. 入栈 list.append(item)# 2. 出栈 item = list.pop() ...

  5. Python数据结构之列表、元组及字典

    一位大牛Niklaus Wirth曾有一本书,名为<Algorithms+Data Structures=Programs>,翻译过来也就是算法+数据结构=程序.而本文就是介绍一下Pyth ...

  6. Python数据结构:列表、元组和字典

    在Python中有三种内建的数据结构——列表list.元组tuple和字典dict 列表中的项目包括在方括号中,项目之间用逗号分割 元组和列表十分类似,只不过元组和字符串一样是不可变的 即你不能修改元 ...

  7. Python数据结构——散列表

    散列表的实现常常叫做散列(hashing).散列仅支持INSERT,SEARCH和DELETE操作,都是在常数平均时间执行的.需要元素间任何排序信息的操作将不会得到有效的支持. 散列表是普通数组概念的 ...

  8. python:数组/列表(remove()函数、append()函数、sort()函数、reverse()函数)

    排序: 1:整理顺序 #冒泡 lista = [5,7,11,19,99,63,3,9,1] list = [] while lista != []: number = 0 for i in list ...

  9. Python数据结构:列表、字典、元组、集合

    列表:shoplist = ['apple', 'mango', 'carrot', 'banana']字典:di = {'a':123,'b':'something'}集合:jihe = {'app ...

随机推荐

  1. MySQL事件不自动执行

    前台统计数据量很大,于是在数据库中新建了一个事件,每隔10分钟执行一次存储过程,向统计表中插入统计数据 但是创建完成后发现事件并不会自动执行,上网查了一下才知道必须手工开启才事件可以 查看事件开启状态 ...

  2. 《CSAPP》符号和符号表

    符号和符号表 每个可重定位目标模块m都有一个符号表,它包含m所定义和引用的符号的信息. 有三种不同的符号: 由m定义并能被其他模块引用的全局符号.对应非静态的C函数以及不带C static属性的全局变 ...

  3. Git 分支合并:合并某次提交

    有时只想合并其它分支到某次提交,而不是所有提交. 一 切换到当前分支 首先,在做一次可能有冲突的合并前尽可能保证工作目录是干净的. 如果你有正在做的工作,要么提交到一个临时分支要么储藏它. 这使你可以 ...

  4. 36 【kubernetes】coredns

    CoreDNS是k8s中,master节点和从节点及其pods之间通信的接口. 但是上个博客中遇到一个问题dns一直处于crush的状态. https://www.cnblogs.com/helww/ ...

  5. java_16Arrays类

    1sort():对数组进行升序排列 public static void main(String[] args) { int[] arr= {2,43,6,7}; Arrays.sort(arr); ...

  6. 工欲善其事,必先利其器-ecplise配置和优化

    1.eclipse下的编码设置:eclipse 中使用模板新建 JSP,xhtml等 文件时,默认的编码为:ISO-8859-1. ISO-8859-1 编码对于中文的显示是不支持的,如果要支持简体中 ...

  7. Java线程池的构造以及使用

    有时候,系统需要处理非常多的执行时间很短的请求,如果每一个请求都开启一个新线程的话,系统就要不断的进行线程的创建和销毁,有时花在创建和销毁线程上的时间会比线程真正执行的时间还长.而且当线程数量太多时, ...

  8. redis使用规范文档 20170522版

    运维redis很久了,一直是口头给rd说各种要求,尝试把这些规范总结成文档 摘选一些可能比较通用的规则如下: 强制:所有的key设置过期时间(最长可设置过期时间10天,如有特殊要求,联系dba说明原因 ...

  9. [MACHINE LEARNING] Can we predict voting outcomes?

    1. CART Tree library(rpart)library(rpart.plot)CTree = rpart(Party ~ . -USER_ID, data = train, method ...

  10. 登录服务器失败 IP 统计和处理方法

    一.登录ssh失败次数统计 1)错误的打开方式 awk '/Failed password/ {print $(NF-3)}' secure |sort -n |uniq -c|sort -n |ta ...