Data structures 搜索子体的无序列表
在我的Delphi2007数据库应用程序中,我有一个世代列表。每一代都有一个定价模板列表,每个模板都是一组值。在应用程序中,用户可以创建行项目,并从任何一代中分配定价模板。新一代是通过克隆现有的一代而创建的。因此,用户只需创建第一代,然后克隆它,并且只需在新一代中更改所需的定价模板值。这些代(和定价模板)由originid连接。即,Generation1的originid为零,generation2的originid指向Generation1’id等。此外,用户可以从现有的任何一代创建新一代。即,generation3的源可以是Generation1。现在,用户需要一个刷新功能,在该功能中,用户可以将定价模板从一代更新到任何其他代(如果已“连接”)。即,如果它们通过源id连接(不一定通过直接连接。即,如果源生成的源id直接指向目标的id或目标的任何直接子项,或目标子项的任何子项..等等)。请参见下面的描述 在这种情况下,从源中搜索目标的最佳方法(算法/数据结构)是什么 提前谢谢大家,Data structures 搜索子体的无序列表,data-structures,delphi,Data Structures,Delphi,在我的Delphi2007数据库应用程序中,我有一个世代列表。每一代都有一个定价模板列表,每个模板都是一组值。在应用程序中,用户可以创建行项目,并从任何一代中分配定价模板。新一代是通过克隆现有的一代而创建的。因此,用户只需创建第一代,然后克隆它,并且只需在新一代中更改所需的定价模板值。这些代(和定价模板)由originid连接。即,Generation1的originid为零,generation2的originid指向Generation1’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;
结束;
结束;
结束;