Показать сообщение отдельно
  #1  
Старый 18.12.2008, 19:42
new_sergei new_sergei вне форума
Прохожий
 
Регистрация: 18.12.2008
Сообщения: 1
Репутация: 10
По умолчанию задача на динамические списки

Здравствуйте.

Есть корректно построенный динамический однонаправленный список. В списке содержатся записи такого типа
Код:
  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: Пользуемся тегами!
Ответить с цитированием