当前位置: 首页 > article >正文

Python 数据结构揭秘:栈与队列

栈(Stack)

定义

栈是一种后进先出(Last In First Out, LIFO)的数据结构。它类似于一个容器,只能在一端进行插入和删除操作。栈有两个主要的操作:push(入栈)和 pop(出栈).

基本操作
  • push(入栈):将一个元素添加到栈顶.
    def push(self, item):
        self.items.append(item)
    
  • pop(出栈):移除栈顶的元素,并返回该元素.
    def pop(self):
        if not self.is_empty():
            return self.items.pop()
        return None
    
  • peek(查看栈顶元素):查看栈顶的元素,但不移除它.
    def peek(self):
        if not self.is_empty():
            return self.items[-1]
        return None
    
  • is_empty(检查栈是否为空):判断栈是否为空.
    def is_empty(self):
        return len(self.items) == 0
    
  • size(获取栈的大小):返回栈中元素的数量.
    def size(self):
        return len(self.items)
    
实现方式

栈可以用数组或链表来实现。以下是使用 Python 列表实现栈的完整示例:

class Stack:
    def __init__(self):
        self.items = []

    def push(self, item):
        self.items.append(item)

    def pop(self):
        if not self.is_empty():
            return self.items.pop()
        return None

    def peek(self):
        if not self.is_empty():
            return self.items[-1]
        return None

    def is_empty(self):
        return len(self.items) == 0

    def size(self):
        return len(self.items)
应用场景
  • 函数调用栈:在编程语言中,函数调用时会使用栈来存储函数的局部变量和返回地址等信息.
  • 表达式求值:用于计算算术表达式,如逆波兰表达式(后缀表达式)的求值.
  • 回溯算法:如迷宫求解、八皇后问题等,使用栈来保存回溯过程中的状态.
  • 页面浏览历史:浏览器的前进和后退功能可以使用栈来实现.

队列(Queue)

定义

队列是一种先进先出(First In First Out, FIFO)的数据结构。它类似于一个队列,元素从一端进入,从另一端出去。队列有两个主要的操作:enqueue(入队)和 dequeue(出队).

基本操作
  • enqueue(入队):将一个元素添加到队列的尾部.
    def enqueue(self, item):
        self.items.append(item)
    
  • dequeue(出队):移除队列头部的元素,并返回该元素.
    def dequeue(self):
        if not self.is_empty():
            return self.items.pop(0)
        return None
    
  • peek(查看队首元素):查看队列头部的元素,但不移除它.
    def peek(self):
        if not self.is_empty():
            return self.items[0]
        return None
    
  • is_empty(检查队列是否为空):判断队列是否为空.
    def is_empty(self):
        return len(self.items) == 0
    
  • size(获取队列的大小):返回队列中元素的数量.
    def size(self):
        return len(self.items)
    
实现方式

队列可以用数组或链表来实现。以下是使用 Python 列表实现队列的完整示例:

class Queue:
    def __init__(self):
        self.items = []

    def enqueue(self, item):
        self.items.append(item)

    def dequeue(self):
        if not self.is_empty():
            return self.items.pop(0)
        return None

    def peek(self):
        if not self.is_empty():
            return self.items[0]
        return None

    def is_empty(self):
        return len(self.items) == 0

    def size(self):
        return len(self.items)
应用场景
  • 任务调度:操作系统中的进程调度、打印机任务队列等,按照任务到达的顺序进行调度.
  • 缓冲处理:如网络数据包的传输缓冲、音频播放缓冲等,确保数据的顺序性和完整性.
  • 广度优先搜索(BFS):在图的遍历算法中,使用队列来存储待访问的节点.
  • 客户服务系统:如银行排队系统、呼叫中心等,按照客户到达的顺序提供服务.

总结

  • :适合需要回溯或撤销操作的场景,如函数调用、表达式求值等.
  • 队列:适合需要保持元素顺序的场景,如任务调度、缓冲处理等.

栈和队列在实际应用中非常广泛,理解它们的原理和操作方式对于解决各种编程问题具有重要意义.


http://www.kler.cn/a/467797.html

相关文章:

  • 【开源工业视觉库】启航规划
  • 用 HTML5 Canvas 和 JavaScript 实现流星雨特效
  • Chapter4.3:Implementing a feed forward network with GELU activations
  • 计算机毕业设计Python+CNN卷积神经网络高考推荐系统 高考分数线预测 高考爬虫 协同过滤推荐算法 Vue.js Django Hadoop 大数据毕设
  • 基于32单片机的智能语音家居
  • [读书日志]从零开始学习Chisel 第一篇:书籍介绍,Scala与Chisel概述,Scala安装运行(敏捷硬件开发语言Chisel与数字系统设计)
  • HDFS块预留导致的存储空间异常的问题探究
  • python.exe无法找到程序入口 无法定位程序输入点(Anaconda Prompt报错)
  • 基于JAVA+SpringBoot+Vue的校园外卖服务系统
  • 无刷电机驱动板原理图解析
  • LinuxC高级day2
  • 模型训练二三事:参数个数、小批量、学习率衰减、输入形状
  • 044_Standalone App in Matlab中发布独立应用
  • [网络安全]sqli-labs Less-3 解题详析
  • vue elementUI Plus实现拖拽流程图,不引入插件,纯手写实现。
  • Vue的data和methods
  • 面试题解,Java中的“字节码”剖析
  • HP 电脑开机黑屏 | 故障判断 | BIOS 恢复 | BIOS 升级
  • 改善 Kibana 中的 ES|QL 编辑器体验
  • 智能工厂的设计软件 应用场景的一个例子: 为AI聊天工具添加一个知识系统 之20 再次重建 之5 项目文件三大部 整“拼”项目文档总述
  • vs 2022 中xml 粘贴为Class 中,序列化出来的xml 的使用
  • 九进制转10进制
  • Git 如何在IDEA中进行使用
  • SAP系统中的标准价、移动平均价是什么?有何区别?物料分类账的优点
  • 基于开发/发布/缺陷分离模型的 Git 分支管理实践20250103
  • Day3 微服务 微服务保护(请求限流、线程隔离、服务熔断)、Sentinel微服务保护框架、分布式事务(XA模式、AT模式)、Seata分布式事务框架