Линейный односвязный список — это динамическая структура данных, в которой каждый элемент связан со следующим элементом с помощью специального указателя.
Под связным списком понимается основная структура данных, которая имеет динамический характер и состоит из узлов. Любой узел состоит из информации и ссылок («связок») на следующие и/или расположенные ранее узлы списка. У связного списка имеется одно очень существенное достоинство по сравнению с массивами и это гибкая структура. Расположение компонентов связного списка не обязательно соответствует их порядковой нумерацией, хранящейся в компьютере, а система прохождения списка определяется в явной форме связями внутри списка.
Линейным односвязным списком называется организация данных, которые состоят из однотипных компонентов, имеющих последовательные связи друг с другом при помощи указателей. У каждого компонента из списка имеется указатель на последующий компонент. У конечного элемента списка указатель указывает на нуль. Начальным в списке расположен компонент, на который не ссылаются никакие указатели. А указатель каждого узла ведёт на соседний узел списка. Если список односвязный, то движение внутри списка возможно лишь в направлении окончания списка. Выяснить адрес компонента, расположенного ранее, по данным текущего узла, не представляется возможным. В дисциплине информатика под линейным списком понимается абстрактный вид информационных данных, который формализует термин упорядоченных данных в коллекции. Обычно, линейный список можно организовать в виде массива или связного списка. Бывают моменты, когда понятие списка в произвольной трактовке применяется в виде синонима связного списка. Например, абстрактный тип данных нетипичного, с возможностью изменения, списка определяется в виде набора из конструктора алгебраического типа данных и базовых процедур:
К основным характеристикам линейных односвязных списков относятся:
typedef struct s_list
{
int field; // область информации
struct s_list *next; // указатель на очередной компонент
} list;
использование односвязного списка:
1 list* l1 = (list*)malloc(sizeof(list));
2 l1->field = 1;
3 l1->next = (list*)malloc(sizeof(list));
4 l1->next->field = 2;
5 l1->next->next = (list*)malloc(sizeof(list));
6 /* и так далее */
Одной из модификаций связного списка считается список, который замкнут в кольцо. То есть представляет собой замкнутый цикл. По структуре он бывает односвязный или двусвязный. В конечном компоненте замкнутого списка содержится указание на начальный компонент, в котором, в свою очередь, при двусвязном списке может быть указатель на конечный компонент. Обычно, такое построение основывается на линейном списке, в котором не должно быть ссылок на нуль. Есть ещё списки в виде цикла, где выделяется головной элемент. Это значительно облегчает полное прохождение списка.
Можно отметить следующие основные преимущества:
Основные проблемные моменты связного списка определяются их основным свойством, а именно последовательным доступом к информационным данным:
Операция формирования нового узла в списке имеет два аргумента:
Блок-схема формирования нового узла представлена в следующем виде:

Рисунок 1. Блок-схема формирования нового узла.
Процесс добавления узла в линейный односвязный список состоит из следующих этапов: