В связных списках последовательный поиск выполняется точно так же, как и в массивах. Тем не менее, элементы проходятся не по индексу, а по указателю 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



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

  • Июнь
    2020
  • Пн
  • Вт
  • Ср
  • Чт
  • Пт
  • Сб
  • Вс
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31