首先

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

数组(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. SQL Server日志文件过大 大日志文件清理方法 不分离数据库

    SQL Server日志文件过大    大日志文件清理方法 ,网上提供了很多分离数据库——〉删除日志文件-〉附加数据库 的方法,此方法风险太大,过程也比较久,有时候也会出现分离不成功的现象.下面的方式 ...

  2. java十进制转换成二进制数

    牢记这些呀,特别常用! 1.十进制转成二进制 String s = Integer.toBinaryString(n)  //将十进制数转成字符串,例如n=5 ,s = "101" ...

  3. 机器学习性能指标(ROC、AUC、召回率)

    混淆矩阵 构造一个高正确率或高召回率的分类器比较容易,但很难保证二者同时成立 ROC 横轴:FPR(假正样本率)=FP/(FP+TN) 即,所有负样本中被分错的比例 纵轴:TPR(真正样本率)=TP/ ...

  4. 网络基础-- 之 子网划分 and 一些基础解释

    子网划分的核心思想就是------   借主机为为网络位 最近几天--看了一下今天就分享一波. 首先我们先来理解一下 -----   one. 进制的转换   -----   two. IP地址 -- ...

  5. web项目局部打印

    window.print()方法是打印整个body,若想打印局部区域,网上出现了各种解决办法,我觉得都挺好的.我最推荐jquery.PrintArea.js插件形式 点击上述链接首先下载下来,我的是版 ...

  6. js中的instanceof运算符

    概述 instanceof运算符用来判断一个构造函数的prototype属性所指向的对象是否存在另外一个要检测对象的原型链上 语法 obj instanceof Object;//true 实例obj ...

  7. 20172325 2018-2019-2 《Java程序设计》第九周学习总结

    20172325 2018-2019-2 <Java程序设计>第九周学习总结 教材学习内容总结 图的定义 图是由顶点集(VertexSet)和边集(EdgeSet)组成,针对图G,顶点集和 ...

  8. Java第三次实验敏捷开发与XP实验

    实验三-1 1.实验要求: 实验三 敏捷开发与XP实践 http://www.cnblogs.com/rocedu/p/4795776.html, Eclipse的内容替换成IDEA 参考 http: ...

  9. boost asio 学习(九) boost::asio 网络封装

    http://www.gamedev.net/blog/950/entry-2249317-a-guide-to-getting- started-with-boostasio?pg=10 9. A ...

  10. 10.22 tcpdump:监听网络流量

    [功能说明] tcpdump命令是一个截获网络数据包的包分析工具.tcpdump可以将网络中传送的数据包的“头”完全截获下来以提供分析.它支持针对网络层.协议.主机.端口等的过滤,并支持与.或.非逻辑 ...