【问题标题】:Logic of LinkedList in CC中LinkedList的逻辑
【发布时间】:2020-10-21 19:41:40
【问题描述】:

我刚开始学习数据结构,今天我观看了一个关于 C 语言 LinkedList 的视频。由于我在课堂上学到的知识,我可以理解大部分解释的内容,但我无法理解一个东西。

在视频中,它被解释为,我们创建一个节点结构,然后我们为它分配内存。假设我们在其中有 2 种数据类型,即整数和指针。假设我们有 5 个这样的节点,每个指针都保存下一个节点的地址。到目前为止没有任何问题。但我无法理解的是,每当我们调用函数时,这个指针如何保持下一个元素的地址。它如何通过可能位于头节点和我们寻找的另一个节点之间的其他元素?如果有人能解释一下,那就太好了。

谢谢。

【问题讨论】:

  • 程序终止或您freed 内存时,指针不会立即保留地址。但是当程序运行时,指针有它的值,所以它指向系统分配的那个内存位置。因此,每次调用该函数时,它都会取消对该 mem 的引用。地址。
  • 假设它以head->next->next->int 开头。所以,这里它从head 传递到包含另一个内存地址的next,所以它移动到next 地址等等,然后你找到你的int 并停止。 结论:它从head开始,通过next指针指向存储你的值的pointer

标签: c list pointers structure dev-c++


【解决方案1】:

指针不会“穿过”其他元素。每个元素只存储下一个元素的地址。

这就像寻找带有线索的复活节彩蛋,每个彩蛋都有关于下一个彩蛋的线索。 (除了它们不是线索,它们只是告诉你鸡蛋在哪里)

厨房里有一张纸条(变量head),上面写着“邮箱里有一个鸡蛋”。那是头指针。

邮箱中有一个鸡蛋 (data) 和一张纸条 (next),上面写着“烤箱里有一个鸡蛋”。这是第一个节点。

烤箱里有一个鸡蛋 (data) 和一张纸条 (next),上面写着“车下有个鸡蛋”。 这是第二个节点。

在汽车下面有一个鸡蛋 (data) 和一张纸条 (next),上面写着“车库里有一个鸡蛋”。这是第三个节点。

在车库里有一个鸡蛋 (data) 和一张纸条 (next),上面写着“没有更多的鸡蛋”(一个空指针)。那是第四个节点,最后一个。

笔记不会“保持”彼此,它们不会“穿过”彼此或类似的东西。它们只是笔记。

当你写head->next->next->data 时,它的意思是:“看看厨房里的head 注释(编译器已经知道这个在哪里)。然后去它说的地方看看next 注释。然后去它说的地方看next的注释。然后去它说的地方看data egg。”

指令不会让 notes 做事(或鸡蛋)——它们让 you(CPU)做事。笔记不会跑来跑去重新洗牌 - 跑来跑去看着笔记。

【讨论】:

  • 所以基本上我们将next指针的地址分配给头指针,然后这样继续下去?
  • @Mystheman 如果你想从链表中删除邮箱节点,你会把邮箱里的鸡蛋和纸条扔掉,然后去厨房的纸条上,划掉“邮箱” ” 并写“烤箱”。否则,不,您不会为厨房中的head 注释分配任何内容。
猜你喜欢
  • 2012-06-12
  • 1970-01-01
  • 2012-01-18
  • 2013-05-28
  • 2016-12-03
  • 2012-09-02
  • 2010-12-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多