Основы программирования. Динамические массивы. Списки. Ассоциативные массивы. Деревья. Хеш-таблицы - 13 стр.

UptoLike

Составители: 

15
a.Sort;
a.Reverse;
writeln(a.ToString);
b:=DynArray.Create(a.Count);
for i:=0 to a.Count-1 do
b[i]:=a[i];
b.ForEach(MultBy2);
writeln(b.ToString);
b.Destroy;
a.Destroy;
end.
Следует обратить внимание на стратегию создания массивов. Массив a соз-
дается вызовом конструктора DynArray.Create(0,10): вначале он имеет ну-
левой размер и под него резервируется память на 10 элементов. Использование
данного конструктора означает, что размер массива будет изменяться по ходу ра-
боты программы и
в большинстве случаев не превысит 10 элементов. Действи-
тельно, мы вводим элементы до нулевого и добавляем их в массив, используя
функцию Add, увеличивающую размер массива на 1. Первый раз перераспределе-
ние памяти произойдет, если размер массива станет больше 10, второй раз
больше 20 и т.д. По окончании заполнения массива a мы вызываем метод
a.TrimToSize
, что означает, что размер массива a далее в программе меняться
не будет. После этого мы создаем массив b, в который копируем содержимое мас-
сива a. Поскольку далее размер массива b меняться не будет, то для его создания
мы используем конструктор DynArray.Create(a.Count), выделяющий па-
мять, совпадающую с размером массива.
2 Класс «Список» на базе двусвязного списка
Сформулируем основные требования к классу «Список». Объекты этого
класса представляют собой последовательности элементов. По элементам списка
должен обеспечиваться последовательный проход в обоих направленияхот пер-
вого элемента к последнему и от последнего к первому. В отличие от массива, к
элементам списка нет доступа по индексу, однако предоставляется возможность
вставки и удаления
элементов в начале, середине и конце списка.
Очевидно, что в качестве реализации списка мы выберем структуру данных
«Линейный односвязный список». Напомним, что она состоит из элементов вида
type
PNode=^Node;
Node=record
data: DataType;