python数据结构之栈、队列及双端队列

Python数据结构之栈、队列及双端队列

在 Python 中,栈、队列及双端队列是常用的数据结构。它们的实现都可以基于列表、元组、链表或其他数据类型。下面分别来讲解这三种数据结构的原理、实现和应用。

栈(Stack)

栈是一种仅能在一端进行插入和删除操作的特殊线性表,即后进先出(Last-In-First-Out,LIFO)的数据结构。在 Python 中,我们可以使用列表或双端队列来实现栈。

栈的实现

以下示例展示了如何使用列表来实现栈:

stack = []  # 初始化一个空栈
stack.append("apple")  # 入栈
stack.append("banana")
stack.append("cherry")
print(stack)  # 输出:['apple', 'banana', 'cherry']
top = stack[-1]  # 访问栈顶元素
print(top)  # 输出:'cherry'
stack.pop()  # 出栈
print(stack)  # 输出:['apple', 'banana']

栈的应用

  • 实现函数调用的可撤销和恢复(undo、redo)操作。
  • 括号匹配等程序员常见问题。
  • 逆序输出字符串等问题。

队列(Queue)

队列是一种只允许在一端插入数据、在另一端删除数据的线性数据结构,即先进先出(First-In-First-Out,FIFO)的数据结构。在 Python 中,队列可以由列表、元组、堆以及 Python 自带的 queue 模块实现。

队列的实现

以下示例展示了如何使用列表来实现队列:

queue = []  # 初始化一个空队列
queue.append("apple")  # 入队
queue.append("banana")
queue.append("cherry")
print(queue)  # 输出:['apple', 'banana', 'cherry']
front = queue[0]  # 访问队头元素
print(front)  # 输出:'apple'
queue.pop(0)  # 出队
print(queue)  # 输出:['banana', 'cherry']

队列的应用

  • 任务调度等等多种场景中都能使用队列。

双端队列(Deque)

双端队列是一种有头有尾、支持两端插入和删除操作的线性数据结构。在 Python 中,双端队列可以由列表或 Python 自带的 collections 模块的 deque 实现。

双端队列的实现

以下示例展示了如何使用 collections 模块的 deque 来实现双端队列:

from collections import deque

deque = deque()  # 初始化一个空双端队列
deque.append("apple")  # 在队尾插入数据
deque.appendleft("banana")  # 在队头插入数据
print(deque)  # 输出:deque(['banana', 'apple'])
front = deque[0]  # 访问队头元素
print(front)  # 输出:'banana'
rear = deque[-1]  # 访问队尾元素
print(rear)  # 输出:'apple'
deque.pop()  # 从队尾删除元素
deque.popleft()  # 从队头删除元素
print(deque)  # 输出:deque([])

双端队列的应用

  • 最近相关性缓存(Least Recently Used,LRU)缓存算法。
  • 游戏开发等多种场景中都能使用双端队列。

结语

以上就是 Python 中栈、队列及双端队列的基础知识和实现。根据实际需求,我们可以选择不同的数据结构来实现相应的功能。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python数据结构之栈、队列及双端队列 - Python技术站

(0)
上一篇 2023年5月14日
下一篇 2023年5月14日

相关文章

  • Python常用模块之threading和Thread模块及线程通信

    Python常用模块之threading和Thread模块及线程通信 简介 Python中可以使用Thread模块和threading模块来创建线程。其中Thread模块是低级模块,用于低级别的线程控制,而threading模块是高级模块,对Thread模块进行了封装,使得线程更加方便使用。本文将对这两个模块进行详细讲解,并讨论线程之间是如何进行通信的。 基…

    python 2023年5月19日
    00
  • 关于Python的各种文件操作

    关于Python的各种文件操作的攻略可以分为以下几个方面: 1.打开文件 在Python中,使用open()函数打开文件,语法如下: file = open(file_path, mode) 其中,file_path表示文件路径,mode表示文件打开模式,常见的文件打开模式有: “r”: 以读取模式打开文件(默认) “w”: 以写入模式打开文件,会覆盖文件原…

    python 2023年6月2日
    00
  • Python 列表 vs C 数组:慢 100 倍? [关闭]

    【问题标题】:Python lists vs C arrays : 100x slower? [closed]Python 列表 vs C 数组:慢 100 倍? [关闭] 【发布时间】:2023-04-06 12:12:01 【问题描述】: 据我了解,Python 列表是作为向量实现的。这就是为什么我无法解释为什么以下代码在 Python 中比等效的 C …

    Python开发 2023年4月6日
    00
  • JS正则表达式基本用法(经典全)

    下面是详细的攻略: JS正则表达式基本用法(经典全) 在JavaScript中,正则表达式是一种强大的工具,可以用于字符串匹配、替换、分割等操作。本文将介绍JS正则表达式的基本用法,并提供两个示例说明。 正则表达式基本语法 在JavaScript中,我们可以使用RegExp对象来创建正则表达式。正则表达式由模式和标志组成,模式是由字符和元字符组成的字符串,标…

    python 2023年5月14日
    00
  • Python之random库的常用函数有哪些

    接下来我会详细讲解“Python之random库的常用函数有哪些”的完整攻略。 一、背景介绍 Python之random库是Python标准库中的一个模块,主要用来生成随机数。它提供了各种生成随机数的函数,包括生成整数、浮点数、随机序列等。其中,常用的函数包括: 二、常用函数介绍 1. random() random()函数用于生成0到1之间的随机浮点数。示…

    python 2023年6月3日
    00
  • python黑魔法之编码转换

    Python黑魔法之编码转换: 什么是编码? 在计算机领域,编码是指在计算机内部处理和存储信息时所采用的二进制代码的方式。不同的国家、地区、场合所用的字符集和编码方案各不相同。而不同的编码方案之间是不能直接相互转换的,需要使用相应的工具进行转换。 为什么需要编码转换? 在日常开发中,我们可能会遇到需要将不同编码方式下的字符进行转换的情况,可能是因为程序与外部…

    python 2023年5月13日
    00
  • python 实现识别图片上的数字

    针对“python 实现识别图片上的数字”这个需求,我们可以通过以下步骤来完成: 1. 下载所需工具库 我们需要下载并安装两个工具库: PIL:一个 Python 图像处理库,可用于加载、调整和保存各种图像格式的文件。 pytesseract:一个 OCR(光学字符识别)引擎,能够识别并提取图像中的字符。 可以使用 pip 命令来下载这两个库: pip in…

    python 2023年5月18日
    00
  • Python日期与时间模块(datetime+time+Calendar+dateuil )相关使用讲解

    Python日期与时间模块(datetime+time+Calendar+dateuil )是Python内置模块,用于处理日期和时间相关的问题。本篇攻略将详细讲解该模块的使用方法及示例。 datetime模块 datetime模块是Python内置模块,用于处理日期和时间相关的问题,包含datetime类、time类、timedelta类等。其中,date…

    python 2023年6月2日
    00
合作推广
合作推广
分享本页
返回顶部