В связных списках последовательный поиск выполняется точно так же, как и в массивах. Тем не менее, элементы проходятся не по индексу, а по указателю Next. Для класса TtdSingleLinkList, описанного в главе 3, можно разработать две следующих функции: первая - для выполнения поиска по несортированному связному списку, и вторая - по отсортированному. Функции просто указывают, найден ли искомый элемент. В случае, если элемент найден, список будет установлен в позицию искомого элемента. В функции для отсортированного списка курсор будет установлен в позицию, где должен находиться искомый элемент, чтобы список оставался отсортированным.

Листинг 4.8. Последовательный поиск в однонаправленном связном списке

function TDSLLSearch(aList : TtdSingleLinkList;
altem : pointer;
aCompare : TtdCompareFunc) : boolean;
begin with aList do begin MoveBeforeFirst;
MoveNext;
while not IsAf t er Last do begin
if (aCompare (Examine, altem) = 0) then begin
Result := true;
Exit;
end;
MoveNext;
end;
end;
Result := false;
end;
function TDSLLSortedSearch(aList : TtdSingleLinkList;
altem : pointer;
aCompare : TtdCompareFunc) : boolean;
var
CompareResult : integers-begin with aList do begin MoveBeforeFirst;
MoveNext;
while not isAf terLast do begin CompareResult := aCompare(Examine, altem);
if (CompareResult >= 0) then begin
Result := (CompareResult = 0);
Exits-end;
MoveNext;
end;
end;
Result := false;
end;

Соответствующие функции для класса TtdDoubleLinkList будут точно такими же.

Массивы2 || Оглавление || Бинарный поиск


Фундаментальные алгоритмы и структуры данных в Delphi



Новости за месяц

  • Май
    2019
  • Пн
  • Вт
  • Ср
  • Чт
  • Пт
  • Сб
  • Вс