Род Стивенс

Книги → Delphi. Готовые алгоритмы → Глава 2. Списки

С помощью класса TLinkedList выполнить эту операцию можно гораздо бы­стрее, применяя другие схемы доступа. Он использует локальную переменную CurrentCell для отслеживания позиции в списке. Получение значения текущей ячейки возможно с помощью функции Currentltem. Процедуры MoveFirst и MoveNext позволяют основной программе устанавливать текущую позицию. Функция EndOfList возвращает значение True, когда текущая позиция дости­гает конца списка и пременная CurrentCell указывает на nil.

В следующем коде показана процедура MoveNext.

procedure TLinkedList.MoveNext;

begin

// Если текущая ячейка не определена, то действия не производятся.

if (CurrentCellonil) then

CurrentCell := CurrentCell.NextCell;

end;

С помощью этих процедур главная программа может обратиться к любому эле­менту списка, используя следующий код. Он немного сложнее предыдущего, но гораздо эффективнее. Вместо того чтобы исследовать N * (N - 1) / 2 элементов для обращения к каждой ячейки в списке из N элементов, данный код не исследу­ет ни одного. Если список состоит из 1000 элементов, это экономит практически полмиллиона шагов.

the_list.MoveFirst

while (not the_list.EndOfList) do

begin

// Какие-то действия с the_list.Currentltem.

the_list.MoveNext

end;

Программа LList2 использует эти новые методы для управления связанным списком. Она аналогична программе Llistl, исключение составляет только более эффективное обращение к элементам списка. При исследовании этой программой маленьких списков разница незаметна, но при исследовании больших данная вер­сия класса TLinkedList более эффективна. ,

Разновидности связанных списков

Связанные списки используются во многих алгоритмах, и вы будете встречать­ся с ними на протяжении всей книги. В следующих разделах рассматривается несколько специальных разновидностей связанных списков.

Циклические связанные списки

Вместо того, чтобы устанавливать поле NextCell последнего элемента спис­ка в nil, нужно сделать так, чтобы оно указывало на первый элемент списка, об­разуя циклический список (circular list), как показано на рис. 2.7.

Циклические списки используются, когда нужно обходить набор элементов в бесконечном цикле. На каждом шаге цикла программа просто перемещает указа­тель на следующую ячейку списка. Допустим, имеется циклический список элемен­тов, содержащих названия дней недели. В этом случае программа может перечис­лять дни месяца, используя следующий код:

// Формирование списка и т.д.

// Печать календаря для какого-нибудь месяца.

← предыдущая следующая →

Страницы раздела: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24

Публикация компанией Dropbox кода Zulip – средства общения для IT-разработчиков

20.11.2015
Одной из одобрительно встреченных программистами инициатив, реализующихся в рамках акции Hack Week, стала публикация исходного кода приложения Zulip – веб-приложения для общения между собой разработчиков в сфере IT-технологий.

Объединение ОС Android и Chrome

17.11.2015
Слухи об объединении двух крупнейших ОС компании Google, Android и Chrome, гуляют по Интернету уже более 5 лет, но до сих пор этого не случилось, хотя очевидно, что с течением времени эти ОС становятся всё более похожими: так, в последнее время появилось немало Android-устройств, к которым прилагаются клавиатуры, а Chrome OS «научилась» работать с сенсорными экранами.

Конференция Linux Piter 2015

15.11.2015
Уже почти через неделю в Санкт-Петербурге впервые в истории пройдёт конференция, посвящённая проблемам свободного программного обеспечения – Linux Piter 2015.