Род Стивенс

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

// Создание нового массива.

GetMem(new_array,(Numltems+l)*SizeOf(Integer));

// Копирование элементов в новый массив. for i := 1 to Numltems do

new_arrayA [ i] : = List*[i]; j j Сохранение нового элемента. new_array [Numltems+l] := new_item;

j j Освобождение ранее выделенной памяти. if (NumItems>0) then FreeMem(List);

// Установка указателя на новый массив.

List := new_array;

j j Обновление размера.

Numltems := Numltems+l; end;

Для динамических массивов Delphi 4 алгоритм добавления элемента в конец списка будет еще проще - при изменении размера массива программа автомати­чески создает новый и копирует в него содержимое старого.

List : Array Of Integer; // Массив.

procedure Addltem(new_item : Integer);

begin

// Увеличиваем размер массива на 1 элемент. SetLength(List, Length(List )+1);

// Сохранение нового элемента.

List[High(List)] := new_item;

end;

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

Чтобы размер массива изменялся не так часто, при его увеличении можно вставлять дополнительные элементы, например, по 10 элементов вместо 1. Когда вы будете впоследствии прибавлять новые элементы к списку, они разместятся в уже существующих в массиве неиспользованныхячейках, не увеличивая размер массива. Новое приращение размера потребуется, только если пустые ячейки за­кончатся.

Точно так же можно избежать изменения размера каждый раз при удалении элемента из списка. Подождите, пока в массиве не накопится 20 неиспользован- ных ячеек, и только потом уменьшайте его размер. При этом нужно оставить 10 пус- тых ячеек для того, чтобы можно было добавлять новые элементы, не изменяя раз­мер массива.

Обратите внимание, что максимальное число неиспользованных ячеек (20) должно быть больше, чем минимальное (10). Это сокращает количество измене­ний размера массива при добавлении или удалении элементов.

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

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

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