12.2. Динамические структуры типа «список»
Список – это динамическая структура данных, представляющая собой некоторое множество однородных элементов, связанных друг с другом только отношением следования. Элементы списка – всегда динамические переменные, а связь элементов списка обеспечивается переменными типа «указатель на элемент». Число элементов в списке может быть любым; в частности список может быть пустым, то есть не содержать ни одного элемента.
Вначале приведем ряд определений.
По способу связимежду элементами списка различают линейные и кольцевые списки, а также односвязные и двухсвязные списки:
Линейный список – это динамическая структура данных, которая представляет собой совокупность линейно связанных элементов, для которых разрешается добавлять элементы между любыми двумя другими и удалять любой элемент.
Кольцевой или замкнутый список – это динамическая структура данных такой же структуры, что и линейный список, но имеющая дополнительную связь между последним и первым элементами списка.
Односвязный список – это список, в котором каждый элемент связан («знает» о местонахождении) только с одним, следующим за ним элементом.
Двухсвязный список – это список, в котором каждый элемент связан с двумя соседними для него элементами, как находящимся перед, так и находящимся после него.
По типу доступа к элементам списка различают очереди и стеки:
Очередь – это частный случай линейного списка, для которого добавление нового элемента разрешено только в конец списка, а удаление – только из начала (из головы) списка.
Стек – это частный случай линейного списка, для которого добавление нового элемента и удаление существующего всегда производится только из начала списка. Голову такого списка часто называют вершиной стека.
Приведем графические иллюстрации списков (здесь приведены частные примеры организации списков):
а) Линейный односвязный список (Head – переменная-указатель на первый элемент или голову списка; Tail – переменная-указатель на последний элемент списка; Info – область элемента, в которой хранится полезная информация)
|
|
|
|
Info |
|
|
|
Info |
|
|
|
|
Nil |
|
|
|
| ||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |||||||||||
|
|
|
|
Head |
|
|
|
|
|
|
|
|
Tail |
|
|
|
|
|
| ||||||||||||
б) Кольцевой односвязный список
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |||||||||
|
|
|
|
Info |
|
|
|
Info |
|
|
|
Info |
|
|
|
|
| ||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
Tail |
|
|
|
|
| |||||||||||








