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

📄 dtstlist.dpr.~20~

📁 很经典的Delphi数据结构算法包,支持Delphi 1.0~ 7.0 和 Delphi 2006 ~ 2007 的win32程序.算法库稳定快速
💻 ~20~
📖 第 1 页 / 共 3 页
字号:
            WriteLog('...iterating original');
            WriteLog('...(should read eight,five,four,nine,one,seven,six,ten,three,two)');
            Iterate(PrintStrs, false, nil);
          finally
            NewDList.Free;
          end;{try..finally}
          Empty;
          WriteLog('...end of test 2');
        end;

      WriteLog('Third test: various basic navigation tests');
      with DList do
        begin
          WriteLog('...inserting names of numbers');
          for i := 1 to 10 do
            InsertSorted(EZStrNew(NumToName(i)));
          WriteLog('...first element');
          Cursor := Next(SetBeforeFirst);
          WriteLog(PEZString(Examine(Cursor))^);
          WriteLog('...last element');
          Cursor := Prev(SetAfterLast);
          WriteLog(PEZString(Examine(Cursor))^);
          WriteLog('...using Next to move forward from start');
          WriteLog('...(should read eight,five,four,nine,one,seven,six,ten,three,two)');
          Cursor := Next(SetBeforeFirst);
          while not IsAfterLast(Cursor) do
            begin
              WriteLog(PEZString(Examine(Cursor))^);
              Cursor := Next(Cursor);
            end;
          WriteLog('...using Prev to move backwards from end');
          WriteLog('...(should read two,three,ten,six,seven,one,nine,four,five,eight)');
          Cursor := Prev(SetAfterLast);
          while not IsBeforeFirst(Cursor) do
            begin
              WriteLog(PEZString(Examine(Cursor))^);
              Cursor := Prev(Cursor);
            end;
          Empty;
          WriteLog('...end of test 3');
        end;

      WriteLog('Fourth test: miscellaneous');
      with DList do
        begin
          WriteLog('...inserting names of numbers');
          for i := 1 to 10 do
            InsertSorted(EZStrNew(NumToName(i)));
          WriteLog('...replace four with eleven');
          Cursor := Next(Next(Next(SetBeforeFirst)));
          S := PEZString(Replace(Cursor, EZStrNew(NumToName(11))));
          WriteLog('...string returned ' + S^);
          EZStrDispose(S);
          WriteLog('...iterate');
          WriteLog('...(should read eight,eleven,five,nine,one,seven,six,ten,three,two)');
          Iterate(PrintStrs, false, nil);
          Empty;
          WriteLog('...end of test 4');
        end;

      WriteLog('Fifth test: megatest');
      with DList do
        begin
          WriteLog('...inserting 10,000 random strings');
          StartTime := GetTickCount;
          for i := 1 to 10000 do
            begin
              SavedS := RandomStr(10+Random(15));
              InsertSorted(EZStrNew(SavedS));
            end;
          WriteLog(IntToStr(GetTickCount));
          WriteLog(IntToStr(StartTime));
          WriteLog('...reading strings, checking sequence');
          SavedS := '';
          Cursor := Next(SetBeforeFirst);
          while not IsAfterLast(Cursor) do
            begin
              S := PEZString(Examine(Cursor));
              if (SavedS >= S^) then
                WriteLog('sequence error');
              SavedS := S^;
              Cursor := Next(Cursor);
            end;
          WriteLog('...end of test 5');
        end;
    finally
      DList.Free;
    end;

    WriteLog('-----------SKIP LIST-----------');
    SkipList := nil;
    try
      WriteLog('First test: insertion & deletion');
      SkipList := TSkipList.Create(true);
      with SkipList do
        begin
          Compare := EZStrCompare;
          DupData := EZStrDupData;
          DisposeData := EZStrDisposeData;
          WriteLog('...inserting names of numbers');
          for i := 1 to 10 do
            Insert(Cursor, EZStrNew(NumToName(i)));
          WriteLog('...iterating them');
          WriteLog('...(should read eight,five,four,nine,one,seven,six,ten,three,two)');
          Iterate(PrintStrs, false, nil);
          WriteLog('...delete last, third from last; iterate');
          WriteLog('...(should read eight,five,four,nine,one,seven,six,three)');
          Cursor := Prev(SetAfterLast);
          Erase(Cursor);
          Cursor := Prev(Prev(SetAfterLast));
          Erase(Cursor);
          Iterate(PrintStrs, false, nil);
          WriteLog('...emptying; iterate (should be nothing)');
          Empty;
          Iterate(PrintStrs, false, nil);
          WriteLog('...end of test 1');
        end;

      WriteLog('Second test: cloning, splitting and joining');
      with SkipList do
        begin
          WriteLog('...inserting names of numbers');
          for i := 1 to 10 do
            Insert(Cursor, EZStrNew(NumToName(i)));
          WriteLog('...creating clone');
          NewSkipList := TSkipList.Clone(SkipList, true, Compare);
          try
            WriteLog('...iterating clone backwards');
            WriteLog('...(should read two,three,ten,six,seven,one,nine,four,five,eight)');
            NewSkipList.Iterate(PrintStrs, true, nil);
          finally
            NewSkipList.Free;
          end;{try..finally}
          WriteLog('...splitting original list at "nine" onwards');
          Cursor := SetBeforeFirst;
          for i := 1 to 4 do
            Cursor := Next(Cursor);
          NewSkipList := Split(Cursor);
          try
            WriteLog('...iterating original');
            WriteLog('...(should read eight,five,four)');
            Iterate(PrintStrs, false, nil);
            WriteLog('...iterating split-off list');
            WriteLog('...(should read nine,one,seven,six,ten,three,two)');
            NewSkipList.Iterate(PrintStrs, false, nil);
            WriteLog('...joining split-off list in between eight and five');
            Cursor := Next(SetBeforeFirst);
            Join(NewSkipList);
            NewSkipList := nil;
            WriteLog('...iterating original');
            WriteLog('...(should read eight,five,four,nine,one,seven,six,ten,three,two)');
            Iterate(PrintStrs, false, nil);
          finally
            NewSkipList.Free;
          end;{try..finally}
          Empty;
          WriteLog('...end of test 2');
        end;

      WriteLog('Third test: various basic navigation tests');
      with SkipList do
        begin
          WriteLog('...inserting names of numbers');
          for i := 1 to 10 do
            Insert(Cursor, EZStrNew(NumToName(i)));
          WriteLog('...first element');
          Cursor := Next(SetBeforeFirst);
          WriteLog(PEZString(Examine(Cursor))^);
          WriteLog('...last element');
          Cursor := Prev(SetAfterLast);
          WriteLog(PEZString(Examine(Cursor))^);
          WriteLog('...using Next to move forward from start');
          WriteLog('...(should read eight,five,four,nine,one,seven,six,ten,three,two)');
          Cursor := Next(SetBeforeFirst);
          while not IsAfterLast(Cursor) do
            begin
              WriteLog(PEZString(Examine(Cursor))^);
              Cursor := Next(Cursor);
            end;
          WriteLog('...using Prev to move backwards from end');
          WriteLog('...(should read two,three,ten,six,seven,one,nine,four,five,eight)');
          Cursor := Prev(SetAfterLast);
          while not IsBeforeFirst(Cursor) do
            begin
              WriteLog(PEZString(Examine(Cursor))^);
              Cursor := Prev(Cursor);
            end;
          Empty;
          WriteLog('...end of test 3');
        end;

      WriteLog('Fourth test: miscellaneous');
      with SkipList do
        begin
          WriteLog('...inserting names of numbers');
          for i := 1 to 10 do
            Insert(Cursor, EZStrNew(NumToName(i)));
          WriteLog('...replace four with eleven');
          Cursor := Next(Next(Next(SetBeforeFirst)));
          S := PEZString(Replace(Cursor, EZStrNew(NumToName(11))));
          WriteLog('...string returned ' + S^);
          EZStrDispose(S);
          WriteLog('...iterate');
          WriteLog('...(should read eight,eleven,five,nine,one,seven,six,ten,three,two)');
          Iterate(PrintStrs, false, nil);
          Empty;
          WriteLog('...end of test 4');
        end;

      WriteLog('Fifth test: megatest');
      with SkipList do
        begin
          WriteLog('...inserting 30,000 random strings');
          StartTime := GetTickCount;
          for i := 1 to 30000 do
            begin
              SavedS := RandomStr(10+Random(15));
              Insert(Cursor, EZStrNew(SavedS));
            end;
          WriteLog(IntToStr(GetTickCount));
          WriteLog(IntToStr(StartTime));
          WriteLog('...reading strings, checking sequence');
          SavedS := '';
          Cursor := Next(SetBeforeFirst);
          while not IsAfterLast(Cursor) do
            begin
              S := PEZString(Examine(Cursor));
              if (SavedS >= S^) then
                WriteLog('sequence error');
              SavedS := S^;
              Cursor := Next(Cursor);
            end;
          WriteLog('...end of test 5');
        end;
    finally
      SkipList.Free;
    end;
    repeat
    WriteLog('-----------My Link LIST-----------');
    MyLinkList:=nil;
    try
        WriteLog('MyLinkList test:insertion & deletion');
        MyLinkList:=TLinkList.Create(True);
        MyLinkList.Compare:=TCPPacketCompare;
        MyLinkList.DupData:=TCPPacketDupData;
        MyLinkList.DisposeData:=TCPPacketDisposeData;
        Write('---Inseting Packets');
        for i := 1 to 10 do
            MyLinkList.InsertAfter(NewTcpPacket(IntToStr(i),NumToName(i)));


        MyLinkList.Iterate(PrintPacket,false,nil);

        MyLinkList.SetAfterLast;
        MyLinkList.Prev;
        while not MyLinkList.IsBeforeFirst do
            begin
            WriteLog(PTCPPacket(MyLinkList.Examine)^.TCPPacketHeader);
            MyLinkList.Prev;
            end;
        tmpTCPPacket.TCPPacketHeader:='5';
        if MyLinkList.Search(@tmpTCPPacket) then
            WriteLog('---------'+PTCPPacket(MyLinkList.Examine)^.TCPData+'------'+#13#10);
         WriteLog('...creating clone');
          NewLinkList := TLinkList.Clone(MyLinkList, true,MyLinkList.Compare);
          try
            WriteLog('...iterating clone backwards');
            WriteLog('...(should read ten..one)');
            NewLinkList.Iterate(PrintPacket, true, nil);
          finally
            NewLinkList.Free;
          end;{try..finally}


    finally
        //MyLinkList.Empty;
        MyLinkList.Free;
    end;
    until True;


  finally
    CloseLog;
  end;
end.

⌨️ 快捷键说明

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