Sortowanie listy jednokierunkowej

0

Mam procedure która sortuje według nazwy listę jednokierunkową.
Problem polega na tym że jak dodam procedure wyświetl która wyświetla całą liste do StringGrida i skompiluje program to się wiesza ;(

Oto kod procedury sortowania:

procedure TForm1.Button3Click(Sender: TObject);
  var
    prev,wsk: plist;
  begin
    for i:=1 to licz-1 do
      begin
      prev:=first;
      for j:=1 to licz-1 do
        begin
          if (prev^.nazwa>prev^.next^.nazwa) then
            begin
              wsk:=prev;
              prev:=prev^.next;
              prev^.next:=wsk;
            end;
          prev:=prev^.next;
        end;
      end;
      wyswietl;
  end;

A to kod procedury wyświetl:

procedure Tform1.wyswietl;
  var
    prev: plist;
  begin
    SG1.RowCount:=licz+1;
    SG1.ColCount:=6;
    SG1.FixedRows:=1;
    SG1.FixedCols:=1;
    SG1.Cells[0,0]:='Nr';
    SG1.Cells[1,0]:='Data';
    SG1.Cells[2,0]:='Nazwa';
    SG1.Cells[3,0]:='Godzina';
    SG1.Cells[4,0]:='Kategoria';
    SG1.Cells[5,0]:='Wiek';
    prev:=first;
    licz:=0;
    while prev<> nil do
      begin
        inc(licz);
        SG1.Cells[0,licz]:=IntToStr(prev^.nr);
        SG1.Cells[1,licz]:=prev^.data;
        SG1.Cells[2,licz]:=prev^.nazwa;
        SG1.Cells[3,licz]:=prev^.godzina;
        SG1.Cells[4,licz]:=prev^.kat;
        SG1.Cells[5,licz]:=prev^.wiek;
        prev:=prev^.next;
      end;
  end;

Proszę pomóżcie...

0

Użyj debugera. Podejrzewam, że problem tkwi w deklaracji listy. Spróbuj zadeklarować ją jako zmienną globalną.

0

jeśli się zawiesza bez wyrzucenia błędu tzn że pewnie się zapętla, a zapętlić się może tylko w while..do. najwyraźniej warunek "prev<>nil" jest zawsze true.

1 użytkowników online, w tym zalogowanych: 0, gości: 1