python数据结构-数组/列表/栈/队列及实现
首先
我们要分清楚一些概念和他们之间的关系
数组(array) 表(list) 链表(linked list) 数组链表(array list) 队列(queue) 栈(stack)
list列表
array数组
python中内置list数据结构 存放的数据类型可以不同。
但是有个缺点 list存放的是数据的索引也就是指针 这需要数据的原有存储加上数据的指针 增加了消耗
python中numpy库的array 存放单一类型数据
python中数组并不是基本数据类型 但是可以调用array库 或者numpy库使用数组array
array库只能创建一维数组 numpy中的数组适用性非常广 建议使用numpy
- import array
- arr=array.array('i',[1,2,3,4]) #创建数组
- print(arr,type(arr))
相互转换
- import numpy as np
- arr=np.array([1,2,3,4]) #创建数组
- li=arr.tolist() #数组转换为列表
- new_arr=np.array(li) #列表转数组
- print(arr,type(arr))
- print(li,type(li))
- 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 out
Stack -先进后出 FILO first in last out
共同点:栈和队列都是一种操作受限制的线性表
用途:栈:表达式的括号匹配问题,迷宫求解
队列:银行排队,操作系统进程问题,舞伴问题
python实现队列:(有注释)
- class Node(object):
- def __init__(self,val): #节点传入值
- self.next=None #每个节点定义2个属性 next指向下一个位置
- self.val=val # val 节点的值
- class Queue(object):
- def __init__(self):
- self.first=None #每个队列定义2个属性 first删除端
- self.last=None # last插入端
- def enqueue(self,n):
- n=Node(n)
- if(self.first==None): #如果队列为空
- self.first=n
- self.last=n
- else: #如果队列不为空
- self.last.next=n #插入端的指向为n
- self.last=n #插入端的最后一个值为n
- def dequeue(self):
- if (self.first==None):
- return None
- else:
- reval=self.first.val
- self.first=self.first.next #将删除端的第一个指定为下一个
- return reval
- def allquit(self): # allquit作用:队列中元素放入list中方便打印
- alist=[]
- while (self.first!=None): #循环
- temp=self.first.val #和dequeue的操作相同
- self.first=self.first.next
- alist.append(temp)
- return alist
- if __name__ == "__main__":
- q=Queue()
- q.enqueue(1)
- q.enqueue(2)
- q.enqueue(3)
- q.dequeue()
- print(q.allquit())
python实现栈:(有注释)
- class Node(object):
- def __init__(self,val):
- self.next=None
- self.val=val
- class Stack(object):
- def __init__(self):
- self.top=None #和queue不同栈删除插入都在一端 所以只定义一个位置
- def push(self,n):
- n=Node(n)
- if(self.top==None): #如果栈为空
- self.top=n
- else:
- n.next=self.top #插入元素的下一个为顶格元素
- self.top = n #顶格元素为插入值
- def pop(self): #删除顶格元素
- if(self.top==None): #如果栈为空
- return None
- else:
- temp=self.top.val
- self.top=self.top.next #新的顶格元素为老顶格元素的上一个
- return temp
- def allquit(self): #打印栈方法
- alist=[]
- while(self.top!=None): #循环
- temp=self.top.val #和pop()方法操作相同
- self.top=self.top.next
- alist.append(temp)
- print(alist)
- if __name__== "__main__" :
- s=Stack()
- s.push(1)
- s.push(3)
- s.push(5)
- s.pop()
- s.allquit()
python数据结构-数组/列表/栈/队列及实现的更多相关文章
- Python数据结构 将列表作为栈和队列使用
列表作为栈使用 Python列表方法使得列表作为堆栈非常容易,最后一个插入,最先取出(“后进先出”).要添加一个元素到堆栈的顶端,使用 append() .要从堆栈顶部取出一个元素,使用 pop() ...
- python之把列表当做队列使用
把列表当做队列使用,只是在列表中第一个加入的元素,第一个提取出来,拿列表当做队列用,效率并不高.在列表中最后添加或者删除元素速度很快,然而从列表里插入或者从头弹出速度却不快,因为其他所有元素都要一个一 ...
- Python数据结构之列表
1.Python列表是Python内置的数据结构对象之一,相当于数组 2.列表用[] 包含,内有任意的数据对象,每一个数据对象以 ,逗号分隔,每隔数据对象称之为元素 3.Python列表是一个有序的序 ...
- python数据结构与算法——栈
# 栈# 其实python里面的list就可以当栈使用啦,用collections.deque也可以# 1. 入栈 list.append(item)# 2. 出栈 item = list.pop() ...
- Python数据结构之列表、元组及字典
一位大牛Niklaus Wirth曾有一本书,名为<Algorithms+Data Structures=Programs>,翻译过来也就是算法+数据结构=程序.而本文就是介绍一下Pyth ...
- Python数据结构:列表、元组和字典
在Python中有三种内建的数据结构——列表list.元组tuple和字典dict 列表中的项目包括在方括号中,项目之间用逗号分割 元组和列表十分类似,只不过元组和字符串一样是不可变的 即你不能修改元 ...
- Python数据结构——散列表
散列表的实现常常叫做散列(hashing).散列仅支持INSERT,SEARCH和DELETE操作,都是在常数平均时间执行的.需要元素间任何排序信息的操作将不会得到有效的支持. 散列表是普通数组概念的 ...
- 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 ...
- Python数据结构:列表、字典、元组、集合
列表:shoplist = ['apple', 'mango', 'carrot', 'banana']字典:di = {'a':123,'b':'something'}集合:jihe = {'app ...
随机推荐
- MySQL事件不自动执行
前台统计数据量很大,于是在数据库中新建了一个事件,每隔10分钟执行一次存储过程,向统计表中插入统计数据 但是创建完成后发现事件并不会自动执行,上网查了一下才知道必须手工开启才事件可以 查看事件开启状态 ...
- 《CSAPP》符号和符号表
符号和符号表 每个可重定位目标模块m都有一个符号表,它包含m所定义和引用的符号的信息. 有三种不同的符号: 由m定义并能被其他模块引用的全局符号.对应非静态的C函数以及不带C static属性的全局变 ...
- Git 分支合并:合并某次提交
有时只想合并其它分支到某次提交,而不是所有提交. 一 切换到当前分支 首先,在做一次可能有冲突的合并前尽可能保证工作目录是干净的. 如果你有正在做的工作,要么提交到一个临时分支要么储藏它. 这使你可以 ...
- 36 【kubernetes】coredns
CoreDNS是k8s中,master节点和从节点及其pods之间通信的接口. 但是上个博客中遇到一个问题dns一直处于crush的状态. https://www.cnblogs.com/helww/ ...
- java_16Arrays类
1sort():对数组进行升序排列 public static void main(String[] args) { int[] arr= {2,43,6,7}; Arrays.sort(arr); ...
- 工欲善其事,必先利其器-ecplise配置和优化
1.eclipse下的编码设置:eclipse 中使用模板新建 JSP,xhtml等 文件时,默认的编码为:ISO-8859-1. ISO-8859-1 编码对于中文的显示是不支持的,如果要支持简体中 ...
- Java线程池的构造以及使用
有时候,系统需要处理非常多的执行时间很短的请求,如果每一个请求都开启一个新线程的话,系统就要不断的进行线程的创建和销毁,有时花在创建和销毁线程上的时间会比线程真正执行的时间还长.而且当线程数量太多时, ...
- redis使用规范文档 20170522版
运维redis很久了,一直是口头给rd说各种要求,尝试把这些规范总结成文档 摘选一些可能比较通用的规则如下: 强制:所有的key设置过期时间(最长可设置过期时间10天,如有特殊要求,联系dba说明原因 ...
- [MACHINE LEARNING] Can we predict voting outcomes?
1. CART Tree library(rpart)library(rpart.plot)CTree = rpart(Party ~ . -USER_ID, data = train, method ...
- 登录服务器失败 IP 统计和处理方法
一.登录ssh失败次数统计 1)错误的打开方式 awk '/Failed password/ {print $(NF-3)}' secure |sort -n |uniq -c|sort -n |ta ...