Род Стивенс

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

а выполнение каких-либо операций (например, печати или вывода не дис­плей) для всех элементов списка.

Для управления подобным списком вы можете изменить простую схему, пред­ставленную в предыдущем разделе. Когда удаляется элемент из середины списка, оставшиеся элементы сдвигаются на одну позицию, запол­няя образовавшийся промежуток. Это показано на рис. 2.1, IaMcIdIe где из списка удаляется второй элемент, а третий, четвертый и пятый элементы сдвигаются влево, занимая свободный участок.

Удаление элемента массива подобным способом может занимать много времени, особенно если этот элемент находится в начале списка. Чтобы удалить первый элемент массива, содержащего 1000 записей, необходимо сдвинуть 999 элементов на одну позицию влево. Гораздо быстрее удалять элементы при помощи простой схемы сборки мусора.

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

const

GARBAGE_VALUE=-32767;

// Пометка элемента как ненужного.

procedure RemoveFromList(position : Integer);

begin

List^[position] := GARBAGE_VALUE; end;

И соответственно для динамических массивов: const

GARBAGE_VALUE=-32767 ;

// Понатка элемента как нещ'шого.

procedure RemoveFromList(position : Integer);

begin

List[position] := GARBAGE_VALUE;

еnd;

Если элементы списка - это структуры, определенные оператором Туре, то можно добавить к ним новое поле IsGarbage. При удалении элемента из списка значение поля IsGarbage устанавливается в True.

type

MyRecord = record

Name : String[20]; 11 Данные.

IsGarbage : Boolean; // Является ли элемент ненужным?

end;

// Пометка элемента как ненужного.

procedure RemoveFromList(position : Integers);

begin

List"[position].IsGarbage := true; end;

И соответственно для динамических массивов: type

MyRecord = record

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

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