首先

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

数组(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. Spring学习,初识Spring

    Spring概述 将Spring理解为管理对象间依赖关系的容器 “解耦” 根据功能的不同,可以将一个系统中的代码分为 主业务逻辑 与 系统级业务逻辑 两类 ```Spring 是为了解决企业级开发的复 ...

  2. github 访问速度太慢

    151.101.112.249 http://global-ssl.fastly.Net 192.30.253.112 http://github.com 在hosts文件添加 另 pip里的pyec ...

  3. Python设计模式 - UML - 部署图(Deployment Diagram)

    简介 部署图也称配置图,用来显示系统中硬件和软件的物理架构.从中可以了解到软件和硬件组件之间的物理拓扑.连接关系以及处理节点的分布情况. 部署图建模步骤 - 找出需要进行部署的各类节点,如网络硬件设备 ...

  4. FloatingActionButton FAB 悬浮按钮

    FloatingActionButton简称FAB,这是一种比较美观的按钮: 1.使用前: FAB代表一个App或一个页面中最主要的操作,如果一个App的每个页面都有FAB,则通常表示该App最主要的 ...

  5. oracle可重复执行脚本(添加字段)

    --添加债券期限字段 declare cn integer; begin cn := 0; select count(*) into cn from user_tab_cols t where t.t ...

  6. js限制图片大小、点击放大图片、点击在新开页面显示

    缩放图片到合适大小        function ResizeImages() {            var myimg, oldwidth, oldheight;            var ...

  7. Ueditor 前后端分离实现文件上传到独立服务器

    关于Ueditor 前后端分离实现文件上传到独立服务器,在网上搜索确实遇到大坑,不过还好遇到了 虚若影 最终实现了,在此感谢!虚若影的原文博客网址:http://www.cnblogs.com/hpn ...

  8. ECMAscript,DOM,BOM哪个比较重要

    ECMA > DOM > BOM ECMA是JS的核心,语法.变量.对象.各种对象的API.作用域.原型链.闭包.This指向.构造函数等等必须要熟练,有了这些基础你才能去熟练的操作DOM ...

  9. pytbull:入侵检测/预防系统测试框架 (转)

    pytbull:入侵检测/预防系统测试框架 或许当你安装了 IDS/IPS(入侵检测/预防系统)之后就感觉系统安全无忧了,但如何确信?答案是测试.pytbull 是使用 Python 开发而成的 ID ...

  10. win10下使用wget

    一.下载 官网:http://gnuwin32.sourceforge.net/packages/wget.htm 下载地址:http://downloads.sourceforge.net/gnuw ...