python数据结构-数组/列表/栈/队列及实现

摘要:
首先,我们需要区分一些概念及其关系。数组,列表,链接列表,数组,队列堆栈,列表,数组。python中内置的列表数据结构可以存储不同类型的数据。

首先

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

数组(array)  表(list)  链表(linked list)  数组链表(array list)   队列(queue)  栈(stack)

python数据结构-数组/列表/栈/队列及实现第1张

list列表

array数组

python中内置list数据结构 存放的数据类型可以不同。

但是有个缺点 list存放的是数据的索引也就是指针 这需要数据的原有存储加上数据的指针 增加了消耗

python中numpy库的array 存放单一类型数据 

 python中数组并不是基本数据类型 但是可以调用array库 或者numpy库使用数组array 

array库只能创建一维数组 numpy中的数组适用性非常广  建议使用numpy

1 import array
2 arr=array.array('i',[1,2,3,4])   #创建数组
3 print(arr,type(arr))

相互转换

1 import numpy as np
2 arr=np.array([1,2,3,4])   #创建数组
3 li=arr.tolist()           #数组转换为列表
4 new_arr=np.array(li)      #列表转数组
5 print(arr,type(arr))
6 print(li,type(li))
7 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实现队列:(有注释)

 1 class Node(object):
 2     def __init__(self,val):  #节点传入值
 3         self.next=None       #每个节点定义2个属性 next指向下一个位置
 4         self.val=val         #                  val 节点的值
 5 
 6 class Queue(object):
 7     def __init__(self):
 8         self.first=None      #每个队列定义2个属性 first删除端
 9         self.last=None       #                   last插入端
10 
11     def enqueue(self,n):
12         n=Node(n)
13         if(self.first==None): #如果队列为空
14             self.first=n
15             self.last=n
16         else:                 #如果队列不为空
17             self.last.next=n  #插入端的指向为n
18             self.last=n       #插入端的最后一个值为n
19 
20     def dequeue(self):
21         if (self.first==None):
22             return None
23         else:
24             reval=self.first.val
25             self.first=self.first.next  #将删除端的第一个指定为下一个
26             return reval
27     def allquit(self):             # allquit作用:队列中元素放入list中方便打印
28         alist=[]
29         while (self.first!=None):       #循环
30             temp=self.first.val         #和dequeue的操作相同
31             self.first=self.first.next
32             alist.append(temp)
33         return alist
34 
35 if __name__ == "__main__":
36     q=Queue()
37     q.enqueue(1)
38     q.enqueue(2)
39     q.enqueue(3)
40     q.dequeue()
41     print(q.allquit())

python实现栈:(有注释)

 1 class Node(object):
 2     def __init__(self,val):
 3         self.next=None
 4         self.val=val
 5 class Stack(object):
 6     def __init__(self):
 7         self.top=None              #和queue不同栈删除插入都在一端 所以只定义一个位置
 8 
 9     def push(self,n):
10         n=Node(n)
11         if(self.top==None):        #如果栈为空
12             self.top=n
13         else:
14             n.next=self.top        #插入元素的下一个为顶格元素
15             self.top = n           #顶格元素为插入值
16 
17     def pop(self):                 #删除顶格元素
18         if(self.top==None):        #如果栈为空
19             return None
20         else:
21             temp=self.top.val
22             self.top=self.top.next #新的顶格元素为老顶格元素的上一个
23             return temp
24 
25     def allquit(self):             #打印栈方法
26         alist=[]
27         while(self.top!=None):     #循环
28             temp=self.top.val      #和pop()方法操作相同
29             self.top=self.top.next
30             alist.append(temp)
31         print(alist)
32 
33 if __name__== "__main__" :
34     s=Stack()
35     s.push(1)
36     s.push(3)
37     s.push(5)
38     s.pop()
39     s.allquit()

免责声明:文章转载自《python数据结构-数组/列表/栈/队列及实现》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇AngularJS+Select2实现多选框VC++实现枚举进程与模块下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Python selenium 延时的几种方法

解决网页加载缓慢的几种方法: 一、显性等待WebDriverWait,配合该类的until()和until_not()方法,就能够根据判断条件而进行灵活地等待 1 from selenium import webdriver 2 from selenium.webdriver.support.wait import WebDriverWait 3 4...

C# Byte[]数组读取和写入文件

protected void ByteToString_Click(object sender, EventArgs e) { string content = this.txtContent.Text.ToString(); if (string.IsNullO...

python之读取文件的MD5码并重命名文件

由于自己的手机经常备份,备份后原来的图片视频没有删除,下次再备份的时候移动硬盘上又多了很多重复图片,于是想着能不能用提取MD5校验码的方式识别出重复的文件,然后处理下硬盘里已经重复的内容. 考虑到最近在学python,于是通过上网查资料和内容,借很多大牛的轮子来试了一下,搞了两个晚上,终于算是阶段性完成,能达到目标的方法.主要难点有三个: 获取文件的MD...

vue之列表渲染

一、v-for循环用于数组 v-for 指令根据一组数组的选项列表进行渲染。 1、v-for 指令需要使用 item in items 形式的特殊语法,items 是源数据数组名, item 是数组元素迭代的别名(为当前遍历的元素提供别名,可以任意起名)。 <ul id="example"> <li v-for="item in it...

在Java中调用Python

写在前面 在微服务架构大行其道的今天,对于将程序进行嵌套调用的做法其实并不可取,甚至显得有些愚蠢。当然,之所以要面对这个问题,或许是因为一些历史原因,或者仅仅是为了简单。恰好我在项目中就遇到了这个问题,需要在Java程序中调用Python程序。关于在Java中调用Python程序的实现,根据不同的用途可以使用多种不同的方法,在这里就将在Java中调用Pyt...

pywin3的简介

     微软Windows的Python扩展提供了对Win32 API的访问、创建和使用COM对象的能力以及PythOnWin环境。Pywin32是一个Python库,为python提供访问Windows API的扩展,提供了齐全的windows常量、接口、线程以及COM机制等等。...