首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Loudon算法书中单链表的实现

Loudon算法书中单链表的实现
EN

Stack Overflow用户
提问于 2016-09-05 19:09:12
回答 2查看 174关注 0票数 1

我正在阅读凯尔·劳顿的“掌握C算法”,目前我还在努力解决第5章中Loudon实现单链接列表的问题。

下面是指向源代码的链接。我很抱歉没有把它们张贴在这里,因为它们有点长。

list.h

list.c

我的问题与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()函数中用于初始化链接列表的用途是什么?

我真的很感激你的时间和帮助!源代码链接在上面。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-05 19:13:12

它是一个函数指针。创建此列表的实例时,还必须向init_list函数传递一个函数,该函数将用于销毁信息。

链接列表的目的是存储信息,链接列表结构是为了给这些数据提供某种结构。因此,列表中的每个元素都包含指向某些数据的指针,以及指向列表中下一个元素的指针。但是,您希望列表能够处理多种类型的数据。

假设您想要删除列表中的一个元素,那么基本上有两件事情必须发生:

  1. 这些数据需要销毁
  2. 必须还原链接列表结构。这意味着您删除的元素的前身必须指向列表中的下一个元素。

由于您事先不知道列表中的数据指针将包含什么样的数据,因此在步骤1中提供了一个函数指针来处理该数据的破坏。

票数 1
EN

Stack Overflow用户

发布于 2016-09-05 19:50:31

链表是由节点组成的数据结构,每个节点都包含或链接到一段数据。

destroy函数只销毁列表中的一个节点。

list_destroy函数破坏整个列表。

在给定的实现中,节点实际上包含指向其destroy函数的指针,并通过取消引用该指针来访问它。正如所发生的那样(到目前为止),所有节点都指向相同的破坏函数。但是,对于更复杂的数据结构,这种模式允许数据结构中有多种类型的节点。list_destroy函数的等效值将正确地销毁每个节点类型,因为该节点知道应该如何销毁它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39336407

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档