Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/11.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
Data structures 搜索子体的无序列表_Data Structures_Delphi - Fatal编程技术网

Data structures 搜索子体的无序列表

Data structures 搜索子体的无序列表,data-structures,delphi,Data Structures,Delphi,在我的Delphi2007数据库应用程序中,我有一个世代列表。每一代都有一个定价模板列表,每个模板都是一组值。在应用程序中,用户可以创建行项目,并从任何一代中分配定价模板。新一代是通过克隆现有的一代而创建的。因此,用户只需创建第一代,然后克隆它,并且只需在新一代中更改所需的定价模板值。这些代(和定价模板)由originid连接。即,Generation1的originid为零,generation2的originid指向Generation1’id等。此外,用户可以从现有的任何一代创建新一代。即

在我的Delphi2007数据库应用程序中,我有一个世代列表。每一代都有一个定价模板列表,每个模板都是一组值。在应用程序中,用户可以创建行项目,并从任何一代中分配定价模板。新一代是通过克隆现有的一代而创建的。因此,用户只需创建第一代,然后克隆它,并且只需在新一代中更改所需的定价模板值。这些代(和定价模板)由originid连接。即,Generation1的originid为零,generation2的originid指向Generation1’id等。此外,用户可以从现有的任何一代创建新一代。即,generation3的源可以是Generation1。现在,用户需要一个刷新功能,在该功能中,用户可以将定价模板从一代更新到任何其他代(如果已“连接”)。即,如果它们通过源id连接(不一定通过直接连接。即,如果源生成的源id直接指向目标的id或目标的任何直接子项,或目标子项的任何子项..等等)。请参见下面的描述

在这种情况下,从源中搜索目标的最佳方法(算法/数据结构)是什么

提前谢谢大家,
普拉迪普


GenerationName--Id--OriginID

第1代--100--0代
第2代--101--100(从第1代克隆而来)
第3代--102--100(从第1代克隆而来)
第4代-103-102(从第3代克隆而来)
第5代——104代——101代(从第2代克隆而来)


在这里,用户可以从第1代更新到第3代(第1代)第三代) 或第4代(第1代)第三代第4代)或第5代(第1代第二代第5代)因为它们是连接的。但是第3代到第5代是不允许的,因为它们之间没有链接。

在我看来,使用
树数据结构是解决此类问题的最佳方法

来到DelphiIDE,您可以使用
TTreeView
组件来实现此目的

使用
TTreeView
component将数据放入树结构。有关TTreeView的教程


要在TTreeView中进行搜索,请通过。

要确定是否可以将一代升级到另一代,我将使用类似的功能。这里的gen是一个结构,您已经加载了几代,可以通过Id查找它们

function canUpgrade(fromId, toId: integer) : boolean;
var
  id : integer;
begin
  Result := false;
  id := toId;
  while id<>0 do
  begin
    if gen[id].originId=fromId then
    begin
      Result := true;
      Break;
    end
    else
    begin
      id := gen[id].originId;
    end;
  end;
end;
函数canUpgrade(fromId,toId:integer):布尔;
变量
id:整数;
开始
结果:=假;
id:=toId;
而id0可以
开始
如果gen[id].originId=fromId,则
开始
结果:=真;
打破
结束
其他的
开始
id:=gen[id]。原始id;
结束;
结束;
结束;