如何以Stack为输入,实现栈中整数弹出并转二进制?
问题:从栈中弹出整数并转换为二进制的实现逻辑
我已成功编写程序,可接收单个整数并借助栈存储余数完成十进制转二进制,但不清楚如何以栈作为输入,从中逐个弹出整数并转换为二进制。
已实现的代码
class ArrayStack: # 仅允许从栈顶存入和取出元素 def __init__(self): self._data = [] def __len__(self): return len(self._data) def is_empty(self): return len(self._data) == 0 def push(self, e): self._data.append(e) def top(self): if self.is_empty(): raise Exception("栈中无元素") return self._data[-1] def pop(self): if self.is_empty(): raise Exception("栈中无元素") return self._data.pop() def decToBin(num): stack = ArrayStack() while num > 0: remainder = num % 2 stack.push(remainder) num = num // 2 _str = '' while not stack.is_empty(): Bin = stack.pop() _str = _str + str(Bin) # 补充处理输入为0的情况,避免空字符串转整数报错 return int(_str) if _str else 0 if __name__ == "__main__": print(decToBin(65536))
解决方案:处理以栈为输入的整数转二进制
编写一个新函数,直接接收ArrayStack实例作为参数,逐个弹出栈内整数并调用已有的decToBin函数完成转换。
实现代码
def stackElementsToBin(input_stack): binary_results = [] # 循环弹出栈中元素直到为空 while not input_stack.is_empty(): current_num = input_stack.pop() # 调用现有函数转换为二进制 binary_num = decToBin(current_num) binary_results.append(binary_num) return binary_results # 测试示例 if __name__ == "__main__": # 创建测试栈,压入多个整数 test_stack = ArrayStack() test_stack.push(10) test_stack.push(20) test_stack.push(65536) test_stack.push(0) # 测试0的转换 # 转换栈中所有元素 results = stackElementsToBin(test_stack) for i, bin_val in enumerate(results): print(f"第{i+1}个弹出的整数对应的二进制:{bin_val}")
说明
- 栈的特性是后进先出,因此弹出顺序是原栈的栈顶元素优先被处理,最终结果列表的顺序与弹出顺序一致。
- 补充了
decToBin函数对输入为0的处理,避免原代码中输入0时返回空字符串转整数报错的问题。
内容的提问来源于stack exchange,提问作者Satvik Konda
相关产品推荐
相关产品推荐

