0

0

Python 实现简单队列与栈结构

舞夢輝影

舞夢輝影

发布时间:2026-02-26 08:00:02

|

118人浏览过

|

来源于php中文网

原创

python用list可高效实现栈(lifo),push/pop/peek均为o(1);队列若用list.pop(0)为o(n),应改用deque或手写滑动索引队列类,典型应用如括号匹配(栈)和bfs(队列)。

python 实现简单队列与栈结构

用 Python 实现队列和,不需要依赖复杂库,靠列表(list)就能高效完成。核心在于理解两者操作逻辑:栈是“后进先出”(LIFO),队列是“先进先出”(FIFO);Python 列表的 append()pop() 天然适配栈,而队列若用 pop(0) 效率低,建议用 collections.deque 或封装简单类来规避性能问题。

用 list 快速实现栈

列表的末尾是栈顶,所有操作都在末端进行,时间复杂度 O(1):

  • push(item)list.append(item)
  • pop()list.pop()(默认弹出最后一个)
  • peek()list[-1](查看栈顶,不删除)
  • is_empty()len(list) == 0

示例:

stack = []<br>stack.append(1)  # push<br>stack.append(2)<br>top = stack[-1]   # peek → 2<br>popped = stack.pop()  # pop → 2<br>print(stack)  # [1]

避免用 list.pop(0) 实现队列

list.pop(0) 需要移动后续所有元素,最坏 O(n),不适合频繁出队。推荐两种更优方式:

立即学习Python免费学习笔记(深入)”;

MallWWI新模式返利商城系统
MallWWI新模式返利商城系统

MallWWI新模式返利商城系统基于成熟的飞蛙商城系统程序框架,支持多数据库配合,精美的界面模板,人性化的操作体验,完备的订单流程,丰富的促销形式,适合搭建稳定、高效的电子商务平台。创造性的完美整合B2B\B2C\B2S\C2B\C2C\P2C\O2O\M2C\B2F等模式,引领“互联网+”理念,实现商家联盟体系下的线上线下全新整合销售方式,独创最流行的分红权返利与排队返钱卡功能。安全、稳定、结构

下载
  • 直接使用 collections.deque:双端队列,两端插入/删除都是 O(1)
  • 手动封装一个简易队列类,内部用 list + 索引偏移,避免移动元素(适合教学理解)

deque 示例:

from collections import deque<br>queue = deque()<br>queue.append(1)    # enqueue<br>queue.append(2)<br>front = queue[0]   # peek → 1<br>deq = queue.popleft()  # dequeue → 1

手写轻量队列类(无依赖,易理解)

用两个指针模拟“头尾滑动”,不实际删除元素,只更新索引,空间可复用:

  • 初始化时设 self.items = [None] * capacity(可选固定容量)或动态 list
  • 记录 self._front(当前队首位置)和 self._size(当前长度)
  • enqueue(item):在 self._front + self._size 处赋值
  • dequeue():返回 self.items[self._front],再 self._front += 1self._size -= 1

实际开发中更推荐 deque;手写类主要用于理解队列抽象逻辑和内存管理思想。

栈与队列的典型用途对比

知道“怎么实现”之后,明确“为什么用”能加深掌握:

  • 栈:函数调用栈、括号匹配、表达式求值、深度优先搜索(DFS)
  • 队列:任务调度、广度优先搜索(BFS)、消息缓冲、打印任务排队

例如括号匹配用栈——遇到左括号入栈,右括号时检查栈顶是否匹配并弹出;BFS 用队列——逐层扩展邻居节点,保证最近节点先被访问。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

424

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

597

2023.08.10

堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

424

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

597

2023.08.10

append用法
append用法

append是一个常用的命令行工具,用于将一个文件的内容追加到另一个文件的末尾。想了解更多append用法相关内容,可以阅读本专题下面的文章。

348

2023.10.25

python中append的用法
python中append的用法

在Python中,append()是列表对象的一个方法,用于向列表末尾添加一个元素。想了解更多append的更多内容,可以阅读本专题下面的文章。

1080

2023.11.14

python中append的含义
python中append的含义

本专题整合了python中append的相关内容,阅读专题下面的文章了解更多详细内容。

178

2025.09.12

batoto漫画官网入口与网页版访问指南
batoto漫画官网入口与网页版访问指南

本专题系统整理batoto漫画官方网站最新可用入口,涵盖最新官网地址、网页版登录页面及防走失访问方式说明,帮助用户快速找到batoto漫画官方平台,稳定在线阅读各类漫画内容。

127

2026.02.25

Steam官网正版入口与注册登录指南_新手快速进入游戏平台方法
Steam官网正版入口与注册登录指南_新手快速进入游戏平台方法

本专题系统整理Steam官网最新可用入口,涵盖网页版登录地址、新用户注册流程、账号登录方法及官方游戏商店访问说明,帮助新手玩家快速进入Steam平台,完成注册登录并管理个人游戏库。

17

2026.02.25

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.5万人学习

Django 教程
Django 教程

共28课时 | 4.5万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号