创建SqStack类
SqStack
类通常包含以下几个主要方法和属性:
- 初始化方法:用于创建一个空栈,并初始化相关属性,如栈顶指针和存储元素的数组或列表。
push
方法:用于将元素压入栈顶。如果栈已满,可能需要扩展存储空间。pop
方法:用于从栈顶弹出元素。如果栈为空,可能会引发异常或错误。is_empty
方法:用于检查栈是否为空。get_top
方法:用于获取栈顶元素,但不弹出该元素。class SqStack: def __init__(self, maxsize=50): self.data = [None] * maxsize self.top = -1 #创建了一个实例属性 top,用于记录栈顶元素的位置。这里将其初始化为 -1,表示栈为空。 self.maxsize = maxsize #创建了一个实例属性 maxsize,用于记录栈的最大容量。 def is_empty(self): #创建了一个实例方法 is_empty,用于判断栈是否为空 return self.top == -1 #如果栈为空,self.top 的值应该为 -1,所以这里直接返回 self.top == -1。 def push(self, elem): if self.top == self.maxsize - 1: raise OverflowError("栈已满") self.top += 1 self.data[self.top] = elem#将元素elem放入栈顶 def pop(self):#出栈操作 if self.is_empty(): raise IndexError("栈为空") elem = self.data[self.top]#取出栈顶元素 self.top -= 1#栈顶指针减1 return elem#返回栈顶元素 def get_top(self): if self.is_empty(): raise IndexError("栈为空") return self.data[self.top]
将十进制数转换为其他进制的核心逻辑
while decimal_number > 0: remainder = decimal_number % base#计算余数 stack.push(digits[remainder]) #将余数对应的字符(从 digits 字符串中获取)压入栈中。这样做的目的是为了逆序存储转换后的各个位,因为进制转换的结果是从低位到高位计算的,而我们需要从高位到低位输出。 decimal_number //= base #将 decimal_number 整除 base,更新 decimal_number 的值,以便在下一次循环中处理更高位的值。 converted_number = ""#创建一个空字符串 converted_number,用于存储转换后的结果。 while not stack.is_empty(): converted_number += stack.pop() #由于栈是后进先出(LIFO)的数据结构,这样可以确保字符按正确的顺序拼接。 return converted_number
测试十进制数转换为其他进制
if __name__ == "__main__":
decimal_number = 400
base = 8
result = decimal_to_base(decimal_number, base)
print(f"{decimal_number} 转换为 {base} 进制是: {result}")
运行结果