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怎么卸载才能彻底卸载干净,今天这篇文章,小编就来教大家如何彻底卸载Pyth... 目录软件卸载①方法:②方法:③方法:清理相关文件夹软件卸载①方法:首先,在安装python时,下

python uv包管理小结

《pythonuv包管理小结》uv是一个高性能的Python包管理工具,它不仅能够高效地处理包管理和依赖解析,还提供了对Python版本管理的支持,本文主要介绍了pythonuv包管理小结,具有一... 目录安装 uv使用 uv 管理 python 版本安装指定版本的 Python查看已安装的 Python

使用Python开发一个带EPUB转换功能的Markdown编辑器

《使用Python开发一个带EPUB转换功能的Markdown编辑器》Markdown因其简单易用和强大的格式支持,成为了写作者、开发者及内容创作者的首选格式,本文将通过Python开发一个Markd... 目录应用概览代码结构与核心组件1. 初始化与布局 (__init__)2. 工具栏 (setup_t

Python中局部变量和全局变量举例详解

《Python中局部变量和全局变量举例详解》:本文主要介绍如何通过一个简单的Python代码示例来解释命名空间和作用域的概念,它详细说明了内置名称、全局名称、局部名称以及它们之间的查找顺序,文中通... 目录引入例子拆解源码运行结果如下图代码解析 python3命名空间和作用域命名空间命名空间查找顺序命名空

Python如何将大TXT文件分割成4KB小文件

《Python如何将大TXT文件分割成4KB小文件》处理大文本文件是程序员经常遇到的挑战,特别是当我们需要把一个几百MB甚至几个GB的TXT文件分割成小块时,下面我们来聊聊如何用Python自动完成这... 目录为什么需要分割TXT文件基础版:按行分割进阶版:精确控制文件大小完美解决方案:支持UTF-8编码

基于Python打造一个全能文本处理工具

《基于Python打造一个全能文本处理工具》:本文主要介绍一个基于Python+Tkinter开发的全功能本地化文本处理工具,它不仅具备基础的格式转换功能,更集成了中文特色处理等实用功能,有需要的... 目录1. 概述:当文本处理遇上python图形界面2. 功能全景图:六大核心模块解析3.运行效果4. 相

Python中的魔术方法__new__详解

《Python中的魔术方法__new__详解》:本文主要介绍Python中的魔术方法__new__的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、核心意义与机制1.1 构造过程原理1.2 与 __init__ 对比二、核心功能解析2.1 核心能力2.2

Python虚拟环境终极(含PyCharm的使用教程)

《Python虚拟环境终极(含PyCharm的使用教程)》:本文主要介绍Python虚拟环境终极(含PyCharm的使用教程),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录一、为什么需要虚拟环境?二、虚拟环境创建方式对比三、命令行创建虚拟环境(venv)3.1 基础命令3

Python Transformer 库安装配置及使用方法

《PythonTransformer库安装配置及使用方法》HuggingFaceTransformers是自然语言处理(NLP)领域最流行的开源库之一,支持基于Transformer架构的预训练模... 目录python 中的 Transformer 库及使用方法一、库的概述二、安装与配置三、基础使用:Pi

Python 中的 with open文件操作的最佳实践

《Python中的withopen文件操作的最佳实践》在Python中,withopen()提供了一个简洁而安全的方式来处理文件操作,它不仅能确保文件在操作完成后自动关闭,还能处理文件操作中的异... 目录什么是 with open()?为什么使用 with open()?使用 with open() 进行