数据结构---栈的python实现及其应用
·
1.栈的概念
一种有次序的数据项集合,在栈中,数据项的加入和移除都仅发生在同一端,遵循后进先出原则。

2.栈的python实现
列表的append()方法是在列表尾部添加数据项、pop()方法是从尾部剔除数据项。列表的添加和删除方法完美契合栈的特性,因此将列表的尾部设定为栈的顶部实现栈的搭建非常容易。如下为栈的python实现代码。
class Stack:
# 栈的搭建
def __init__(self):
self.items = []
def push(self,item):
self.items.append(item)
def pop(self):
return self.items.pop()
def peek(self):
return self.items[-1]
def isEmpty(self):
return self.items == []
def size(self):
return len(self.items)
3.栈的应用
(1)括号匹配问题
括号匹配遵循后进先出原则适合使用栈来实现,如下为代码。
# 括号匹配问题
def match(top1,i1):
# 检查左右括号类型是否匹配
l1 = '({['
l2 = ')}]'
return l1.index(top1) == l2.index(i1)
def bracket(Str):
# 检查括号匹配情况
S = Stack() # 创建栈
n = 0 # 状态参数
for i in Str:
if i in '[{(':
S.push(i)
elif i in ')}]' and not S.isEmpty():
top = S.peek()
if not match(top,i):
n = 2 # 用于表示匹配错误的情况
print('匹配错误,请检查括号类型')
else:
S.pop()
elif i in ')}]' and S.isEmpty():
n = 1 # 用于表示存在多余右括号的情况
print('存在多余的右括号')
if S.isEmpty() and n == 0:
print('不存在多余的括号')
elif not S.isEmpty():
print('左括号存在多余的情况')
(2)十进制转换为二进制
十进制的计算过程包括做除法和取余数,其中余数的生成和提取刚好遵循后进先出原则。
def binary_conversion(number):
# 十进制转二进制
s = Stack()
string = ''
while number//2 > 0:
n = number % 2 # 余数
s.push(n)
number = number // 2 # 商
if number//2 == 0 and number != 0:
s.push(1)
elif number == 0:
s.push(0)
while not s.isEmpty():
string = string + str(s.pop())
return string
更多推荐

所有评论(0)