📄 table.~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 + -