Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
вопросы к экзамену 1-2сем.doc
Скачиваний:
10
Добавлен:
23.09.2019
Размер:
186.88 Кб
Скачать

17.Структуры данных на основе указателей.

Структурированные типы данных, такие, как массивы, множества, записи, представляют собой статические структуры, так как их размеры неизменны в течение всего времени выполнения программы.

Часто требуется, чтобы структуры данных меняли свои размеры в ходе решения задачи. Такие структуры данных называются динамическими, к ним относятся стеки, очереди, списки, деревья и другие. Описание динамических структур с помощью массивов, записей и файлов приводит к неэкономному использованию памяти ЭВМ и увеличивает время решения задач.

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

Стек (англ. stack — стопка) — структура данных с методом доступа к элементам LIFO (англ. LastIn — FirstOut, «последним пришел — первым вышел»). Чаще всего принцип работы стека сравнивают со стопкой тарелок: чтобы взять вторую сверху, нужно взять верхнюю.

Свя́зныйспи́сок — структура данных, состоящая из узлов, каждый из которых содержит как собственные данные, так и одну или две ссылки («связки») на следующее и/или предыдущее поле. Принципиальным преимуществом перед массивом является структурная гибкость: порядок элементов связного списка может не совпадать с порядком расположения элементов данных в памяти компьютера, а порядок обхода списка всегда явно задаётся его внутренними связями. Списки бывают однонаправленными, двунаправленными (дек), кольцевыми.

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

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

Деревья в программировании имеют по своей сути очень и очень схожее строение с генеалогическим деревом: есть какой-то корень (обычно он располагается в самом верху, т.е. дерево "растёт" вниз) и у него есть потомки, а у тех потомков свои потомки и т.д."Двоичное дерево поиска"— часто используется для решения очень широкого круга задач, чаще всего для поиска и сортировки (при больших объёмах сортируемой информации, очень даже неплохие результаты показывает).

20.Связанные списки: общие сведения. Действия со списками.

В списке каждый элемент связан со следующим и, возможно, с предыдущим. В первом случае список называется односвязным, во втором — двусвязным. Также применяются термины «однонаправленный» и «двунаправленный». Если последний элемент связать указателем с первым, получится кольцевой список.

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

Над списками можно выполнять следующие операции:

  • начальное формирование списка (создание первого элемента);

  • добавление элемента в конец списка; □ чтение элемента с заданным ключом;

  • вставка элемента в заданное место списка (до или после эл-та с заданным ключом);

  • удаление элемента с заданным ключом;

  • упорядочивание списка по ключу.

Как можно заметить, стек и очередь представляют собой частные случаи линейного списка с ограниченным набором допустимых операций. При чтении элемент списка не удаляется, в отличие от элемента, выбираемого из стека и очереди. Для работы со списком в программе требуется определить указатель на его начало. Чтобы упростить добавление новых элементов в конец списка, можно также завести указатель на конец списка. { элемент списка }