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 ...
随机推荐
- [leetcode]72. Edit Distance 最少编辑步数
Given two words word1 and word2, find the minimum number of operations required to convert word1 to ...
- [leetcode]23. Merge k Sorted Lists归并k个有序链表
Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity. I ...
- java_21 Set接口、HashSet类、LinkedSet类
1Set 包含不可重复元素的集合,是一个无序集合. 子类:hashSet .LinkedSet 2.含有父类Collection的方法 add(): 如果 set 中尚未存在指定的元素,则添加此元素( ...
- java_20 LinkedList类
LinkedList类特有的方法 (1)addLast() 将指定元素添加到此列表的结尾. addFirst() 将指定元素添加到此列表的开始. public static void main(St ...
- ABP框架 配置权限、本地语言文件、左侧菜单项
1.Framework.Core>Authorization>PermissionNames.cs 这里新增权限项 namespace Framework.Authorization { ...
- 对hadoop namenode -format执行过程的探究
引言 本文出于一个疑问:hadoop namenode -format到底在我的linux系统里面做了些什么? 步骤 第1个文件bin/hadoop Hadoop脚本位于hadoop根目录下的bi ...
- Minimum Domino Rotations For Equal Row LT1007
In a row of dominoes, A[i] and B[i] represent the top and bottom halves of the i-th domino. (A domi ...
- ssms创建链接服务器
- Linux学习笔记:Tomcat安装与使用
Tomcat是一个Servlet容器服务器,用java实现的. 目录结构 Tomcat的安装也很简单,从官网下载安装包.解压后的tomcat目录 apache-tomcat-7.0.92 下的子目录为 ...
- [MACHINE LEARNING] Can we predict voting outcomes?
1. CART Tree library(rpart)library(rpart.plot)CTree = rpart(Party ~ . -USER_ID, data = train, method ...