我正在阅读凯尔·劳顿的“掌握C算法”,目前我还在努力解决第5章中Loudon实现单链接列表的问题。
下面是指向源代码的链接。我很抱歉没有把它们张贴在这里,因为它们有点长。
我的问题与destroy in list.c有关,因为它在11下面的行中提到
void list_init(List* list, void (*destroy)(void* data))
as list->destroy = destroy
然后在24行中再次显示为
list->destroy(data)。
我只知道这个destroy不同于list_destroy函数,但我不知道它是什么。它是一个函数还是一个指针?它在list_init()函数中用于初始化链接列表的用途是什么?
我真的很感激你的时间和帮助!源代码链接在上面。
发布于 2016-09-05 19:13:12
它是一个函数指针。创建此列表的实例时,还必须向init_list函数传递一个函数,该函数将用于销毁信息。
链接列表的目的是存储信息,链接列表结构是为了给这些数据提供某种结构。因此,列表中的每个元素都包含指向某些数据的指针,以及指向列表中下一个元素的指针。但是,您希望列表能够处理多种类型的数据。
假设您想要删除列表中的一个元素,那么基本上有两件事情必须发生:
由于您事先不知道列表中的数据指针将包含什么样的数据,因此在步骤1中提供了一个函数指针来处理该数据的破坏。
发布于 2016-09-05 19:50:31
链表是由节点组成的数据结构,每个节点都包含或链接到一段数据。
destroy函数只销毁列表中的一个节点。
list_destroy函数破坏整个列表。
在给定的实现中,节点实际上包含指向其destroy函数的指针,并通过取消引用该指针来访问它。正如所发生的那样(到目前为止),所有节点都指向相同的破坏函数。但是,对于更复杂的数据结构,这种模式允许数据结构中有多种类型的节点。list_destroy函数的等效值将正确地销毁每个节点类型,因为该节点知道应该如何销毁它。
https://stackoverflow.com/questions/39336407
复制相似问题