Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
List 一种数据结构,可以表示序列中的多个分支路径_List_Data Structures_Graph - Fatal编程技术网

List 一种数据结构,可以表示序列中的多个分支路径

List 一种数据结构,可以表示序列中的多个分支路径,list,data-structures,graph,List,Data Structures,Graph,我试图实现一个输入输出系统的模型,其中有几个不同的“计算器”对输入进行不同的计算,并返回一个或多个输出(在我的代码中,每个计算器都是一个类的实例)。它类似于逻辑门系统,只是这里每个计算器可能产生两个或多个输出(数据比数字更复杂) 对于该系统,将至少有一个只接受用户输入的计算器。系统将查找它找到的第一个只接收用户输入的计算器(它已经被标记为用户输入),然后从那里开始。然后,它产生的任何输出都将作为输入传递给其他计算器,以便进行更多的计算 对于任何非启动计算器,它将不会运行,直到指向它的所有计算器都

我试图实现一个输入输出系统的模型,其中有几个不同的“计算器”对输入进行不同的计算,并返回一个或多个输出(在我的代码中,每个计算器都是一个类的实例)。它类似于逻辑门系统,只是这里每个计算器可能产生两个或多个输出(数据比数字更复杂)

对于该系统,将至少有一个只接受用户输入的计算器。系统将查找它找到的第一个只接收用户输入的计算器(它已经被标记为用户输入),然后从那里开始。然后,它产生的任何输出都将作为输入传递给其他计算器,以便进行更多的计算

对于任何非启动计算器,它将不会运行,直到指向它的所有计算器都完成了自己的运行(以便准备好处理所有输入)

每个输入和输出的数量是任意的,但数量非常小(每个不超过4个输入和4个输出)。这样一个系统可以分支到多个计算器,但是最终的计算器总是会产生一个输出,这就是最终的结果。每一个输出都将精确到一个计算器(除了最后一个)

是否有一个类似于图形的数据结构可以应用我描述的内容?该图应该像链表一样表示一个序列(因为您要按照特定的顺序进行计算),但它也像一棵树,因为每个节点可能指向多个节点,而反过来,多个节点可能指向它


我在考虑给每个计算器一个“下一步”数据的内部列表,它指的是所有输出都将映射到的计算器。是否还有其他方法可以启动此设计?

您建议的类似于图形的结构是图形的邻接列表表示形式。当我编写这样的代码时,我发现让使用者指向生产者,然后使用类似于a的访问模式从输出中递归地向后工作是很方便的。

您所建议的类似于图形的结构是图形的邻接列表表示。当我编写这样的代码时,我发现让消费者指向生产者,然后使用类似于a的访问模式从输出中递归地向后工作是很方便的。

我想我的思路是正确的,因为我也在考虑从结尾开始,然后再回头看它的输入(生产者)并递归检查它们是否“完成”。但就以编程方式映射输入而言,执行Calc->SetInputs(…)是否与Calc->SendOutputsTo(…)一样直观?但是如果向后递归比一步一步地向前更容易实现,我就坚持前者。@JustChris如果拓扑排序使用显式堆栈,我不会说它容易得多。在堆栈/队列上操作基本上是一种清洗,但是向后操作只需要一个“完成”标志,而向前操作需要一个度计数。我想我的思路是正确的,因为我也在考虑从末尾开始,然后回顾它的输入(生产者),递归地检查它们是否“完成”。但就以编程方式映射输入而言,执行Calc->SetInputs(…)是否与Calc->SendOutputsTo(…)一样直观?但是如果向后递归比一步一步地向前更容易实现,我就坚持前者。@JustChris如果拓扑排序使用显式堆栈,我不会说它容易得多。在堆栈/队列上操作基本上是一种清洗,但是向后工作只需要一个“完成”标志,而向前工作需要一个度数。