Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lecture5_PAS.doc
Скачиваний:
22
Добавлен:
08.12.2018
Размер:
60.93 Кб
Скачать

Технология программирования (pascal)

Тема:

V. Структуры и организация данных

2. Динамические структуры данных

2.5. Линейные списки.

Описательные алгоритмы основных действий над линейными списками.

1. Получение доступа к k-му элементу списка для считывания и/или изменения его значения:

  • перейти на первый элемент, который становится текущим;

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

В результате выполнения этих действий текущий элемент окажется либо искомым, либо последним элементом списка. Если текущий элемент будет последним, и его номер не будет равен искомому, то элемента с данным номером нет в списке.

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

2. Вставка нового элемента списка после k-го элемента:

  • произвести переход на k-ый элемент;

  • сохранить адрес k-ого элемента в указатель;

  • создать новый элемент;

  • установить ссылки на новый элемент и с него на последующий.

При реализации данного алгоритма следует учесть случаи, когда вставляемый элемент является первым или последним.

3. Удаление k-го элемента списка:

  • произвести переход на k-ый элемент;

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

  • удалить из памяти k-ый элемент.

При реализации данного алгоритма следует учесть случаи, когда удаляемый элемент является первым или последним.

4. Упорядочивание элементов списка: к спискам применимы все способы сортировки, применяемые к массивам; удобно иметь номер элемента списка как поле элемента списка.

5. Поиск элемента списка с данным значением: необходимо выполнить проход по всем элементам списка до достижения заданного условия.

2.6. Циклические (кольцевые) списки.

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

Циклические списки так же, как и линейные, бывают однонаправленными и двунаправленными. Основное отличие циклического списка состоит в том, что в списке нет пустых указателей – нет ни первого, ни последнего элемента.

Односвязный (однонаправленный) циклический список.

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

Двусвязный (двунаправленный) циклический список.

В двунаправленном циклическом списке система указателей, практически, аналогична системе указателей двунаправленного линейного списка, за исключением того, что первый и последний элементы не имеют пустых указателей, т. к. последний элемент ссылается на первый, а первый — на последний. Двусвязный циклический список позволяет достаточно просто осуществлять вставки и удаления элементов слева и справа от текущего элемента, поскольку, в отличие от линейного списка, элементы циклического списка являются равноправными.

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

Соседние файлы в предмете Программирование на Pascal