Python栈算法的实现与简单应用示例

陈默
陈默
发布时间:2026-10-13| 2人浏览过
原创

本文详细介绍Python中栈数据结构的实现原理与应用。通过定义Node和Stack类,演示入栈、出栈及获取栈顶元素的操作。内容涵盖硬编码与面向对象两种实现方式,并展示如何利用栈进行十进制转八进制及括号匹配验证,帮助读者深入理解先进后出的核心逻辑。

本文通过具体实例讲解Python栈算法的实现及其简单应用场景,供读者参考学习。

基本原理:

栈是一种受限的线性数据结构,仅允许在一端进行插入和删除操作。它遵循“先进后出”(LIFO)原则:先存入的数据位于栈底,后存入的数据位于栈顶。读取数据时,从栈顶开始弹出,即最后存入的数据最先被取出。

栈的应用场景广泛,主要包括:1. 内存管理中的堆栈使用;2. 基于栈实现的二叉树遍历算法;3. 编程语言处理中的符号平衡问题。例如,判断字符串中成对符号(如<>, {}, [], ())是否匹配:遇到左符号时将其压入栈,遇到右符号时弹出栈顶元素。若处理完所有字符后栈为空,则说明符号平衡。

在栈的设计中,需定义一个实例属性top作为基准点,并实现三个核心实例方法:获取栈顶元素peek()、出栈pop()和入栈push()。

实例属性:self.top。该属性用于定位栈顶节点,作为操作的基准点。

实例方法:

1. 入栈操作

将新节点next指向当前top,随后更新top为新节点,最后返回新节点的value值。

2. 出栈操作

1)首先判断栈是否为空,若为空则返回None;2)若非空,返回top.value,并将top指针指向下一个节点。这一过程体现了栈和队列都需要通过节点定位当前位置的逻辑。

#给一个点,我们能够根据这个点知道一些内容
class Node(object):
  def __init__(self): #定位的点的值和一个指向
    self.val=val  #指向元素的值,原队列第二元素
    self.next=None  #指向的指针
class stack(object):
  def __init__(self):
    self.top=None #初始化最开始的位置
  def peek(self): #获取栈顶的元素
    if self.top!=None: #如果栈顶不为空
      return self.top.val #返回栈顶元素的值
    else:
      return None
  def push(self,n):#添加到栈中
    n=Node(n) #实例化节点
    n.next=self.top #顶端元素传值给一个指针
    self.top=n  #
    return n.val
  def pop(self): #退出栈
    if self.top == None:
      return None
    else:
      tmp=self.top.val
      self.top=self.top.next #下移一位,进行
      return tmp
if __name__=="__main__":
  s=stack()
  s.push(1)
  s.push(2)
  s.push(3)
  print s.pop()
  print s.pop()
  print s.pop()

打印效果展示:

3
2
1

实际应用案例:

数制转换示例:

1. 硬编码方式实现

#--coding: utf - 8--""
"
N = input("Please input a number::")
while (N):
  print "** @ **"
  N -= 1 ""
"
N = input("输入十进制数字(换算为八进制)::")
stack = []
string8 = ""
while (N):
  #求余
  stack.append(N % 8)# 求商
  N = N //8
while (len(stack) > 0):
  string8 += str(stack.pop())
print "转换为八进制:" + string8

2. 构建Stack类实现

Stack1.py文件内容:

#--coding: utf - 8--
class Stack(object):
  def __init__(self):
    self.items = []
  def isEmpty(self):
    return self.items == []
  def push(self, item):
    self.items.append(item)
  def pop(self):
    return self.items.pop()
  def GetTop(self):
    return
self.items[len(self.items) - 1]

moshi.py文件内容:

#--coding: utf - 8--
import stack1
shiyan = stack1.Stack()
stringu = ""
temp = input("请输入一个十进制数字::")
while (temp):
  shiyan.push(temp % 8)
  temp = temp / 8
while (not shiyan.isEmpty()):
  stringu += str(shiyan.pop())
print "八进制为::" + stringu

括号匹配应用:

硬编码方式实现括号匹配逻辑:

#--coding:utf-8--
print "  ****括号匹配****  "
print """
输入原则: 每当你输入一个括号, 你需要再输入一个‘,'
进行区分, 例如:(, [, ], (, ), )
输入的可识别括号有(), [], {}
"""
strpp = raw_input("请输入一段括号表达式:")
basestr = strpp.split(',')
pstack = []
suoyin = {'(': ')','[': ']','{': '}'}
for e in basestr:
  if (e == '(' or e == '[' or e == '}'):
    pstack.append(e)
  else :
    if len(pstack) == 0:
      print "右括号多余"
      break
    else :
      if e == suoyin[pstack[len(pstack) - 1]]:
        pstack.pop()
      else :
        print "不匹配"
        print "右括号多余"
        break
if len(pstack) == 0:
  print "匹配正确"
else :
  print "左括号多余"

更多关于Python数据结构与算法的内容,可参考本站《Python数据结构与算法教程》、《Python加密解密算法与技巧总结》、《Python编码操作技巧总结》、《Python函数使用技巧总结》、《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 算法库。