Динамические структуры данных Указатели
Указатель это переменная, значением которой является адрес в динамической памяти Динамическая память Сегмент стека Статическая память Сегмент данных Сегмент кода
I. Описание: var <имя>: ^<тип>; Примеры: type rec = record data : integer; с: char; end; var pi: ^integer; pr: ^rec; Динамическая память pi pr Сегмент данных
II. Операции 1. Выделение памяти new(<Имя Указателя>); new(pi); new(pr); pi^ pr^ pi pr
2. Операция разадресации <Имя Указателя>^ pi^: =1; pr^. c: =‘a’; 1 pi^ pi a pr^ pr
3. Операция присваивания p: =q p^: =q^ P P P Q Q Q pi: = nil константа nil означает, что указатель не ссылается на какую-либо ячейку памяти
4. Освобождение ДП dispose(<Имя Указателя>); dispose(pi); dispose(pr);
Динамические структуры данных Линейный однонаправленный список
Описание : type_data =integer; l_ptr= ^element; element = record data : type_data ; next: l_ptr; end; I. Линейный список - это структура данных, состоящая из информационной части и указателя на следующий элемент.
Создание линейного списка Шаг 0 head: =nil
Шаг 1
Шаг 2
Шаг 3
Шаг 4
new(p); p^. data : =d; p^. next: =head; head: =p;
Создание пустого списка functioncreate: l_ptr; begin create: =nil; end;
Процедура добавления элемента в начало списка procedureadd(var head: l_ptr; d: type_data); var p: l_ptr; begin new(p); p^. data : =d; p^. next: =head; head: =p; end;
Проверка списка на наличие в нем элементов function eol(head: l_ptr): boolean; begin eol: =head=nil; end;
Процедура вывода всех элементов списка procedureprint_list(head: l_ptr); var temp: l_ptr; begin temp: =head; while not eol(temp) do begin writeln(temp^. data); temp: =temp^. next; end;
Процедура удаления всего списка proceduredestroy(var head: l_ptr); begin if not eol(head) then destroy(head^. next); if not eol(head) then dispose(head); end;
Задания n Написать функцию, которая определяет входит ли список L 1 в список L 2. n Описать процедуру, которая переносит в конец непустого списка L его первый элемент.