Witam,
Jak w temacie, mój wykładowca zażądał sobie funkcję, która wstawia element do listy 'w odpowiednim miejscu', czyli sortuje przy okazji. Kod wygląda następująco:
type
pElem = ^TElem;
TElem = record
data: TRekord;
next: pElem;
prev: pElem;
end;
TList = record
head: pElem;
tail: pElem;
pos: pElem;
end;
procedure pushSortByAgeInc(var list: TList; var elem: pElem);
var temp: pElem;
begin
if (list.head = nil) then
begin
addElemToEmptyList(list, elem);
end
else
begin
temp := list.head;
while (temp^.next <> nil) AND (temp^.data.age <= elem^.data.age) do
begin
temp := temp^.next;
end;
if (temp^.next = nil) AND (temp^.data.age <= elem^.data.age) then
pushBack(list, elem)
else if (temp^.prev = nil) then
pushFront(list, elem)
else
begin
elem^.next := temp;
elem^.prev := temp^.prev;
temp^.prev^.next := elem;
temp^.prev := elem;
end;
end;
end;
Procedura działa jak należy, wstawia element na swoje miejsce, ustawiając go poprawnie względem innych, ale mam jeden problem. Ta procedura jest a) zbyt długa, b) niejasna i robi kilka rzeczy na raz. Ktoś ma jakieś pomysły jak można ją podzielić, ew. pozmieniać nazwy, żeby było ok?