Показать сообщение отдельно

  #5  
Старый 24.12.2009, 02:09
elusive.light
Новичок
Регистрация: 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
 
Ответить с цитированием