
24.12.2009, 02:09
|
|
Новичок
Регистрация: 29.11.2009
Сообщений: 4
Провел на форуме: 13349
Репутация:
0
|
|
Есть еще прога, но она не из лёгких, и я заранее благодорю любого, кто хоть чем-то поможет
Имеется структура данных DynamicArray для динамического массива целых чисел.
Код:
struct DynamicArray
{ /* Память для хранения значений массива */
int* m_ArrayData;
/* Объем выделенной памяти (в ячейках массива) */
int m_ArrayCapacity;
/* Количество ячеек фактически занятых массивом */
int m_ArrayCurrentSize;
};
Динамический массив – это структура данных для хранения элементов в последовательности нефиксированного размера, которая самостоятельно следит за объемом выделенной памяти по мере добавления элементов. Динамический массив выделяет память с небольшим запасом для будущих элементов. Если места в массиве больше нет, а пользователь продолжает добавлять элементы в массив, то структура данных автоматически выделяет вдвое больший блок, чем было выделено ранее. Подобная идея лежит в основе популярного контейнера std::vector в C++. Разработайте следующие вспомогательные функции, а также тестовую программу, использующую функции (сначала идет прототип функции, а потом ее предназначение):
Код:
void DynamicArrayInit ( struct DynamicArray* _pArray, int _initialSize );
Инициализирует динамический массив – выделяет необходимый объем памяти. устанавливает занятый начальный размер, который не может быть отрицательным
Код:
void DynamicArrayDestroy ( struct DynamicArray* _pArray );
Освобождает память, занятую массивом
Код:
int DynamicArrayGetCellValue ( const struct DynamicArray* _pArray, int _cellIndex );
Возвращает текущее значение в интересующей ячейке. Индекс не может быть вне интервала [0 : m_ArrayCurrentSize - 1)
Код:
void DynamicArraySetCellValue ( struct DynamicArray* _pArray, int _cellIndex, int _newValue );
Устанавливает текущее значение в интересующей ячейке. Индекс не может быть вне интервала [0 : m_ArrayCurrentSize - 1)
Код:
void DynamicArrayPushBackValue ( struct DynamicArray* _pArray, int _newValue );
Добавляет новое значение в конец массива. Если зарезервированная память еще осталась, использует ее для хранения нового данного. Если больше резервов нет, выделяет вдвое больший блок, мигрирует данные из старого блока, освобождает старый блок, а новое значение дописывает в ячейке сразу после старых
Код:
void DynamicArrayPopBackValue ( struct DynamicArray* _pArray );
Освобождает массив от последнего записанного данного. Не допускается, чтобы массив был пуст на момент вызова операции
Код:
int DynamicArrayBack ( const struct DynamicArray* _pArray );
Возвращает последнее хранимое в массиве значение. Не допускается, чтобы массив был пуст на момент вызова операции
Код:
void DynamicArrayResize ( struct DynamicArray* _pArray, int _newSize );
Изменяет число занятых элементов в массиве. Если новый размер меньше или равен старому, изменение влияет лишь на счетчик внутри массива. Если же новый размер больше старого, потребуется выделение памяти аналогично алгоритму в функции DynamicArrayPushBackValue
Код:
void DynamicArrayReserve ( struct DynamicArray* _pArray, int _newCapacity );
Выполняет принудительное резервирование памяти для будущих элементов. Если новый размер резерва меньше или равен старому, вызов функции игнорируется. Если новый размер резерва больше старого, необходимо повторное выделение блока аналогично DynamicArrayPushBackValue
|
|
|