繁体   English   中英

在C#中建立链表

[英]Building a linked list in c#

我目前正在编写一种算法,以在c#中构建对象链。 对象的顺序很重要,因为它们表示特定顺序的事件序列。 对象A执行一个动作,并包含对对象B的引用,对象B执行和动作等等。 我的问题是对象的初始状态是无序的。 我有包含每个对象和系列中下一个对象名称的字典。 我正在努力的是设计一种快速算法来“分类”它们。 我最初的假设是遍历字典,对于每个值,寻找一个与之匹配的键,并将这两个对象添加到另一个列表中。 存在一些问题:1.确定链中的第一个对象。 2.使用嵌套循环的复杂度很高。 3.确定要使用哪些c#对象来容纳对象链。

我希望有人对排序算法有经验,可以做到这一点,或者做过类似的事情。 感谢您提供所有意见和帮助。

您对帖子的最后评论很重要-有多个工作链。 这不是分类练习; 这是一个图形构建练习。

您已经有一个包含每个对象及其后继对象的哈希。 我假设一个对象可以具有多个后继对象,并且同样可以具有多个前继对象(只是为了足够通用)。 使用每个对象及其前身构建另一个哈希,从这两个对象中,您可以轻松显示所需的任何图表或关系树。

通过遍历后继哈希来构建Predecessors哈希。 对于具有后继者B的每个后继者密钥A,插入显示前任者A.O(n)的前任者密钥B。

有了这两个哈希,您可以编写函数以递归方式为任何给定对象构造完整的父级(前辈)或子级(后代)树。

编辑:请注意,如果您想知道哪些作业是原始的(没有前任)或终端的(没有后任),则为了构建完整的显示,您将不得不分别跟踪那些作业,例如两个数组命名为“原件和端子”。 您可以在遍历原始后继者哈希值的过程中构建终端,以构建前任者,并通过前任过程最后一次遍历来构建原件,查找没有前任者的条目。 但是,如果您只想满足有关单个对象的特定查询,则后继者和前任者应该这样做。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM