Python实现栈结构:列表模拟与面向对象封装详解

小林子
小林子
发布时间:2026-10-13 | 4人浏览过
原创

本文详细解析如何在Python中实现栈(Stack)这一线性数据结构。首先介绍栈的基本概念,随后通过两种主流方式展示具体实现:一是利用Python内置列表及其append和pop方法直接模拟栈操作;二是通过面向对象编程定义MyStack类,封装进栈、出栈、查看栈顶及判空等功能。文章包含完整代码示例与运行结果分析,帮助开发者理解栈的LIFO特性及其在Python中的实际应用。

栈的基本概念与Python实现概述

栈(Stack),亦称为堆栈,是一种操作受限的线性表结构。在Python编程语言中,开发者可以直接利用列表(List)这一内置数据结构来高效地实现栈的功能。

栈的基本概念解析

栈(Stack),亦称为堆栈,是一种操作受限的线性表结构。其核心限制在于仅允许在表的一端进行插入和删除运算。这一特定端点被称为栈顶(Top),而另一端则称为栈底(Bottom)。向栈中插入新元素的操作称为进栈、入栈或压栈(Push),其过程是将新元素置于当前栈顶元素之上,使其成为新的栈顶元素;从栈中删除元素的操作称为出栈或退栈(Pop),即移除当前栈顶元素,使原本位于其下的相邻元素成为新的栈顶元素。

Python中栈的具体实现方法

Python中栈的实现方法

在Python环境中,最直观且常用的实现方式是直接使用列表(List)来模拟栈的行为。

基于列表的栈操作演示


#!/usr/bin/env python 
#定义一个列表来模拟栈 
stack = [] 
#进栈,调用列表的append()函数加到列表的末尾,strip()没有参数是去掉首尾的空格 
def pushit(): 
 stack.append(raw_input('Enter new string: ').strip()) 
#出栈,用到了pop()函数 
def popit(): 
 if len(stack) == 0: 
  print 'Cannot pop from an empty stack!'
 else: 
  print 'Removed [', stack.pop(), ']'
#编历栈 
def viewstack(): 
 print stack 
#CMDs是字典的使用 
CMDs = {'u': pushit, 'o': popit, 'v': viewstack} 
#pr为提示字符 
def showmenu(): 
 pr = """ 
 p(U)sh 
 p(O)p 
 (V)iew 
 (Q)uit 
  Enter choice: """
 while True: 
  while True: 
   try: 
    #先用strip()去掉空格,再把第一个字符转换成小写的 
    choice = raw_input(pr).strip()[0].lower() 
   except (EOFError, KeyboardInterrupt, IndexError): 
    choice = 'q'
   print '\nYou picked: [%s]' % choice 
   if choice not in 'uovq': 
    print 'Invalid option, try again'
   else: 
    break
#CMDs[]根据输入的choice从字典中对应相应的value,比如说输入u,从字典中得到value为pushit,执行pushit()进栈操作 
  if choice == 'q': 
   break
  CMDs[choice]() 
#判断是否是从本文件进入,而不是被调用 
if __name__ == '__main__': 
 showmenu()

扩展实例:基于列表的栈操作演示

面向对象栈类封装示例


# -*- coding:utf-8 -*-
# __author__ :kusy
# __content__:文件说明
# __date__:2018/9/30 17:28


class MyStack(object):
  def __init__(self):
    self.stack_list = []
    self.count = 0

  # 创建一个栈
  def create_stack(self):
    return self.stack_list

  # 栈中添加值
  def push(self, value):
    self.stack_list.insert(0,value)
    self.count += 1

  #返回栈顶元素值
  def peek(self):
    if self.count:
      return self.stack_list[0]

  # 删除栈顶元素
  def pop(self):
    self.stack_list.pop(0)
    self.count -= 1

  # 返回栈是否为空
  def is_empty(self):
    return self.count == 0

  #打印栈内容
  def print_all(self):
    for sl in self.stack_list:
      print(sl)

if __name__ == '__main__':
  ms = MyStack()
  ms.create_stack()
  ms.push(1)
  ms.push(2)
  ms.push(3)
  print('栈元素:')
  ms.print_all()
  print('栈顶元素:',ms.peek())
  ms.pop()
  print('栈顶元素删除后:')
  ms.print_all()
  print('栈是否为空:','是' if ms.is_empty() else '否')
  print('---继续删除元素')
  ms.pop()
  print('---继续删除元素')
  ms.pop()
  print('栈是否为空:','是' if ms.is_empty() else '否')

上述代码的执行输出结果如下所示:

代码运行结果分析


C:\Users\suneee\AppData\Local\Programs\Python\Python36\python.exe E:/wangjz/PyWorkSpace/LearnPython/PY0929/stack.py
栈元素:
3
2
1
栈顶元素: 3
栈顶元素删除后:
2
1
栈是否为空: 否
---继续删除元素
---继续删除元素
栈是否为空: 是

Process finished with exit code 0

至此,关于Python如何实现栈结构的介绍已告一段落。如需了解更多关于Python栈结构实现的相关条件与细节,建议查阅本站过往文章或继续浏览后续相关内容。感谢大家的支持!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表