![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#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; Последний раз редактировалось Admin, 18.12.2008 в 19:51. |