Python栈算法的实现与简单应用示例
本文详细介绍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程序设计有所帮助。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













