应用顺序栈或链栈,实现对于输入的任意一个非负十进制整数,打印输出与其等值的八进制数。
时间: 2024-02-03 21:11:55 浏览: 77
以下是基于链栈的实现方法:
```python
class Node:
def __init__(self, data):
self.data = data
self.next = None
class Stack:
def __init__(self):
self.top = None
def push(self, data):
node = Node(data)
node.next = self.top
self.top = node
def pop(self):
if self.top is None:
return None
data = self.top.data
self.top = self.top.next
return data
def is_empty(self):
return self.top is None
def decimal_to_octal(decimal):
stack = Stack()
while decimal != 0:
remainder = decimal % 8
stack.push(str(remainder))
decimal //= 8
result = ""
while not stack.is_empty():
result += stack.pop()
return result
decimal = int(input("请输入一个非负十进制整数:"))
octal = decimal_to_octal(decimal)
print(f"对应的八进制数为:{octal}")
```
算法分析:
首先,定义一个链栈 `Stack`,用于存储每一位的余数。然后,对于给定的十进制数 `decimal`,不断进行取余和整除操作,将得到的余数依次压入栈中。最后,将栈中的所有元素弹出,即可得到对应的八进制数。
时间复杂度:$O(\log_8n)$,其中 $n$ 是给定的十进制数。因为每次将十进制数除以 8,所以最多进行 $\log_8n$ 次操作。
空间复杂度:$O(\log_8n)$,即栈的最大深度。
阅读全文