Род Стивенс

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

var

ptr : PEmpCell;

begin

ptr := top_cell; // Начинает с начала списка.

while (ptronil) do

begin

// Отображает поле EmpName текущей ячейки.

ShowMessage(ptr*.EmpName);

// Переход к следующей ячейке списка.

Ptr := ptr/'.NextCell; end;

end;

Использование указателя на другой объект называется косвенной адресацией, поскольку этот указатель служит для косвенного управления чем-либо. Косвен­ная адресация может быть очень запутанной. Даже в таком простом расположе­нии элементов, как связанный список, иногда сложно запомнить, на какой объект указывает каждая ссылка. В более сложных структурах данных, таких как деревья и сети, указатель может ссылаться на объект, содержащий другой указатель. Если есть несколько указателей и несколько уровней косвенной адресации, то в них мож­но легко запутаться.

Поэтому в книге используются иллюстрации, такие как рис. 2.2, чтобы помочь вам наглядно представить описываемую ситуацию. Многие алгоритмы, использу­ющие указатели, проще объяснить с помощью подобных рисунков.

Добавление элементов

Простой связанный список, изображенный на рис, 2.2, обладает некоторыми важными свойствами. Во-первых, в начало списка очень просто добавлять новые ячейки. Установите значение переменной NextCe 11 для новой ячейки так, чтобы она указывала на текущую вершину списка, затем указатель top_cell на новую ячейку. Рис. 2.3 иллюстрирует эту операцию. Соответствующий код на Delphi для этой операции достаточно прост:

new_cellA.NextCell := top_cell;

top_cell := new_cell;

—ня

Сравните этот код с кодом, который требовался для добавления элемента в спи­сок на базе массива. Там вы должны были перемещать каждый элемент массива на одну позицию, чтобы освободить место для нового элемента. Если список доста­точно длинный, эта операция со сложностью 0(N) может занимать много време­ни. Используя связанный список, можно добавить новый элемент в начало списка всего за два шага.

Так же легко вставить новый элемент и в середину связанного списка. Пред­положим, вы хотите добавить новый элемент после ячейки, на которую указывает переменная afterme. Установите значение переменной NextCell новой ячей­ки равным a ft ег_щеЛ . N ext Cell. Затем установите указатель af t ег_шеЛ. Next- Cell на новую ячейку. На рис. 2.4 показана эта операция. И снова используется простой код Delphi:

Удаление элементов

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

Страницы раздела: 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.