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

UptoLike

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

5
1 Класс «Динамический массив»
Сформулируем основные требования к классу «Динамический массив». Объ-
екты этого класса должны вести себя как массивы, т.е. представлять собой набор
элементов, доступ к которым осуществляется по индексу. Размер такого массива
задается при создании объекта и может меняться в процессе работы программы.
Договоримся также, что индексация будет производиться с нуля.
Как
и в случае класса «Очередь», будем обозначать тип элементов динамиче-
ского масссива через DataType. Например, динамический массив целых помес-
тим в модуль IntArray и положим DataType=integer. Класс динамического
массива назовем DynArray. При использовании в программе динамических мас-
сивов с элементами разных типов будем уточнять имя типа именем модуля:
IntArray.DynArray или
RealArray.DynArray.
1.1 Предварительный интерфейс класса «Динамический массив»
Составим предварительный вариант интерфейса класса DynArray:
type
DynArray=class
public
constructor Create(n: integer);
destructor Destroy;
procedure Resize(newsize: integer);
procedure Reserve(newcap: integer);
function Size: integer;
function Capacity: integer;
procedure Add(x: DataType);
procedure TrimToSize;
function GetItem(i: integer): DataType;
procedure SetItem(i: integer; x: DataType);
end;
Конструктор Create создает динамический массив с n элементами, индек-
сируемый от нуля, деструктор Destroy разрушает его. Функция Size возвраща-
ет количество элементов в
массиве, процедура Resize устанавливает количество
элементов равным newsize, а процедура Add добавляет элемент x в конец мас-
сива, увеличивая размер массива на 1. Функция GetItem(i) возвращает значе-
ние i-го элемента массива, а процедура SetItem(i,x) устанавливает значение
i-го элемента массива равным x; если индекс i находится вне диапазона
0..Size-1, то
генерируется исключение.
Как уже говорилось, размер динамического массива может постоянно ме-
няться по ходу работы программы. Например, при добавлении элемента размер
увеличивается на 1. Задумаемся, однако, как должен быть реализован метод Re-