2015-04-18 30 views
-7

我是一个有链接列表的新手,但我需要快速帮助。 我有2个链表。Pascal,Delphi链接列表

TOccurencyNodePtr = ^TOccurencyNode; 
TOccurencyNode = record 
Occurency : integer; 
Next : TOccurencyNodePtr; 
end; 

TIdentifierFoundNodePtr = ^TIdentifierFoundNode; 
TIdentifierFoundNode = record 
Identifiers : string; 
Next  : TIdentifierFoundNodePtr; 
end; 

和全局变量:标识符:字符串和Occurence:整数

最后我需要 例程将它变成像

列表如果标识符是在标识符的名单,然后添加occurence成如果没有将标识符添加到标识符列表并且发生到发生列表中,则发生列表。

请帮助我:((

+7

帮助你的哪些是你的问题,我建议您访问http://stackoverflow.com/help/how- –

+0

我知道怎么做只有树.. –

+0

除了上面的链接,我建议你也参考以下链接:http://stackoverflow.com/help/mcve。StackOverflow是资源一旦你学会了如何使用它 –

回答

2

事情是这样的:??

type 
    TOccurencyNodePtr = ^TOccurencyNode; 
    TOccurencyNode = record 
    Occurency: integer; 
    Next: TOccurencyNodePtr; 
    end; 

    TIdentifierFoundNodePtr = ^TIdentifierFoundNode; 
    TIdentifierFoundNode = record 
    Identifier: string; 
    Next: TIdentifierFoundNodePtr; 
    end; 

var 
    Occurencies: TOccurencyNodePtr = nil; 
    Identifiers: TIdentifierFoundNodePtr = nil; 

procedure AddIdentifierOccurency(const Identifier: string; const Occurrency: Integer); 
var 
    IdentifierNode, LastIdentifierNode: TIdentifierFoundNodePtr; 
    OccurencyNode, LastOccurencyNode: TOccurencyNodePtr; 
begin 
    IdentifierNode := Identifiers; 
    LastIdentifierNode := nil; 
    while (IdentifierNode <> nil) and (IdentifierNode.Identifier <> Identifier) do 
    begin 
    LastIdentifierNode := IdentifierNode; 
    IdentifierNode := IdentifierNode.Next; 
    end; 
    if IdentiferNode = nil then 
    begin 
    New(IdentifierNode); 
    IdentifierNode.Identifier := Identifier; 
    IdentifierNode.Next := nil; 
    if Identifiers = nil then 
     Identifiers := IdentifierNode 
    else 
     LastIdentifierNode.Next := IdentifierNode; 
    end; 

    OccurencyNode := Occurencies; 
    LastOccurencyNode := nil; 
    while (OccurencyNode <> nil) and (OccurencyNode.Occurency <> Occurency) do 
    begin 
    LastOccurencyNode := OccurencyNode; 
    OccurencyNode := OccurencyNode.Next; 
    end; 
    if OccurencyNode = nil then 
    begin 
    New(OccurencyNode); 
    OccurencyNode.Occurency := Occurency; 
    OccurencyNode.Next := nil; 
    if Occurencies = nil then 
     Occurencies := OccurencyNode 
    else 
     LastOccurencyNode.Next := OccurencyNode; 
    end; 
end;