mis*_*hsx 7 c# linked-list data-structures
我是C#的初学者,我通过解决数据结构案例场景来解决它.我需要帮助可视化以下代码段中发生的事情
public void AddAtLast(object data)
{
Node newNode = new Node();
newNode.Value = data;
current.Next = newNode;
current = newNode;
Count++;
}
Run Code Online (Sandbox Code Playgroud)
我明白了什么部分
我知道在链表的末尾添加了一个新节点.此外,新节点从函数参数获取其值.
我需要帮助的是什么
我特别想到为什么current.Next指向newNode,不应该指向NULL,因为我newNode将被放置在链表的末尾,所以它应该指向NULL.
另外,我们为什么这样做current=newNode?
我理解为什么count++存在可能是因为想要跟踪添加新元素的位置,但如果我的理解错误,请纠正我.
因此,让我们看看AddAtLast(object data)在链接列表类的方法中逐行发生的事情
Node newNode = new Node();创建一个新的Node,这是AddAtLast生活中的方法目标
newNode.Value = data;将一些数据分配给节点
current.Next = newNode;将newNode创建的内容分配给Current.这是链接列表的链接部分
current = newNode;覆盖Current(这一定看起来很奇怪)以后会对此进行更多的解释.
Count++ 递增Count的Linked List,其漂亮知道一个列表的大小,而不必遍历所有元素.这只是一个总是知道计数的简单方法.
你要记住的第一件事
在C#(和许多其他语言)中,对象/类是参考类型.当你创建Current(或任何其他对象/类)时,你正在做两件事.
当你覆盖一个引用时,你实际上并没有破坏内存,就像你在Post-It-Note上写下地址并写下其他内容一样.你的鞋仍然住在橱柜里..Net中唯一的例外是,如果没有更多的引用留给你的对象/类,垃圾收集器(你的妈妈)会来清理它并扔掉它.
通过调用current = newNode;它似乎我们只是丢失了覆盖它,并丢失了对该节点的所有引用(我们上次跟踪),但我们没有.
要记住的第二件事
投资到关联列表的Clever-Clogs知道我们必须以某种方式跟踪项目,因此他们设想在添加节点时,某些其他节点需要链接到它.
这就是这行代码(current.Next = newNode)的全部内容.确保它实际链接在列表中.是啊,所以我们可以覆盖它,但我们现在知道,当别人被引用的节点其不会被清理.另外,如果我们想再次找到它,我们所要做的就是找到第一个Node并遍历链接.
另一种思考方式
可以把它想象Current成一个桶,在那个桶中你有一个Node,在那个Node上是一张叫做next的纸.
Next/Link每个节点都有Post-It-Note)但你必须记住,你提示的Node仍然在某个地方(实际上,可能还有另一个Node上有它的名字,就像你在它上面写了新的Nodes新名字一样).虽然,我们无法轻易访问它们,但如果我们遍历链接,它们仍然存在
从本质上讲,这就是链接列表的工作方式,它只是一堆节点,其上写有其他节点名称.
我们使用类似工具Current/Temp和First/Head(桶)来跟踪列表,这些工具封装了这个逻辑.有时我们会Count更容易知道我们跟踪的节点数量.尽管如此,链接列表中最重要的部分就是First/Head存储桶.没有它我们就无法遍历这个清单.
Current/Temp 在您的原始方法中,只是让我们很容易找到最后一个节点,因此您不必遍历列表来查找它
例
| 归档时间: |
|
| 查看次数: |
148 次 |
| 最近记录: |