<分区>
我正在阅读 Steven S. Skiena 的算法设计手册,我遇到的一个问题是它主要使用指针。我正在使用没有指针的 Python;那么,我应该如何在 Python 中实现基于指针的数据结构?
例如,在第 3 章中,一些练习包括将二叉树转换为链表。二叉树和链表都涉及节点之间的指针。什么是 Python 的等价物?
<分区>
我正在阅读 Steven S. Skiena 的算法设计手册,我遇到的一个问题是它主要使用指针。我正在使用没有指针的 Python;那么,我应该如何在 Python 中实现基于指针的数据结构?
例如,在第 3 章中,一些练习包括将二叉树转换为链表。二叉树和链表都涉及节点之间的指针。什么是 Python 的等价物?
最佳答案
我使用 Javascript 阅读了本书的大部分内容。部分乐趣在于将想法翻译成您熟悉的语言。你需要理解这本书是关于思想的,而不是特定的语言。但是,一点 熟悉 c 确实会帮助您理解这些示例。
因此,例如,您可能不太可能像在 c 中那样在 python 中使用链表,但您当然可以使用指向其他属性的类和对象属性从示例中实现它们。
考虑一个简单的链表:
class ListItem():
def __init__(self, val, next = None):
self.next = next
self.value = val
self.next
本质上是指向下一个 ListItem 的指针。现在您可以创建一个链表,如下所示:
arr = [5, 7, 2, 1, 9, 0, 10, 23]
head = ListItem(10)
current = head
for n in arr:
item = ListItem(n)
current.next = item
current = item
然后遍历列表:
pointer = head
while(pointer):
print(pointer.value)
pointer = pointer.next
你也可以做一个链表样式的插入,它看起来很像 C 代码:
#insert 'inserted_node' before first list item with value 1
inserted_node = ListItem('inserted')
pointer = head
while(pointer):
if pointer.next.value == 1:
inserted_node.next = pointer.next
pointer.next = inserted_node
break
pointer = pointer.next
这是一本了不起的书,即使您不是用 C 或其他一些低级语言来做的,也值得一读。即使您花时间研究通常不会用 Python 接触的数据结构,进行翻译也会让您成为更好的 Python 程序员。
关于python - 如何在 Python 中实现基于指针的数据结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50164917/