Здравствуйте.
Есть корректно построенный динамический однонаправленный список. В списке содержатся записи такого типа
Код:
SamoletPtr = ^Samolet; { ukazatel na tip dannyh samolet }
Samolet = Record { tip dannych samolet }
Tip: String;
God: String;
Rashod: Real;
SledSamolet: SamoletPtr;
end;
Необходимо провести сортитовку этих указателей по алфавиту по полю Tip.
Я пробовал это сделать обычным пузырьком. Если бы это был обычный массив, то проблем бы никаких не было бы. А вот как это сделать через указатели?
Я делал так
Sam1 - указатель на заглавный элемент списка.
SamTek - указатель на текущий элемент списка.
Код:
Procedure SortirovatSamolety;
var
Vspom: SamoletPtr;
SamBol, SamMal: SamoletPtr;
SamBolName, SamMalName:String;
begin
SamBol := Sam1;
if SamBol^.SledSamolet <> Nil then
begin
SamBol := SamBol^.SledSamolet;
{if SamBol^.SledSamolet <> Nil then begin end esli v spiske kak minimum 1 element}
{if SamBol^.SledSamolet^.SledSamolet <> Nil then begin end esli v spiske kak minimum 2 elementa}
while SamBol^.SledSamolet^.SledSamolet <> Nil do {vneshn. cykl ot 1-go do predposlednego elementa}
begin
SamBolName := SamBol^.Tip;
SamMal := SamBol^.SledSamolet;
while SamMal^.SledSamolet <> Nil do {vnutr. cykl ot 2-go do poslednego elementa}
begin
SamMalName := SamMal^.Tip;
if SamBol^.Tip > SamMal^.Tip then
begin
New(Vspom);
Vspom := SamMal;
SamMal := SamBol;
SamBol := Vspom;
Dispose(Vspom);
end;
SamMal := SamMal^.SledSamolet;
end;
SamBol := SamBol^.SledSamolet;
end;
end
else
begin
WriteLn('Sortirovka nevozmozhna: net samoletov');
end;
while SamTek^.SledSamolet <> Nil do
begin
end;
end;
Admin: Пользуемся тегами!