在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 栈、队列的实现的更多相关文章

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

    首先 我们要分清楚一些概念和他们之间的关系 数组(array)  表(list)  链表(linked list)  数组链表(array list)   队列(queue)  栈(stack) li ...

  2. Python 栈(stack)

    Python 栈(stack) 栈(stack)又名堆栈,它是一种运算受限的线性表 栈只能在一端进行插入和删除操作,它按照先进后出(FILO)的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶 ...

  3. 045.Python线程队列

    线程队列 1 基本语法和用法 put 往线程队列里防止,超过队列长度,直接阻塞 get 从队列中取值,如果获取不到,直接阻塞 put_nowait: 如果放入的值超过队列长度,直接报错(linux) ...

  4. java 集合 Connection 栈 队列 及一些常用

    集合家族图 ---|Collection: 单列集合 ---|List: 有存储顺序 , 可重复 ---|ArrayList: 数组实现 , 查找快 , 增删慢 ---|LinkedList: 链表实 ...

  5. python消息队列snakemq使用总结

    Python 消息队列snakemq总结 最近学习消息总线zeromq,在网上搜了python实现的消息总线模块,意外发现有个消息队列snakemq,于是拿来研究一下,感觉还是很不错的,入手简单使用也 ...

  6. python RabbitMQ队列使用(入门篇)

    ---恢复内容开始--- python RabbitMQ队列使用 关于python的queue介绍 关于python的队列,内置的有两种,一种是线程queue,另一种是进程queue,但是这两种que ...

  7. Python之队列Queue

    今天我们来了解一下python的队列(Queue) queue is especiall useful in threaded programming when information must be ...

  8. Java 容器之 Connection栈队列及一些常用

    集合家族图 ---|Collection: 单列集合 ---|List: 有存储顺序 , 可重复 ---|ArrayList: 数组实现 , 查找快 , 增删慢 ---|LinkedList: 链表实 ...

  9. Python消息队列工具 Python-rq 中文教程

    原创文章,作者:Damon付,如若转载,请注明出处:<Python消息队列工具 Python-rq 中文教程>http://www.tiangr.com/python-xiao-xi-du ...

  10. Python 用队列实现多线程并发

    # Python queue队列,实现并发,在网站多线程推荐最后也一个例子,比这货简单,但是不够规范 # encoding: utf-8 __author__ = 'yeayee.com' # 由本站 ...

随机推荐

  1. 深入解析ES6中的promise

    作者 | Jeskson来源 | 达达前端小酒馆 什么是Promise Promise对象是用于表示一个异步操作的最终状态(完成或失败)以及其返回的值. 什么是同步,异步 同步任务会阻塞程序的执行,如 ...

  2. LaTeX表格紧跟文字 (不影响下方文本对齐)

    很多博客会让你用下面这行替换\\begin{table}和\\end{table},但是这样替换以后,表格下方所有文字都变成了居中对齐,section格式也都失效了. \makeatletter\de ...

  3. BAT脚本入门

    BAT脚本入门 echo:显示命令后的字符 chcp 65001: 就是换成UTF-8代码页 echo off: 此语句后的所有运行命令都不显示命令行语句 @:与echo off相似,但它加在每个命令 ...

  4. 推荐IOS Moneky测试工具Fast Monkey

    推荐IOS Moneky测试工具Fast Monkey 1 介绍 非插桩 iOS Monkey, 支持控件,每秒4-5 action事件 2 下载 https://github.com/zhangzh ...

  5. 【Gamma】“北航社团帮”展示博客

    目录 团队介绍 项目愿景 整个项目的预期典型用户 功能展示 原预期用户数量 项目使用情况数据分析 用户量变化 学生认证人数 社长认证人数 入社申请数 活动发布 新闻发布 网页端使用情况 小程序打开次数 ...

  6. Java stream 并发应用案例

    在磁盘目录下有几十个txt文件,里面存储着XML格式的数据,每个文件在2-3M左右,现在需要将以上文件解析出来保存到mysql数据库,总数据量大概在30万条左右. (1)首先通过stream并发解析T ...

  7. PatchMatch小详解

    最近发了两片patch match的,其实自己也是有一些一知半解的,找了一篇不知道谁的大论文看了看,又回顾了一下,下面贴我的笔记. The PatchMatch Algorithm patchmatc ...

  8. python(二)面向对象知识点

    模块 别名 import my_module as xxx(别名) 先导入内置模块 再导入第三方模块 再导入自定义模块 from my_module(导入的文件) import *(变量) __all ...

  9. 【剑指offer】构建乘积数组

    题目描述 给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1],其中B中的元素B[i]=A[0]*A[1]*...*A[i-1]*A[i+1]*...*A[n-1].不 ...

  10. IScroll中div点击事件触发两次解决办法

    1.网上的同学说的,直接修改源代码,但是这种方法可能会影响到现有的程序. 搜索onBeforeScrollStart方法,将其中的preventDefault禁止掉搜索_end方法,将其中模拟clic ...