首先

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

数组(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数据结构-数组/列表/栈/队列及实现的更多相关文章

  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. [剑指Offer]5-替换空格

    链接 https://www.nowcoder.com/practice/9023a0c988684a53960365b889ceaf5e?tpId=13&tqId=11210&tPa ...

  2. 156. Binary Tree Upside Down反转二叉树

    [抄题]: Given a binary tree where all the right nodes are either leaf nodes with a sibling (a left nod ...

  3. 保存一份自己常用的packjson

    这里是一份专门针对react的插件配置, 有: es5的转换器,有ie的promise垫片,有蚂蚁金服的anth,还有用于消息通信的pubsub订阅发布系统,虽然现在不用了.... 用于发请求的axi ...

  4. 通过Solrj实现对索引库中数据的局部更新操作

    for (UpdateIndexDTO updateIndexDTO : data) { // 局部更新 SolrInputDocument doc = new SolrInputDocument() ...

  5. vs [失败]未能找到文件

    用文本文件打开csproj 文件.将里面的不需要文件删除; 或者在工程里面先将其移出工程.然后再删除;

  6. [费用流][BZOJ1070]修车

    修车 题目描述 同一时刻有位车主带着他们的爱车来到了汽车维修中心.维修中心共有M位技术人员,不同的技术人员对不同的车进行维修所用的时间是不同的.现在需要安排这M位技术人员所维修的车及顺序,使得顾客平均 ...

  7. [SoapUI] 在SoapUI中,设置开关批量保存整个Response,作为期望结果进行校验

    //获取保存response的文件路径和名称 def testSuiteName = context.testCase.testSuite.name def testCaseName = contex ...

  8. Apache Beam编程指南

    术语 Apache Beam:谷歌开源的统一批处理和流处理的编程模型和SDK. Beam: Apache Beam开源工程的简写 Beam SDK: Beam开发工具包 **Beam Java SDK ...

  9. web集成高德地图

    1.使用高德地图API需到官网添加一个Key,http://lbs.amap.com/dev/key/app 2.页面头引入 <div id="addressMap"> ...

  10. A - ACboy needs your help again!

    ACboy was kidnapped!! he miss his mother very much and is very scare now.You can't image how dark th ...