|
| 1 | +# Связный список |
| 2 | + |
| 3 | +Связный список является простейшим типом данных динамической структуры, состоящей из элементов (узлов). |
| 4 | + |
| 5 | +## Структура узла |
| 6 | + |
| 7 | +Каждый узел включает в себя в классическом варианте как минимум два поля: |
| 8 | + |
| 9 | +- **данные** (в качестве данных может выступать переменная, объект класса или структуры и т. д.) |
| 10 | +- **указатель на следующий узел в списке** (указателей может быть несколько). |
| 11 | + |
| 12 | +Элементы связанного списка можно помещать и исключать произвольным образом. |
| 13 | + |
| 14 | +Доступ к списку осуществляется через указатель, который содержит адрес первого элемента списка, называемый корнем списка. |
| 15 | + |
| 16 | +## Классификация списков |
| 17 | + |
| 18 | +По количеству полей указателей различают списки: |
| 19 | + |
| 20 | +- **однонаправленный (односвязный)** |
| 21 | +- **двунаправленный (двусвязный)** |
| 22 | + |
| 23 | +### Односвязный и двусвязный списки |
| 24 | + |
| 25 | +- **Односвязный список**, содержащий только один указатель на следующий элемент. |
| 26 | +- **Двусвязный список**, содержащий два поля указателя – на следующий элемент и на предыдущий. |
| 27 | + |
| 28 | +По способу связи элементов различают линейные и циклические списки. |
| 29 | + |
| 30 | +## Виды списков |
| 31 | + |
| 32 | +Таким образом, различают 4 основных вида списков: |
| 33 | + |
| 34 | +- **Односвязный линейный список (ОЛС)**. Каждый узел ОЛС содержит 1 поле указателя на следующий узел. Поле указателя последнего узла содержит нулевое значение (указывает на NULL). |
| 35 | +- **Односвязный циклический список (ОЦС)**. Каждый узел ОЦС содержит 1 поле указателя на следующий узел. Поле указателя последнего узла содержит адрес первого узла (корня списка). |
| 36 | +- **Двусвязный линейный список (ДЛС)**. Каждый узел ДЛС содержит два поля указателей: на следующий и на предыдущий узел. Поле указателя на следующий узел последнего узла содержит нулевое значение (указывает на NULL). Поле указателя на предыдущий узел первого узла (корня списка) также содержит нулевое значение (указывает на NULL). |
| 37 | +- **Двусвязный циклический список (ДЦС)**. Каждый узел ДЦС содержит два поля указателей: на следующий и на предыдущий узел. Поле указателя на следующий узел последнего узла содержит адрес первого узла (корня списка). Поле указателя на предыдущий узел первого узла (корня списка) содержит адрес последнего узла. |
| 38 | + |
| 39 | +## Сравнение массивов и связных списков |
| 40 | + |
| 41 | +- **Выделение памяти**: Массив - выделение памяти осуществляется единовременно под весь массив до начала его использования. Список - выделение памяти осуществляется по мере ввода новых элементов. |
| 42 | +- **Удаление/добавление элемента**: Массив - при удалении/добавлении элемента требуется копирование всех последующих элементов для осуществления их сдвига. Список - удаление/добавление элемента осуществляется переустановкой указателей, при этом сами данные не копируются. |
| 43 | +- **Занимаемая память**: Массив - для хранения элемента требуется объем памяти, необходимый только для хранения данных этого элемента. Список - для хранения элемента требуется объем памяти, достаточный для хранения данных этого элемента и указателей (1 или 2) на другие элементы списка. |
| 44 | +- **Доступ к элементам**: Массив - доступ к элементам может осуществляться в произвольном порядке. Список - возможен только последовательный доступ к элементам. |
| 45 | + |
| 46 | +Как видим, каждый тип данных обладает своими достоинствами и недостатками. Выбор в пользу того или иного типа данных будет зависеть от решаемой задачи. |
0 commit comments