Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ответы - Программирование (2я часть).docx
Скачиваний:
6
Добавлен:
26.09.2019
Размер:
36.37 Кб
Скачать

Динамические структуры данных. Сравнения статических и динамических структур данных. Область применения динамических структур.

Обычные переменные характеризуются фиксированным количеством памяти выделяемым на них, например это простые числа или обычные массивы. К примеру если описана переменная int a или массив int b[100] то их размер будет жестко известен. Однако бывает необходимость создания структуры данных объем которых будет изменяться в процессе работы кода. Динамические структуры применяются для более эффективной работы с данными, когда мы не знаем точного количества элементов которые будут храниться.

Способы реализации динамических структур.

Для реализации элементов динамической структуры данных в С++ используют тип данных, называемый структура (struct). Это поименованная совокупность элементов расположенных в памяти компьютера последовательно. Пример описания структуры:

struct имя_структуры

{

тип1 имя_элемента;

тип2 имя_элемента;

… } s1, s2 // А это список статических переменных (определителей) данной структуры.

Можно определить объекты данного типа как сразу после ее описания (s1, s2), так и потом как обычные переменные. Например опишем структуру, создадим простую переменную и массив из 10 элементов:

struct student

{

int group;

double average_score; }

student s3; // Простая переменная.

student s4[10]; // Массив из 10 элементов.

s3.group = 1; // Задаем значение элемента в объекте структуры.

student * s5 = &s3; // Определили указатель который может указывать на любой объект в памяти данной структуры.

s5->group = 2; // Через указатель чтоб обратиться к элементам вместо точки делаем так.

Динамическая структура всегда образована засчет обычных структур содержащих по крайней мере два поля: какое-нибудь с данными и указателя на такую же структуру (чтоб указывать на следующий или предыдущий элемент в списке). Например:

struct el

{

int a;

el * b; }

Характеристики динамических структур: взаимосвязь элементов и набор типовых операций.

Каждая динамическая структура характеризуется, во-первых, взаимосвязью элементов, и, во-вторых, набором типовых операций над этой структурой. В случае динамической структуры важно решить следующие вопросы:

  • каким образом может расти и сокращаться данная структура;

  • каким образом можно включить в структуру новый и удалить существующий элемент;

  • как можно обратиться к конкретному элементу структуры. Доступ по индексу здесь явно неудобен, так как структура динамическая и порядок элементов всегда можно измениться.

То есть в зависимости от способа реализации динамической структуры (стэк, список, очередь) будут меняться и характеристики. Про них – читай дальше.

Достоинства и недостатки динамических структур.

Достоинства:

  • более эффективная работа с памятью, чем при работе с массивом;

  • более эффективная сортировка элементов, удаление и вставка, так как работа идет только с указателями, которые хранят лишь адрес объекта в памяти;

  • количество элементов структуры может не фиксироваться;

  • размерность структуры может меняться в процессе выполнения программы;

  • в процессе выполнения программы может меняться характер взаимосвязи между элементами структуры.

Недостатки:

  • на поля, содержащие указатели для связывания элементов друг с другом, расходуется дополнительная память;

  • проблема с быстрым доступом к элементам. Обычно он осуществляется путем последовательного перебора элементов с помощью указателей на следующий и/или предыдущий в структуре.