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' # 由本站 ...
随机推荐
- P1908 逆序对-(cdq分治)
https://www.luogu.org/problem/P1908 沿用归并排序的思想求逆序对. 坑1:结果爆int型,需要用longlong 坑2:相对于归并排序,在比较的时候多了一个等号 举例 ...
- python基础之三:int、bool、str
一.数据类型之整型的函数使用 i = print("该整型数字所占有效比特位的长度是:%d" % i.bit_length()) print(i.to_bytes(, " ...
- node开发遇到类似:Error: ENOENT: no such file or directory, scandir 'D:\work\taro-components- ....... _node-sass@4.12.0@node-sass\vendor
唯一的有参考价值的文章,https://www.cnblogs.com/milo-wjh/p/9175138.html 我可以负责任的说,以下的方法, npm rebuild node-sass 80 ...
- [RN] React Native 自定义 底部 弹出 选择框 实现
React Native 自定义 底部选择框 实现 效果如图所示: 实现方法: 一.组件封装 CustomAlertDialog.js import React, {Component} from ' ...
- 【转】Redis为什么用跳表而不用平衡树?
Redis里面使用skiplist是为了实现sorted set这种对外的数据结构.sorted set提供的操作非常丰富,可以满足非常多的应用场景.这也意味着,sorted set相对来说实现比较复 ...
- Linux/Unix 多线程通信
线程间无需特别的手段进行通信,因为线程间可以共享数据结构,也就是一个全局变量可以被两个线程同时使用. 不过要注意的是线程间需要做好同步,一般用 mutex. 可以参考一些比较新的 UNIX/Linux ...
- PATA1082Read Number in Chinese
有几点需要注意的地方一是将right转化为与left在在同一节 while (left + 4 <= right) { right -= 4;//每次将right移动4位,直到left与righ ...
- SDN实验2
第二次sdn实验: 1. 利用mininet创建如下拓扑,要求拓扑支持OpenFlow 1.3协议,主机名.交换机名以及端口对应正确,请给出拓扑Mininet执行结果,展示端口连接情况. 本次使用py ...
- 记忆的轮廓 期望 四边形不等式dp|题解
记忆的轮廓 题目描述 通往贤者之塔的路上,有许多的危机.我们可以把这个地形看做是一颗树,根节点编号为1,目标节点编号为n,其中1-n的简单路径上,编号依次递增,在[1,n]中,一共有n个节点.我们把编 ...
- Redis常见场景解析
一 前言 Redis是一个key-value存储系统,现在在各种系统中的使用越来越多,大部分情况下是因为其高性能的特性,被当做缓存使用,这里介绍下Redis经常遇到的使用场景. 二 Redis特性 一 ...