Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.12.2008, 19:54   #1
new_sergei
Новичок
Джуниор
 
Регистрация: 18.12.2008
Сообщений: 1
По умолчанию сортировка динамического списка

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

Есть корректно построенный динамический однонаправленный список. В списке содержатся записи такого типа

Код:
 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;
new_sergei вне форума Ответить с цитированием
Старый 19.12.2008, 00:36   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Жаль, тёзка, что нет времени и сил помочь Вам написать код.. ;-(
но хоть на словах расскажу....

Вы мыслите правильно. Всё точно так же. Только,
для того. чтобы поменять местами два элемента динамического односвязного списка, надо поменять ссылки на них в предыдущих элементах и поменять местами ссылки на следующий элемент в самих элементах. Пример:
1 -> 2 -> 3 -> 4 -> 5
если мы хотим поменять местами 5 и 3-й элементы, то мы:
во 2-м меняем ссылку с третьего на пятый
в 4-м меняем ссылку с пятого на третий.
в третьем ссылку меняем на NIL (берём ссылку из 5-го)
в пятом ставим ссылку на четвёртый.
всё.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Быстрая сортировка списка ManU Паскаль, Turbo Pascal, PascalABC.NET 2 08.12.2008 11:57
Сортировка списка... Arkuz Помощь студентам 2 11.05.2008 00:53
Сортировка списка... Arkuz Компоненты Delphi 4 03.05.2008 23:21
Заполнение динамического списка из файла KORT Помощь студентам 2 01.05.2007 22:28
Сортировка списка Александр из Перми Microsoft Office Excel 3 27.01.2007 22:46