python实现Queue和Stack
Python的内置的数据类型有Map,Set,List,Tuple
Map:字典,键值对,值可以取任何数据类型,但键必须是不可变的,如字符串,数字或元组
Set:集合,不能有重复的元素,元素之间是无序的。
List:列表(序列),可以增删改查,列表的数据项不需要具有相同的类型,创建一个列表,只要把逗号分隔的不同的数据项使用方括号括起来即可,可以增删改查,元素之间是有序的。
Tuple:元组与列表类似,不同之处在于元组的元素不能修改,但我们可以对元组进行连接组合。
这些具体的用法都可以从https://www.runoob.com/python3/python3-tutorial.html学习到。
可以发现少了很多常用的数据结构,比如Stack和Queue。下面我们可以利用List来自己实现出Stack和Queue。
一:使用List实现Stack
class Stack(object):"""栈"""def __init__(self):self.__list = []def push(self, item):"""添加一个新元素item到栈顶"""self.__list.append(item) # 尾部添加 ,时间复杂度o1# self.__list.insert(0,item) 这样从尾部添加的时间复杂度为O(n)def pop(self):"""弹出栈顶元素"""if self.__list == []:raise LookupError('stack is empty!')return self.__list.pop()def peek(self):"""返回栈顶元素"""if self.__list:return self.__list[-1]return Nonedef is_empty(self):"""判断栈是否为空"""return self.__list == []def size(self):"""返回栈元素的个数"""return len(self.__list)if __name__ == '__main__':s = Stack()print(s.is_empty())s.push(1)s.push(3)s.push(4)print(s.pop())print(s.pop())print(s.pop())
二:使用List实现Queue
class Queue:"""队列"""def __init__(self):self.__list = []def enqueue(self, item):"""往队列中添加一个元素"""self.__list.append(item) # 时间复杂度o(1)def dequeue(self):"""从队列头部删除一个元素"""return self.__list.pop(0) # 时间复杂度 o(n)def is_empty(self):"""判断是否为空"""return self.__list == []def size(self):"""返回队列大小"""return len(self.__list)if __name__ == '__main__':s = Queue()print(s.is_empty())s.enqueue(1)s.enqueue(3)s.enqueue(4)print(s.dequeue())print(s.dequeue())print(s.dequeue())
三:使用List实现双向Queue
# 双端队列的实现
# -*- coding: utf-8 -*-class Deque(object):def __init__(self):self.__list = []def add_front(self, item):"""往队列头部添加一个元素"""self.__list.insert(0, item) # 时间复杂度o(1)def add_rear(self, item):"""往队列尾部添加一个元素"""self.__list.append(item) # 时间复杂度o(1)def pop_rear(self):"""从队列尾部删除一个元素"""return self.__list.pop() # 时间复杂度 o(1)def pop_front(self):"""从队列头部删除一个元素"""return self.__list.pop(0) # 时间复杂度 o(n)def is_empty(self):"""判断是否为空"""return self.__list == []def size(self):"""返回队列大小"""return len(self.__list)
python实现Queue和Stack相关推荐
- Python 报错 Fatal Python error: PyFrame_BlockPop: block stack underflow 如何解决?
Fatal Python error: PyFrame_BlockPop: block stack underflow 只有使用pycharm的debug时会报错,正常run就不会 完整报错内容: F ...
- C++ STL: 超详细 容器 deque 以及 适配器queue 和 stack 源码分析
文章目录 前言 deque 实现 deque类 _Deque_iterator 类 deque 的元素插入 insert函数 deque如何模拟空间连续 queue 实现 stack 的实现 前言 C ...
- 【C++ 语言】容器 ( queue 队列 | stack 栈 | priority_queue 优先级队列 | set 集合 | 容器遍历 | map )
文章目录 queue 队列 stack 栈 priority_queue 优先级队列 priority_queue 优先级队列指定排序方法 priority_queue 优先级队列排序行为 prior ...
- C++ deque 底层原理及 queue、stack 容器的使用详解
目录 元素访问 迭代器 容量 修改操作 std::erase, std::erase_if (std::deque) std::swap(std::deque) stack queue 简介 双端队列 ...
- C#10在List, Queue 以及Stack中使用EnsureCapacity方法来提升性能
简介 在今天的文章中,我们将介绍 C# 10 中引入的一项新功能.这是已添加到 List.Queue 和 Stack 集合中的 EnsureCapacity 方法.我们将讨论为什么我们应该使用这个方法 ...
- Python 进程间通信 Queue / Pipe - Python零基础入门教程
目录 一.前言 1.使用 Queue 线程间通信 2.使用 Queue 进程间通信,适用于多个进程之间通信 3.使用 Pipe 进程间通信,适用于两个进程之间通信(一对一) 二.python 进程间通 ...
- Python队列Queue
Python队列Queue Queue是python标准库中的线程安全的队列(FIFO),提供了一个多线程的先进先出的数据结构,即队列,用来在生产者和消费者线程之间的信息传递. 常见方法 1.put( ...
- Python【queue】
Python[queue] 文章目录 Python[queue] 1.Queue 2.LifoQueue 4.PriorityQueue python中queue包括FIFO(先入先出)队列Queue ...
- python队列queue不堵塞_python 队列(queue)阻塞
背景:python 队列 queue.Queue 或 multiprcessing.Queue 或其他队列在写入队列或从队列中读取元素时,都有可能会发生线程阻塞. 下面来说一下阻塞的类型,然后怎么避免 ...
最新文章
- JSP内置对象-page
- C++ string类中的find()函数的简单使用
- Linux系统编程----7(信号集,信号屏蔽,信号捕捉)
- 前端学习(2734):重读vue电商网站44之使用 echarts
- 【6.19日云享专家技术公开课】从零开始快速搞定扫码付款
- MMUlinux内核开启
- 疫情在家办公,向日葵突然卡死,无法远程电脑的解决办法(局域网远程强制重启windows)
- 大学计算机实践基础教程,大学计算机基础实践教程(微课版)
- 三维激光雷达点云拼接
- Android手机使用笔记本流量上网(基于Android便携式WLAN热点)
- 软件测试技术学习总结
- 为什么群发邮件会退回:怎么做来避免邮件退回并提高群发邮件到达率
- outlook打不开怎么办?
- ROS中搭建分布式系统 主从机模式
- vue动态配置嵌套页面(含iframe嵌套)可实现白天夜间皮肤切换
- 武汉大学信管专业期末复习系列——《计算机网络》(谢希仁版)(网络层)
- 模板模式详解、模板模式怎么用、模板模式模板代码
- scrapy爬虫时遇到Couldnt bind Too many open files
- OSpider v3.0.0 用户手册
- [算法]力扣刷题-初级算法 - 数组(三)(数组篇完结) [两数之和] [有效的数独] [旋转图像]
热门文章
- ASP.NET 5 - $.ajax post JSON.stringify(para) is null
- linux中fork()函数具体解释(原创!!实例解说)
- office 2003和office 2013同时安装使用的问题
- VB100十月测试:360可牛凯歌高奏 金山失利瑞星缺席
- Nodejs ORM框架Sequelize
- Hystrix面试 - 基于本地缓存的 fallback 降级机制
- 常见的SQL笔试题和面试题:SQL经典50题
- linux下安装mysql数据库
- 【Python】jieba库的使用
- 递归计算二叉树的高度_如何使用递归方法计算二叉树的高度