Python 手动实现堆栈与队列的数据结构详解

远山来客
远山来客
发布时间:2026-10-12| 2人浏览过
原创

介绍在 Python 中基于类实现堆栈与队列数据结构的完整方法。通过定义初始化、入栈/队、出栈/队及状态判断的核心逻辑,结合可直接运行的示例代码,帮助开发者掌握基础数据结构的手工实现原理与实战用法。

Python 堆栈与队列的基础逻辑

堆栈遵循后进先出(LIFO)原则,队列遵循先进先出(FIFO)原则。虽然 Python 标准库提供了高效的内置集合,但手动实现有助于深入理解索引管理、边界条件判断与内存分配机制。下面分两步提供完整可运行代码及参数说明。

第1步:编写堆栈类并执行入栈与出栈测试

【目的】搭建固定容量的堆栈容器,验证元素进出顺序与空满状态判断。
【入口】新建 stack.py 文件并写入核心类,随后在同一或独立脚本中调用实例。
【动作与参数】初始化传入最大容量 size。使用 push(ele) 压入元素前触发 isfull() 校验,防止越界;使用 pop() 弹出元素前触发 isempty() 校验。
【完成状态】控制台无报错抛出,且 print(s.isempty()) 返回正确布尔值代表操作成功。

class Stack():
    def __init__(self, size):
        self.size = size
        self.stack = []
        self.top = -1

    def push(self, ele):
        if self.isfull():
            raise Exception("out of range")
        else:
            self.stack.append(ele)
            self.top += 1

    def pop(self):
        if self.isempty():
            raise Exception("stack is empty")
        else:
            self.top -= 1
            return self.stack.pop()

    def isfull(self):
        return self.top + 1 == self.size

    def isempty(self):
        return self.top == -1

导入并使用该类的测试代码如下:

#!/usr/bin/env python
from stack import Stack

s = Stack(20)
for i in range(3):
    s.push(i)
s.pop()
print(s.isempty())

第2步:编写队列类并执行入队与出队测试

【目的】模拟固定长度数组下的队列行为,验证首尾指针的移动规律。
【入口】新建脚本文件直接定义 Queue 类并进行内联测试。
【动作与参数】初始化设置 front 与 rear 指针为 -1。入队 enqueue(ele) 追加至列表尾部并递增 rear;出队 dequeue() 递增 front 后读取当前索引元素。边界判断依赖 rear - front + 1 == self.size(满)与 front == rear(空)。
【完成状态】依次输出入队元素与最终的空状态检测结果,逻辑闭环无异常中断。

class Queue():
    def __init__(self, size):
        self.size = size
        self.front = -1
        self.rear = -1
        self.queue = []

    def enqueue(self, ele):
        if self.isfull():
            raise Exception("queue is full")
        else:
            self.queue.append(ele)
            self.rear += 1

    def dequeue(self):
        if self.isempty():
            raise Exception("queue is empty")
        else:
            self.front += 1
            return self.queue[self.front]

    def isfull(self):
        return self.rear - self.front + 1 == self.size

    def isempty(self):
        return self.front == self.rear

q = Queue(10)
for i in range(3):
    q.enqueue(i)
print(q.dequeue())
print(q.isempty())

关键注意事项与优化建议

上述代码采用原生列表模拟固定容量结构。实际开发中若频繁进行头部删除操作,建议将 pop(0) 替换为基于索引偏移的读取方式以规避 O(n) 的时间复杂度开销。此外,异常捕获建议使用标准的 Exception 基类而非小写拼写,确保在主流 Python 版本中稳定运行。

总结

以上就是在Python中手动实现堆栈与队列的详细内容,更多关于Python基础数据结构与面向对象开发的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。