infa_1 / 8. Списки и операции над ними
.doc8. Списки и операции над ними
Под списком понимается ряд однотипных элементов, связанных друг с другом цепочкой указателей. Линейный однонаправленный список:
Каждый элемент, кроме последнего, содержит помимо данных указатель на следующий элемент. Элемент списка будет записью, содержащей данные и типизированный указатель, базой для которого должен быть тот же тип данных, что и тип элементов списка. Список задается указателями на свой первый элемент.
Описание типа элемента списка:
Список задается указателем на свой первый элемент. Для создаваемого списка назовем этот элемент lst. Пусть каждый элемент этого списка содержит в качестве данных строку. Создание списка будет содержать следующие шаги:
1)присваивание указателем lst значений nil
lst => [nil]; lst:=nil
в результате создается пустой список, не имеющий ни одного элемента. Затем будем добавлять элементы в начало списка. Для этого потребуется рабочий указатель p. Добавление элемента в начало списка lst можно осуществить при помощи, следующей последовательности операторов:
new (p);{выделение памяти для элемента списка}
real (p^data); {читать данные для элемента списка}
lst:=p; {указатель на начало, на добавленный элемент}
2) lst => [nil]
new(p)
p =>[ ]
3) lst => [nil]
p =>[ данные ]
read (p^data)
4) p => [слово] => [nil]<= lst
p^next: =lst
5) lst: = p;
lst => [слово [nil]] <=p
Схема добавления элементов в начало не пустого списка:
Схема добавления p после q:
Удаление из списка элемента p:
Помимо обычного линейного списка имеются две его разновидности - стэк, очередь.
Стэк - линейный список, в котором добавление и исключение возможны только в конце.
Очередь - линейный список, элементы которого добавляются только в конец, а исключаются только из начала.