数据结构与算法(Python版)
栈的应用
1. 十进制转二进制
二进制是计算机原理中最基本的概念
十进制是人类传统文化中最基本的数值概念
所谓”进制“就是用多少个字符来表示整数,二进制就是0~9这十个数字字符,二进制是0,1两个字符。
十进制转换为二进制,常规采用的是”除以2求余数“的算法。 ”除以2“的过程,得到的余数是从低到高的次序,而输出则是从高到低,所以需要一个栈来反转次序 。
def decimalToBinary(decimalNumber):
tempStack = Stack()
# 将除2余数放入栈中
while decimalNumber > 0:
remainder = decimalNumber % 2
tempStack.push(remainder)
decimalNumber = decimalNumber // 2
# 将栈中的数据取出实现倒序
binaryStr = ''
while not tempStack.isEmpty():
binaryStr += str(tempStack.pop())
print(binaryStr)
2. 扩展到更多进制转换
十进制转换为二进制的算法,很容易就可以扩展为转换为十六以下任意N进制,只需要将”除以2求余数“改为”除以N求余数“即可
def decimalConvert(decimalNumber, n):
# 主要处理十六进制及以下进制的表达==表示
digits = "0123456789ABCDEF"
tempStack = Stack()
# 将除2余数放入栈中
while decimalNumber > 0:
remainder = decimalNumber % n
tempStack.push(remainder)
decimalNumber = decimalNumber // n
# 将栈中的数据取出实现倒序
convertStr = ''
while not tempStack.isEmpty():
convertStr += digits[tempStack.pop()]
print(convertStr)