- •Технология программирования (pascal)
- •V. Структуры и организация данных
- •2. Динамические структуры данных
- •2.5. Линейные списки.
- •1. Получение доступа к k-му элементу списка для считывания и/или изменения его значения:
- •2. Вставка нового элемента списка после k-го элемента:
- •3. Удаление k-го элемента списка:
- •2.6. Циклические (кольцевые) списки.
- •Пример программы работы с двусвязным циклическим списком
- •3. Организация данных
- •3.1. Организация данных – стек.
- •Основные операции над стеком и описательные алгоритмы реализации некоторых из них
- •1. Создание элемента стека:
- •2. Добавление элемента в стек:
- •3. Удаление элемента из стека:
- •1. Стек как механизм реализации вложенности.
- •Пример подпрограмм, реализующих стек
- •3.2. Организация данных – очередь. Простая очередь
- •Дек (двусторонняя очередь)
- •Очереди с ограниченным входом и с ограниченным выходом
Технология программирования (pascal)
Тема:
V. Структуры и организация данных
2. Динамические структуры данных
2.5. Линейные списки.
Описательные алгоритмы основных действий над линейными списками.
1. Получение доступа к k-му элементу списка для считывания и/или изменения его значения:
-
перейти на первый элемент, который становится текущим;
-
до тех пор пока номер элемента не будет равен искомому номеру и элемент не будет последним, производить переход на следующий элемент, который становится текущим.
В результате выполнения этих действий текущий элемент окажется либо искомым, либо последним элементом списка. Если текущий элемент будет последним, и его номер не будет равен искомому, то элемента с данным номером нет в списке.
Если в состав элементов списка входит дополнительное поле, содержащее номер элемента, то движение к данному элементу можно начинать с любого элемента списка, что ускоряет доступ, но в этом случае после некоторых действий необходимо проводить перенумерацию элементов.
2. Вставка нового элемента списка после k-го элемента:
-
произвести переход на k-ый элемент;
-
сохранить адрес k-ого элемента в указатель;
-
создать новый элемент;
-
установить ссылки на новый элемент и с него на последующий.
При реализации данного алгоритма следует учесть случаи, когда вставляемый элемент является первым или последним.
3. Удаление k-го элемента списка:
-
произвести переход на k-ый элемент;
-
переадресовать ссылки предыдущего и последующего элементов так, чтобы текущий элемент исключался;
-
удалить из памяти k-ый элемент.
При реализации данного алгоритма следует учесть случаи, когда удаляемый элемент является первым или последним.
4. Упорядочивание элементов списка: к спискам применимы все способы сортировки, применяемые к массивам; удобно иметь номер элемента списка как поле элемента списка.
5. Поиск элемента списка с данным значением: необходимо выполнить проход по всем элементам списка до достижения заданного условия.
2.6. Циклические (кольцевые) списки.
Линейные списки характерны тем, что в них можно выделить первый и последний элементы, причем для однонаправленного линейного списка обязательно нужно иметь указатель на первый элемент.
Циклические списки так же, как и линейные, бывают однонаправленными и двунаправленными. Основное отличие циклического списка состоит в том, что в списке нет пустых указателей – нет ни первого, ни последнего элемента.
Односвязный (однонаправленный) циклический список.
В односвязном циклическом списке последний элемент списка содержит указатель, связывающий его с первым элементом. Таким образом, для полного обхода такого списка достаточно иметь указатель на любой элемент.
Двусвязный (двунаправленный) циклический список.
В двунаправленном циклическом списке система указателей, практически, аналогична системе указателей двунаправленного линейного списка, за исключением того, что первый и последний элементы не имеют пустых указателей, т. к. последний элемент ссылается на первый, а первый — на последний. Двусвязный циклический список позволяет достаточно просто осуществлять вставки и удаления элементов слева и справа от текущего элемента, поскольку, в отличие от линейного списка, элементы циклического списка являются равноправными.
Для выделения первого элемента можно иметь указатель на заголовок, хотя во многих случаях нет необходимости выделять первый элемент списка, а достаточно иметь указатель на текущий элемент.