Односвязный список
![Алгоритм реализации односвязного списка с примером на C++ и Pascal](https://i0.wp.com/enep-home.ru/wp-content/uploads/2023/12/singlelinkinglist-head.jpg?resize=680%2C340&ssl=1)
Односвязный список (связный список) – базовая структура, представляющая собой соединение узлов с однотипными данными.
Структура записи
![](https://i0.wp.com/enep-home.ru/wp-content/uploads/2023/12/Диаграмма1.jpeg?resize=137%2C75&ssl=1)
listitem : item: type, //type - тип хранимых данных Plink : listitem; // указатель на следующий элемент списка
Структура для работы с односвязным списком
![](https://i0.wp.com/enep-home.ru/wp-content/uploads/2023/12/singlelinkinglist.jpeg?resize=680%2C248&ssl=1)
Структура списка
type singlelistilist: first:listitem, last: listitem, head: listitem, var list:singlelistite
Функция иницилизации
func singlelistitem->init list.first:= NULL; list.last:= NULL; list. head:= NULL; end;
Добавление элемента в конец списка
![](https://i0.wp.com/enep-home.ru/wp-content/uploads/2023/12/singlelinkinglistadd-1.jpeg?resize=680%2C165&ssl=1)
func singlelistlist->addItemBefore(item:type) i:listitem := new listitem; i->item := item; i->Plink := NULL; if first = NULL then first := i; last := i; end; else last.Plink := i; last := i; end;
Добавление элемента в начало списка
![](https://i0.wp.com/enep-home.ru/wp-content/uploads/2023/12/funcaddietmbyfirst.jpeg?resize=680%2C183&ssl=1)
func singlelistlist->addItemAfter(item:type) i:listitem := new listitem; i->item := item; i->Plink := NULL; if first = NULL then first := i; last := i; end; else i->Plink := first; first := i; end;
Удаление элемента с начала списка
![](https://i0.wp.com/enep-home.ru/wp-content/uploads/2023/12/singlelinkinglistdeleteAfter.jpeg?resize=680%2C285&ssl=1)
func singlelistlist->deleteItemAfter t:listItem; t:=first; if first <> nil then first:=t->PLink; first.PLink:=NULL; delete t; head:=first; end; else list.first:= NULL; list.last:= NULL; list. head:= NULL; end; end;
Удаление элемента с конца списка
![](https://i0.wp.com/enep-home.ru/wp-content/uploads/2023/12/singlelinkinglistdeleteBefore.jpeg?resize=680%2C201&ssl=1)
func singlelistlist->deleteItemBefore l,d: listitem; l := first; while l.Plink <> NULL do d:=l; l:=l.Plink; end; d.Plink:=NULL; dispose(l); end;
Примеры реализации
Примеры реализации у меня в ребозитории на GitLab
- На C++ : Link;
- На Free Pascal Link