
1.Односвязные списки. Понятия и операции.
Связный список – структура, элементами которой служат записи с одним и тем же форматом, связанные с друг другом с помощью указателя, хранящегося в самом элементе структуры. Простейшие связные списки – линейные (односвязные и двухсвязные).
Элемент односвязного списка состоит из двух полей: информационного (хранит информацию, как угодно сложно) и поля указателя (переход на другой элемент). Есть указатель на начало списка, указатель последнего элемента списка нулевой.
Л
огическая
структура списка.
Физическая структура отличается от логической тем, что элементы располагаются раздельно.
Операции.
Data –информационное поле. Next – поле указателя. Start – указатель на начало списка. Work – рабочий указатель. Если Work указатель на элемент списка, то значения полей: Work→Data, Work→Next. При работе с динамическими структурами память выделяется динамически. ВП(Work) – процедура выделения памяти. ОП(Work) – процедура освобождения памяти.
Включение элемента в список.
а) Включение элемента в голову списка.
Необходимо включить элемент Х в начало списка.
ВП(Work)
Work→Data = X
Work→Next = Start
Start = Work
б) Формирование списка путем добавления элемента в его начало.
Необходимо сформировать список из n элементов со значением от 0 до n.
Start=0 ;создали нулевой список
ВП(Work)
Work→Data = n ; n задано раньше
Work→Next = Start
Start = Work
n=n-1
Если n=0, то выход, иначе см. пункт 2.
Недостаток – список формируется в обратном порядке. Алгоритм легко программируется.
в) Включение элемента в список после заданного.
Необходимо включить элемент, заданный ссылкой Work1, после элемента списка, заданного ссылкой Work2.
Work1→Next = Work2→Next
W
ork2→Next = Work1
г) Включение элемента в конец списка.
Алгоритм создания списка основан на алгоритме в). Хорош, если список не большой. Если большой – завести указатель на конец списка. Недостаток – первый элемент обрабатывается не так как все остальные.
д) Включение элемента в список перед заданным элементом.
Включаем новый элемент после текущего, а потом меняем местами информационные поля.
Work1→Next = Work2→Next
Work1→Data = Work2→Data
Work2→Data=X
Work2→Next =Work1
Удаление элемента из списка.
а) Удаление элемента, следующего за заданным.
Исключить элемент, следующий за элементом на который указывает Work1.
Work2 = Work1→Next
Work1→Next = Work2→Next
О
П(Work2)
б) Удаление элемента на который указывает указатель.
Work2 = Work1→Next
Work1→Next = Work2→Next
Work1→Data = Work2→Data
ОП(Work2)
Вывод элементов списка.
Работает и для пустого, и для очень большого списка.
Work=Start
Пока Work<>0
Печать Work→Data
Work = Work→Next
Конец Пока
Циклические списки - линейный список, последний элемент которого содержит указатель на первый его элемент. Из любого элемента можно достичь любой другой элемент. Особенность алгоритма – он будет работать вечно, надо организовать прерывание.