Python 栈、队列的实现
在python中,列表既可以作为栈使用,又可以作为队列使用。
把列表作为栈使用
栈:后进先出
stack=[1,2,3]
stack.append(4) #入栈,以列表尾部为栈顶
print(stack.pop()) #出栈 4
print(stack) #[1, 2, 3]
把列表作为队列使用
队列:先进先出
from collections import deque
list=[1,2,3]
queue=deque(list) #将列表转换为队列
queue.append(0) #入队,添加到队列尾部
print(queue.popleft()) #出队,弹出并返回队首元素
print(queue) #deque([2, 3, 0]) #把列表作为队列使用,效率不高,因为出队时要移动后面所有的元素。
deque
deque 是双边队列,同时具有栈和队列的性质,可进行栈、队列相关的操作。并且还在在 list 的基础上增加了移动、旋转和增删等操作。
from collections import deque #需要导入模块
list=[1,2,3]
deque=deque(list) #将列表转换为deque deque.append(4) #添加到尾部
print(deque) #deque([1, 2, 3, 0]) deque.appendleft(0) #添加到首部
print(deque) #deque([0, 1, 2, 3, 4]) print(deque.pop()) #弹出并返回最后一个元素 4
print(deque) #deque([0, 1, 2, 3]) print(deque.popleft()) #弹出并返回左边第一个元素 0
print(deque) #deque([1, 2, 3])
deque实现栈:
from collections import deque #需要导入模块
list=[1,2,3]
deque=deque(list) #将列表转换为deque #作为栈使用:方式一
deque.append(4) #入栈
print(deque) #deque([1, 2, 3, 4])
print(deque.pop()) #出栈 4
print(deque) #deque([1, 2, 3]) #作为栈使用:方式二
deque.appendleft(0) #入栈
print(deque) #deque([0,1, 2, 3])
print(deque.pop()) #出栈 3
print(deque) #deque([0, 1, 2]) #只要实现后进先出即可
deque实现队列:
from collections import deque #需要导入模块
list=[1,2,3]
deque=deque(list) #将列表转换为deque #作为队列使用:方式一
deque.append(4) #入队
print(deque) #deque([1, 2, 3, 4])
print(deque.popleft()) #出队 1
print(deque) #deque([2, 3, 4])
from collections import deque #需要导入模块
list=[] #空列表
deque=deque(list) #作为队列使用:方式二
deque.appendleft(1) #入队
deque.appendleft(2)
print(deque) #deque([2, 1])
print(deque.pop()) #出队 1
print(deque) #deque([2]) #这种方式需要list是空的 #只要实现先进先出即可
实现栈、队列时,一般是使用空列表[]。
Python 栈、队列的实现的更多相关文章
- python数据结构-数组/列表/栈/队列及实现
首先 我们要分清楚一些概念和他们之间的关系 数组(array) 表(list) 链表(linked list) 数组链表(array list) 队列(queue) 栈(stack) li ...
- Python 栈(stack)
Python 栈(stack) 栈(stack)又名堆栈,它是一种运算受限的线性表 栈只能在一端进行插入和删除操作,它按照先进后出(FILO)的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶 ...
- 045.Python线程队列
线程队列 1 基本语法和用法 put 往线程队列里防止,超过队列长度,直接阻塞 get 从队列中取值,如果获取不到,直接阻塞 put_nowait: 如果放入的值超过队列长度,直接报错(linux) ...
- java 集合 Connection 栈 队列 及一些常用
集合家族图 ---|Collection: 单列集合 ---|List: 有存储顺序 , 可重复 ---|ArrayList: 数组实现 , 查找快 , 增删慢 ---|LinkedList: 链表实 ...
- python消息队列snakemq使用总结
Python 消息队列snakemq总结 最近学习消息总线zeromq,在网上搜了python实现的消息总线模块,意外发现有个消息队列snakemq,于是拿来研究一下,感觉还是很不错的,入手简单使用也 ...
- python RabbitMQ队列使用(入门篇)
---恢复内容开始--- python RabbitMQ队列使用 关于python的queue介绍 关于python的队列,内置的有两种,一种是线程queue,另一种是进程queue,但是这两种que ...
- Python之队列Queue
今天我们来了解一下python的队列(Queue) queue is especiall useful in threaded programming when information must be ...
- Java 容器之 Connection栈队列及一些常用
集合家族图 ---|Collection: 单列集合 ---|List: 有存储顺序 , 可重复 ---|ArrayList: 数组实现 , 查找快 , 增删慢 ---|LinkedList: 链表实 ...
- Python消息队列工具 Python-rq 中文教程
原创文章,作者:Damon付,如若转载,请注明出处:<Python消息队列工具 Python-rq 中文教程>http://www.tiangr.com/python-xiao-xi-du ...
- Python 用队列实现多线程并发
# Python queue队列,实现并发,在网站多线程推荐最后也一个例子,比这货简单,但是不够规范 # encoding: utf-8 __author__ = 'yeayee.com' # 由本站 ...
随机推荐
- $('xx')[0].files[0]
①首先得明白jQuery对象只能使用jQuery对象的属性和方法,JavaScript对象只能使用JavaScript对象的属性和方法: ②files[0]是JavaScript的属性: ③$('xx ...
- 知识点5 C++保存txt文件
简单示例 #include <windows.h> #include <fstream> #include <iostream> #include <stri ...
- 关于sg函数的一些证明
复习csp2019的时候稍微看了看博弈论,发现自己对于sg函数的理解完全不到位 有些定义甚至想都没想过 于是就口胡了一篇blog来安慰虚弱的自己 Question 1 对于一个满足拓扑性质的公平组合游 ...
- SCDM导入点数据
我们有时候需要把外部的点导入SCDM当中,但是SCDM没有像ICEM或者DM那样直接提供点导入的选项,是不是SCDM就无法导入点的数据了呢?答案当然是否定的.把点导入SCDM中的方法总结如下(示例数据 ...
- 记一次node节点异常排查
一.背景 公司进行kubernetes服务重启演练,集群重启后所有服务正常,仅node2节点处于notready状态 二.排查过程 查看对应节点的详细信息,发现kubelet一直处于starting状 ...
- PatchMatch Stereo - Stereo Matching with Slanted Support Windows
Tips MVS: Multi-View Stereo Abstract 思路:一般的局部立体方法是一个具有整形数值视察(disparity)的支持镜头进行匹配,其中有一个隐藏的假设:再支持区域的像素 ...
- 关于Linux TCP "SACK PANIC" 远程拒绝服务漏洞的修复
Linux 内核被曝存在TCP "SACK PANIC" 远程拒绝服务漏洞(漏洞编号:CVE-2019-11477,CVE-2019-11478,CVE-2019-11479),攻 ...
- cmdb知识总结
cmdb面试 1.paramiko模块的作用与原理 2.cmdb是什么 3.为什么要开发CMDB? 4.你们公司有多少台服务器?物理机?虚拟机? 5.你的CMDB是如何实现的? 6.CMDB都用到了哪 ...
- 《C程序设计语言》(K&R)中文高清非扫描件
<C程序设计语言>(K&R)中文高清非扫描件(带书签目录) 对于某下载东西都要C币的网站无爱了.好不容易找了一个,发出来看会不会帮到别人 附上addr:https://pan. ...
- Java基础扫盲系列(-)—— String中的format
Java基础扫盲系列(-)-- String中的format 以前大学学习C语言时,有函数printf,能够按照格式打印输出的内容.但是工作后使用Java,也没有遇到过格式打印的需求,今天遇到项目代码 ...