用列表的数据结构实现栈的基本数据操作
class Stack:
def __init__(self):
self.item = []
def push(self,data_item):
self.item.append(data_item)
def pop(self):
return self.item.pop()
def peek(self):
return self.item[-1]
def isEmpty(self):
return self.item == []
def size(self):
return len(self.item)
括号匹配
from adt import Stack
def ParChecker(symbol_string):
'''关于栈的简单应用:小括号匹配()
右括号总是与最近输入的左括号匹配'''
if symbol_string:
s = Stack()
for sym_str in symbol_string:
if sym_str == '(':
s.push(sym_str)
elif sym_str == ')' and s.size():
s.pop()
else:
return False
return s.size()==0
else:
print('无输入括号')
def judge(sym):
if sym == ']':
return '['
elif sym == '}':
return '{'
elif sym == ')':
return '('
def up_ParChecker(symbol_string):
'''关于栈的应用:括号匹配([{}])'''
if symbol_string:
s = Stack()
for sym in symbol_string:
if sym in '[{(':
s.push(sym)
elif sym in ']})' and s.size():
if s.peek() == judge(sym):
s.pop()
else:
return False
else:
return False
return s.size() == 0
else:
print('无输入括号')
if __name__ == '__main__':
print(ParChecker('()()()(())'))
print(ParChecker('(()'))
print(ParChecker(')([]'))
print(up_ParChecker('[()]{}'))
print(up_ParChecker('{]()'))
print(up_ParChecker('[((){][])]'))
print(up_ParChecker('[{()}]'))
print(up_ParChecker(')('))
十进制转换为十六进制以下任意进制
from adt import Stack
def divide_by_2(decNumber):
'''关于栈的小应用:十进制转换为二进制'''
if type(decNumber)==int:
rems = Stack()
while decNumber > 0:
rem = decNumber % 2
rems.push(rem)
decNumber = decNumber
binString = ''
while rems.size():
binString = binString + str(rems.pop())
return binString
else:
print('输入数据类型错误,请输入正整数')
def base_converter(dec_number,base):
'''关于栈的应用:十进制转换为十六进制下任意进制'''
if type(dec_number) == int:
digits = "0123456789ABCDEF"
rems = Stack()
while dec_number > 0:
rem = dec_number % base
rems.push(rem)
dec_number = dec_number
bin_string = ''
while rems.size():
bin_string = bin_string + digits[rems.pop()]
return bin_string
else:
print('输入数据类型错误,请输入正整数')
if __name__ == '__main__':
print(divide_by_2(2))
print(divide_by_2(4))
print(divide_by_2(9))
print(divide_by_2(12))
print(base_converter(17,16))
print(base_converter(16,15))
print(base_converter(16,8))