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相关推荐

  1. Python 报错 Fatal Python error: PyFrame_BlockPop: block stack underflow 如何解决?

    Fatal Python error: PyFrame_BlockPop: block stack underflow 只有使用pycharm的debug时会报错,正常run就不会 完整报错内容: F ...

  2. C++ STL: 超详细 容器 deque 以及 适配器queue 和 stack 源码分析

    文章目录 前言 deque 实现 deque类 _Deque_iterator 类 deque 的元素插入 insert函数 deque如何模拟空间连续 queue 实现 stack 的实现 前言 C ...

  3. 【C++ 语言】容器 ( queue 队列 | stack 栈 | priority_queue 优先级队列 | set 集合 | 容器遍历 | map )

    文章目录 queue 队列 stack 栈 priority_queue 优先级队列 priority_queue 优先级队列指定排序方法 priority_queue 优先级队列排序行为 prior ...

  4. C++ deque 底层原理及 queue、stack 容器的使用详解

    目录 元素访问 迭代器 容量 修改操作 std::erase, std::erase_if (std::deque) std::swap(std::deque) stack queue 简介 双端队列 ...

  5. C#10在List, Queue 以及Stack中使用EnsureCapacity方法来提升性能

    简介 在今天的文章中,我们将介绍 C# 10 中引入的一项新功能.这是已添加到 List.Queue 和 Stack 集合中的 EnsureCapacity 方法.我们将讨论为什么我们应该使用这个方法 ...

  6. Python 进程间通信 Queue / Pipe - Python零基础入门教程

    目录 一.前言 1.使用 Queue 线程间通信 2.使用 Queue 进程间通信,适用于多个进程之间通信 3.使用 Pipe 进程间通信,适用于两个进程之间通信(一对一) 二.python 进程间通 ...

  7. Python队列Queue

    Python队列Queue Queue是python标准库中的线程安全的队列(FIFO),提供了一个多线程的先进先出的数据结构,即队列,用来在生产者和消费者线程之间的信息传递. 常见方法 1.put( ...

  8. Python【queue】

    Python[queue] 文章目录 Python[queue] 1.Queue 2.LifoQueue 4.PriorityQueue python中queue包括FIFO(先入先出)队列Queue ...

  9. python队列queue不堵塞_python 队列(queue)阻塞

    背景:python 队列 queue.Queue 或 multiprcessing.Queue 或其他队列在写入队列或从队列中读取元素时,都有可能会发生线程阻塞. 下面来说一下阻塞的类型,然后怎么避免 ...

最新文章

  1. JSP内置对象-page
  2. C++ string类中的find()函数的简单使用
  3. Linux系统编程----7(信号集,信号屏蔽,信号捕捉)
  4. 前端学习(2734):重读vue电商网站44之使用 echarts
  5. 【6.19日云享专家技术公开课】从零开始快速搞定扫码付款
  6. MMUlinux内核开启
  7. 疫情在家办公,向日葵突然卡死,无法远程电脑的解决办法(局域网远程强制重启windows)
  8. 大学计算机实践基础教程,大学计算机基础实践教程(微课版)
  9. 三维激光雷达点云拼接
  10. Android手机使用笔记本流量上网(基于Android便携式WLAN热点)
  11. 软件测试技术学习总结
  12. 为什么群发邮件会退回:怎么做来避免邮件退回并提高群发邮件到达率
  13. outlook打不开怎么办?
  14. ROS中搭建分布式系统 主从机模式
  15. vue动态配置嵌套页面(含iframe嵌套)可实现白天夜间皮肤切换
  16. 武汉大学信管专业期末复习系列——《计算机网络》(谢希仁版)(网络层)
  17. 模板模式详解、模板模式怎么用、模板模式模板代码
  18. scrapy爬虫时遇到Couldnt bind Too many open files
  19. OSpider v3.0.0 用户手册
  20. [算法]力扣刷题-初级算法 - 数组(三)(数组篇完结) [两数之和] [有效的数独] [旋转图像]

热门文章

  1. ASP.NET 5 - $.ajax post JSON.stringify(para) is null
  2. linux中fork()函数具体解释(原创!!实例解说)
  3. office 2003和office 2013同时安装使用的问题
  4. VB100十月测试:360可牛凯歌高奏 金山失利瑞星缺席
  5. Nodejs ORM框架Sequelize
  6. Hystrix面试 - 基于本地缓存的 fallback 降级机制
  7. 常见的SQL笔试题和面试题:SQL经典50题
  8. linux下安装mysql数据库
  9. 【Python】jieba库的使用
  10. 递归计算二叉树的高度_如何使用递归方法计算二叉树的高度