gpt4 book ai didi

python - 需要帮助理解 python 简单链表程序

转载 作者:太空宇宙 更新时间:2023-11-03 17:36:49 25 4
gpt4 key购买 nike

下面是一个简单的链表程序,我知道链表在概念上是如何工作的(添加、删除等),但我发现很难从面向对象设计的角度理解它是如何工作的。

代码:

class Node():

def __init__(self,d,n=None):
self.data = d
self.next_node = n

def get_next(self):
return self.next_node

def set_next(self,n):
self.next_node = n

def get_data(self):
return self.data

def set_data(self,d):
self.data = d

class LinkedList():

def __init__(self,r = None):
self.root = r
self.size = 0

def get_size(self):
return self.size

def add(self,d):
new_node = Node(d,self.root)
self.root = new_node
self.size += 1

def get_list(self):
new_pointer = self.root
while new_pointer:
print new_pointer.get_data()
new_pointer = new_pointer.get_next()

def remove(self,d):
this_node = self.root
prev_node = None
while this_node:
if this_node.get_data() == d:
if prev_node:
prev_node.set_next(this_node.get_next())
else:
self.root = this_node
self.size -= 1
return True
else:
prev_node = this_node
this_node = this_node.get_next()
return False

def find(self,d):
this_node = self.root
while this_node:
if this_node.get_data() == d:
return d
else:
this_node = this_node.get_next()
return None

myList = LinkedList()
myList.add(5)
myList.add(8)
myList.add(12)
myList.get_list()

我有几个问题..

  1. 它是如何存储值的。据我了解,每个变量都可以保存一个值。那么data/next_node如何保存多个值呢。那么next_node保存的是下一个节点的内存位置吗?

  2. new_pointer.get_data() new_pointer 如何访问 get_data()?我们不需要一个实例来访问 Node 的方法吗?

这个问题可能很愚蠢,但我对面向对象编程很陌生。如果有人可以回答这些问题或发布解决这些问题的外部链接,那将非常有帮助。

提前致谢。

最佳答案

  1. next_nodeNode 的一个实例所以它有自己的data field 。 next_node是对节点对象的引用,它是一些内存地址(但是它不是类似 C 的指针,因为您不需要取消引用它或任何内容)。

  2. 我假设您正在谈论 get_list() 。 new_pointer Node 的一个实例。 (除非它是 None ,在这种情况下你永远不会进入 get_data() 调用)。当您执行add时,您创建 Node 的此实例并设置root到它。然后在 get_list你设置new_pointerroot .

关于python - 需要帮助理解 python 简单链表程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31108022/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com