Python实现栈(Stack)数据结构详解

晚来风
晚来风
发布时间:2026-10-13| 3人浏览过
原创

本文详解Python中栈(Stack)数据结构的实现原理与代码示例。栈遵循后进先出(LIFO)原则,Python中可直接利用List封装实现。文章深入讲解了如何通过双下划线定义私有属性__items,以及使用__slots__限制实例属性,从而提升代码安全性与内存效率,适合Python初学者理解面向对象编程在数据结构中的应用。

前言

鉴于Python内置的顺序表(如List和Tuple)已经提供了丰富的功能,本文从栈(Stack)这一数据结构开始进行讲解。

什么是栈

可以将栈想象为一摞堆叠起来的书籍。这摞书的核心特征是:最后放置进去的书,始终位于最顶端。从这摞书中取书时,取哪一本最为便捷?显然是最上面那本。栈这种数据结构正是基于此特性:后进先出(Last In First Out,简称LIFO)。这意味着最后被压入栈的数据元素,将是最先被弹出的元素。

栈的Python实现

栈既可以通过顺序表方式实现,也可以通过链表方式实现。考虑到Python内置数据类型的强大功能,直接使用List来构建栈不仅简单快捷,而且高效。正如那句名言所说:“人生苦短,我用Python”。具体实现代码如下:

class Stack(object):
  # 初始化栈为空列表
  def __init__(self):
    self.items = []
  # 判断栈是否为空,返回布尔值
  def is_empty(self):
    return self.items == []
  # 返回栈顶元素
  def peek(self):
    return self.items[len(self.items) - 1]
  # 返回栈的大小
  def size(self):
    return len(self.items)
  # 把新的元素堆进栈里面(程序员喜欢把这个过程叫做压栈,入栈,进栈……)
  def push(self, item):
    self.items.append(item)
  # 把栈顶元素丢出去(程序员喜欢把这个过程叫做出栈……)
  def pop(self, item):
    return self.items.pop()
if __name__ == __main__:
  # 初始化一个栈对象
  my_stack = Stack()
  # 把'h'丢进栈里
  my_stack.push('h')
  # 把'a'丢进栈里
  my_stack.push('a')
  # 看一下栈的大小(有几个元素)
  print my_stack.size()
  # 打印栈顶元素
  print my_stack.peek()
  # 把栈顶元素丢出去,并打印出来
  print my_stack.pop()
  # 再看一下栈顶元素是谁
  print my_stack.peek()
  # 这个时候栈的大小是多少?
  print my_stack.size()
  # 再丢一个栈顶元素
  print my_stack.pop()
  # 看一下栈的大小
  print my_stack.size
  # 栈是不是空了?
  print my_stack.is_empty()
  # 哇~真好吃~
  print 'Yummy~'

Tips:

阅读上述代码后,读者应当能够理解:在Python中实现栈,本质上是将List包装为一个类,并添加若干方法以支持栈的基本操作。其他数据结构在Python中的实现也遵循类似的逻辑。 接下来,补充一些相关的技术细节:

若希望将items[]设置为Stack类的私有属性,可采用以下写法:

def __init__(self):
  self.__items = []

正确做法是在变量名items前添加两个下划线__。在Python中,通过这种方式即可定义类的私有成员。

若希望严格限制Stack类的实例仅包含items属性,防止外部随意添加其他属性,可采用以下写法:

class Stack(object):
  __slots__ = ('__items')

  def __init__(self):
    self.__items = []

如此处理可显著提升代码的安全性。

Python并未提供如public/private/protected中所述的public、private或protected等显式修饰符。这是因为Python的设计哲学认为,“大家都是成年人了”,依靠开发者的自律而非语言强制约束来维护代码规范。

总结

以上内容介绍了使用Python实现栈(Stack)的方法,希望能为读者提供帮助。如有任何疑问,欢迎留言,小编会及时回复。在此感谢大家对本站的支持!

相关标签:

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

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 算法库。