python学习笔记_第29天(栈+列队)

2023-10-12 05:20
文章标签 python 学习 笔记 29 列队

本文主要是介绍python学习笔记_第29天(栈+列队),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

        • 栈的操作
        • 栈操作具体实现
    • 队列
        • 列队的操作
        • 列队操作具体实现
    • 双端队列
        • 双端列队的操作
        • 双端列队操作具体实现

顺序表(list)与链表解析存储模式,栈、队列、树是具体应用场景。
队列一端添加,另一端取数,先进先出

栈(stack)是一种容器,也称为堆栈。特点在于只允许在容器的一端(称为栈顶top)进行压栈(加入数据push)和出栈(输出数据pop)。没有位置概念,确定了默认访问顺序,按照后进先出(LIFO, Last In First Out)的原理运作。
栈可以用顺序表(list)实现,也可以用链表实现。
在这里插入图片描述

栈的操作
操作说明
Stack()创建一个新的空栈
push(item)添加一个新的元素item到栈顶
pop()弹出栈顶元素
peek()返回栈顶元素
is_empty()判断栈是否为空
size()返回栈的元素个数
栈操作具体实现
class Stack:
'''栈只支持数据从一头进出,先进后出'''def __init__(self):self.__list = []def push(self, item):'''添加一个新的元素item到栈顶'''self.__list.append(item)# 用顺序表存储法构造栈时,头部操作的时间复杂度为O(n),尾部操作的时间复杂度为O(1)# self.__list.insert(0,item)  # 头部操作更优def pop(self):'''弹出栈顶元素'''return self.__list.pop()# 若用链表存储法构造栈时,则头部操作的时间复杂度更低# return self.__list.pop(0)  # 头部操作更优def peek(self):'''返回栈顶元素'''if self.__list:  # 当列表存在且不为空return self.__list[-1]  # 尾部操作,切片操作返回尾部最后一个元素值else:return Nonedef is_empty(self):'''判断栈是否为空'''return self.__list == []  # 0、空字符串、空列表、空字典、空元祖等逻辑值为Falsedef size(self):'''返回栈的元素个数'''return len(self.__list)

测试

if __name__ == "__main__":'''栈先进后出'''stack = Stack()stack.push("hello")stack.push("world")stack.push("python")print(stack.size())print(stack.peek())print(stack.pop())print(stack.pop())print(stack.pop())

执行结果:
3
python
python
world
hello

队列

队列(queue)允许插入的一端为队尾,允许删除的一端为队头。特点在于只允许在一端进行插入操作(enqueue),另一端进行删除操作(dequeue)。按照先进先出(First In First Out)的原理运作,简称FIFO。
队列不允许在中间部位进行操作! 假设队列是q=(a1,a2,……,an),那么a1就是队头元素,而an是队尾元素。删除时从a1开始,而插入时总是在队列最后。
队列也可以用顺序表(list)或者链表实现。
在这里插入图片描述

列队的操作
操作说明
Queue()创建一个空的队列
enqueue(item)往队列尾添加一个item元素
dequeue()从队列头部删除一个元素
is_empty()判断一个队列是否为空
size()返回队列的大小
列队操作具体实现
class Queue:'''队列一端添加,另一端取数,先进先出'''def __init__(self):self.__list = []# 入队操作和出队操作那个使用更频繁,决定了从列表头部操作还是从列表尾部操作def enqueue(self, item):'''往队列中添加一个item元素'''self.__list.append(item)  # 时间复杂度O(1)# self.__list.insert(0,item)  # 时间复杂度O(n)def dequeue(self):'''从队列头部删除一个元素'''return self.__list.pop(0)  # 时间复杂度O(n)# return self.__list.pop()  # 时间复杂度O(1)def is_empty(self):'''判断一个队列是否为空'''return self.__list == []def size(self):'''返回队列的大小'''return len(self.__list)

测试

if __name__ == "__main__":'''队列先进先出'''queue = Queue()queue.enqueue("hello")queue.enqueue("world")queue.enqueue("python")print(queue.size())print(queue.is_empty())print(queue.dequeue())print(queue.dequeue())print(queue.dequeue())

执行结果:
3
False
hello
world
python

双端队列

双端队列(deque,全名double-ended queue),是一种具有队列和栈的性质的数据结构,可以看做两个栈底部相连的情况。
双端队列中的元素可以从两端弹出,其限定插入和删除操作在表的两端进行。双端队列可以在队列任意一端入队和出队。
在这里插入图片描述

双端列队的操作
操作说明
Deque()创建一个空的双端队列
add_front(item)从队头加入一个item元素
add_rear(item)从队尾加入一个item元素
remove_front()从队头删除一个item元素
remove_rear()从队尾删除一个item元素
is_empty()判断双端队列是否为空
size()返回队列的大小
双端列队操作具体实现
class Deque:'''双端队列'''def __init__(self):self.__list = []# 入队操作和出队操作那个使用更频繁,决定了从列表头部操作还是从列表尾部操作def add_front(self, item):'''从队头加入一个item元素'''self.__list.insert(0, item)  # 时间复杂度O(n)def add_rear(self, item):'''从队尾加入一个item元素'''self.__list.append(item)  # 时间复杂度O(1)def remove_front(self):'''从队头删除一个item元素'''return self.__list.pop(0)  # 时间复杂度O(n)def remove_rear(self):'''从队尾删除一个item元素'''return self.__list.pop()  # 时间复杂度O(1)def is_empty(self):'''判断一个队列是否为空'''return self.__list == []def size(self):'''返回队列的大小'''return len(self.__list)

这篇关于python学习笔记_第29天(栈+列队)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/193526

相关文章

Python多重继承慎用的地方

《Python多重继承慎用的地方》多重继承也可能导致一些问题,本文主要介绍了Python多重继承慎用的地方,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录前言多重继承要慎用Mixin模式最后前言在python中,多重继承是一种强大的功能,它允许一个

python+OpenCV反投影图像的实现示例详解

《python+OpenCV反投影图像的实现示例详解》:本文主要介绍python+OpenCV反投影图像的实现示例详解,本文通过实例代码图文并茂的形式给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录一、前言二、什么是反投影图像三、反投影图像的概念四、反向投影的工作原理一、利用反向投影backproj

Python中edge-tts实现便捷语音合成

《Python中edge-tts实现便捷语音合成》edge-tts是一个功能强大的Python库,支持多种语言和声音选项,本文主要介绍了Python中edge-tts实现便捷语音合成,具有一定的参考价... 目录安装与环境设置文本转语音查找音色更改语音参数生成音频与字幕总结edge-tts 是一个功能强大的

使用Python和PaddleOCR实现图文识别的代码和步骤

《使用Python和PaddleOCR实现图文识别的代码和步骤》在当今数字化时代,图文识别技术的应用越来越广泛,如文档数字化、信息提取等,PaddleOCR是百度开源的一款强大的OCR工具包,它集成了... 目录一、引言二、环境准备2.1 安装 python2.2 安装 PaddlePaddle2.3 安装

Python+PyQt5开发一个Windows电脑启动项管理神器

《Python+PyQt5开发一个Windows电脑启动项管理神器》:本文主要介绍如何使用PyQt5开发一款颜值与功能并存的Windows启动项管理工具,不仅能查看/删除现有启动项,还能智能添加新... 目录开篇:为什么我们需要启动项管理工具功能全景图核心技术解析1. Windows注册表操作2. 启动文件

Python datetime 模块概述及应用场景

《Pythondatetime模块概述及应用场景》Python的datetime模块是标准库中用于处理日期和时间的核心模块,本文给大家介绍Pythondatetime模块概述及应用场景,感兴趣的朋... 目录一、python datetime 模块概述二、datetime 模块核心类解析三、日期时间格式化与

Java调用Python的四种方法小结

《Java调用Python的四种方法小结》在现代开发中,结合不同编程语言的优势往往能达到事半功倍的效果,本文将详细介绍四种在Java中调用Python的方法,并推荐一种最常用且实用的方法,希望对大家有... 目录一、在Java类中直接执行python语句二、在Java中直接调用Python脚本三、使用Run

使用Python开发Markdown兼容公式格式转换工具

《使用Python开发Markdown兼容公式格式转换工具》在技术写作中我们经常遇到公式格式问题,例如MathML无法显示,LaTeX格式错乱等,所以本文我们将使用Python开发Markdown兼容... 目录一、工具背景二、环境配置(Windows 10/11)1. 创建conda环境2. 获取XSLT

Python如何调用指定路径的模块

《Python如何调用指定路径的模块》要在Python中调用指定路径的模块,可以使用sys.path.append,importlib.util.spec_from_file_location和exe... 目录一、sys.path.append() 方法1. 方法简介2. 使用示例3. 注意事项二、imp

PyQt5+Python-docx实现一键生成测试报告

《PyQt5+Python-docx实现一键生成测试报告》作为一名测试工程师,你是否经历过手动填写测试报告的痛苦,本文将用Python的PyQt5和python-docx库,打造一款测试报告一键生成工... 目录引言工具功能亮点工具设计思路1. 界面设计:PyQt5实现数据输入2. 文档生成:python-