在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. Fish eating fruit 沈阳网络赛(树形dp)

    Fish eating fruit \[ Time Limit: 1000 ms \quad Memory Limit: 262144 kB \] 题意 大体的题意就是给出一棵树,求每一对点之间的距离 ...

  2. vmtools的功能

    1.vmtoools是vmware公司的组件 2.vmtools主要安装在Guest OS中 3.在workstation版本中可以是选件安装,但在vsphere中却是必选安装 4.vmtools可以 ...

  3. django命名url与url反向解析

    1.在urls.py路由中指定别名 2.在views.py视图文件中导入from django.shortcuts import render, redirect, reverse 3.也可从这里导入 ...

  4. hdu5111 树链剖分,主席树

    hdu5111 链接 hdu 思路 先考虑序列上如何解决. 1 3 2 5 4 1 2 4 5 3 这个序列变成 1 2 3 4 5 1 3 5 5 2 是对答案没有影响的(显然). 然后查询操作\( ...

  5. 基于web公交查询系统---站点信息管理

    界面设计: 界面设计代码获取: 搭建好框架获取信息: 核心代码: var users = [ ];//获取到的bus所有站点信息 var rowIndex = -1; $.ajax({ url: &q ...

  6. npm install命令遇到relocation error: npm: symbol SSL_set_cert_cb的报错问题

    在安装elasticsearch-head的过程中npm install遇到如下报错 [root@localhost elasticsearch-head]# npm install npm: rel ...

  7. vue+element 表格筛选

      筛选是element 组件 自己有的东西,按照文档撸 是没有问题 这里存在一个情况是,如果 筛选 的数据没有 那么整个表格为空白,产品要加提示 例如:暂无筛选的数据 解决方案:通过 ref 获取整 ...

  8. springboot项目打包成jar/war包

    springboot项目打包过程中包含第三方jar 开发IDE是IntelliJ IDEA,数据库是mysql,内置服务器tomcat. 打包步骤: 1. 确定项目调试运行没问题 2. 将第三方jar ...

  9. CURL SSL为6的由来

    起初,我直接用方倍工作室之前做微信接口调用时的http_request函数,发现能正常调用微信api的函数获取不了火星天气数据,然后又尝试用file_get_contents,仍然不行 一直出的错就是 ...

  10. shell脚本监控k8s集群job状态,若出现error通过触发阿里云的进程监控报警

    #!/bin/bash while [ 1 ] do job_error_no=`kubectl get pod -n weifeng |grep -i "job"|grep -c ...