⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 table.~pas

📁 《Kylix程序设计》一书中附带的例程源代码
💻 ~PAS
字号:
unit Table;interfacetype  PMyNode = ^TMyNode;  TMyNode = record    Data: Pointer;    Next: PMyNode;  end;  TMyList = class( TObject )  private    Count: Integer;    Node: PMyNode;  public    constructor Create(); overload;    procedure Add( Data: Pointer );    procedure Insert( Data: Pointer; Index: Integer );    procedure Delete( Index: Integer );    function Search( Data: Pointer ): Integer;    procedure Clear();    destructor Destroy(); override;  end;  TSearchFunc = function ( Data: Pointer ): Boolean of object;implementationuses  Point;constructor TMyList.Create();begin  Inherited Create();end;procedure TMyList.Add( Data: Pointer );var  NewNode: PMyNode;  CurrNode: PMyNode;begin  // Create a new node  New( NewNode );  NewNode^.Next := nil;  NewNode^.Data := Data;  // Find the last node of the list  if Node = nil then  begin    // Add the new node    Node := NewNode;    Inc( Count );  end  else  begin    CurrNode := Node;    while CurrNode^.Next <> nil do    begin      CurrNode := CurrNode^.Next;    end;    // Add the new node    CurrNode^.Next := NewNode;    Inc( Count );  end;end;procedure TMyList.Insert( Data: Pointer; Index: Integer );var  NewNode: PMyNode;  CurrNode: PMyNode;  i: Integer;begin  if Index = -1 then  // Add it at the end of the list  begin    Add( Data );  end  else if Index = 0 then  // Insert it at the first position  begin    // Create a new node    New( NewNode );    NewNode^.Next := Node;    NewNode^.Data := Data;    // Insert the new node    Node := NewNode;    Inc( Count );  end  else  // Insert it at the specific position  begin    if Count <= Index then  // If the position doen not exist    begin      Add( Data );      exit;    end    else  // Find the specific position given by Index    begin      CurrNode := Node;      for i := 0 to Index - 2 do      begin        CurrNode := CurrNode^.Next;      end;      // Create a new node      New( NewNode );      NewNode^.Next := CurrNode^.Next;      NewNode^.Data := Data;      // Insert the new node      CurrNode^.Next := NewNode;      Inc( Count );    end;  end;end;procedure TMyList.Delete( Index: Integer );var  CurrNode, DeletedNode: PMyNode;  i: Integer;begin  if Index = -1 then  // Delete all  begin    while Node <> nil do    begin      DeletedNode := Node;      Node := Node^.Next;      Dispose( DeletedNode );      DeletedNode := nil;    end;    Count := 0;  end  else if Index = 0 then  // Delete the first position  begin    if Count > 0 then    begin      // Delete the first node      DeletedNode := Node;      Node := Node^.Next;      Dispose( DeletedNode );      DeletedNode := nil;      Dec( Count );    end;  end  else  // Delete it at the specific position  begin    if Count <= Index then  // If the position doen not exist    begin      exit;    end    else  // Find the specific position given by Index and delete it    begin      CurrNode := Node;      for i := 0 to Index - 2 do      begin        CurrNode := CurrNode^.Next;      end;      // Delete it      DeletedNode := CurrNode^.Next;      CurrNode^.Next := DeletedNode^.Next;      Dispose( DeletedNode );      DeletedNode := nil;      Dec( Count );    end;  end;end;function TMyList.Search( Data: Pointer ): Integer;var  CurrNode: PMyNode;  SearchFunc: TSearchFunc;begin  Result := 0;  // Find the specific data  CurrNode := Node;  while CurrNode <> nil do  begin    SearchFunc := Point.TMyData.Search;    if SearchFunc( Data ) then  // Success    begin      // break;      exit;    end    else    begin      CurrNode := CurrNode^.Next;      Inc( Result );    end;  end;  Result := -1;end;procedure TMyList.Clear();begin  Delete( -1 );end;destructor TMyList.Destroy();begin  Clear();  Inherited Destroy();end;end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -