Скачать презентацию Динамические структуры данных Указатели Указатель это переменная Скачать презентацию Динамические структуры данных Указатели Указатель это переменная

Указатели+списки.ppt

  • Количество слайдов: 21

Динамические структуры данных Указатели Динамические структуры данных Указатели

Указатель это переменная, значением которой является адрес в динамической памяти Динамическая память Сегмент стека Указатель это переменная, значением которой является адрес в динамической памяти Динамическая память Сегмент стека Статическая память Сегмент данных Сегмент кода

I. Описание: var <имя>: ^<тип>; Примеры: type rec = record data : integer; с: 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 II. Операции 1. Выделение памяти new(<Имя Указателя>); new(pi); new(pr); pi^ pr^ pi pr

2. Операция разадресации <Имя Указателя>^ pi^: =1; pr^. c: =‘a’; 1 pi^ pi a 2. Операция разадресации <Имя Указателя>^ pi^: =1; pr^. c: =‘a’; 1 pi^ pi a pr^ pr

3. Операция присваивания p: =q p^: =q^ P P P Q Q Q pi: 3. Операция присваивания p: =q p^: =q^ P P P Q Q Q pi: = nil константа nil означает, что указатель не ссылается на какую-либо ячейку памяти

4. Освобождение ДП dispose(<Имя Указателя>); dispose(pi); dispose(pr); 4. Освобождение ДП dispose(<Имя Указателя>); dispose(pi); dispose(pr);

Динамические структуры данных Линейный однонаправленный список Динамические структуры данных Линейный однонаправленный список

Описание : type_data =integer; l_ptr= ^element; element = record data : type_data ; next: Описание : type_data =integer; l_ptr= ^element; element = record data : type_data ; next: l_ptr; end; I. Линейный список - это структура данных, состоящая из информационной части и указателя на следующий элемент.

Создание линейного списка Шаг 0 head: =nil Создание линейного списка Шаг 0 head: =nil

Шаг 1 Шаг 1

Шаг 2 Шаг 2

Шаг 3 Шаг 3

Шаг 4 Шаг 4

new(p); p^. data : =d; p^. next: =head; head: =p; new(p); p^. data : =d; p^. next: =head; head: =p;

Создание пустого списка functioncreate: l_ptr; begin create: =nil; end; Создание пустого списка functioncreate: l_ptr; begin create: =nil; end;

Процедура добавления элемента в начало списка procedureadd(var head: l_ptr; d: type_data); var p: l_ptr; Процедура добавления элемента в начало списка 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; Проверка списка на наличие в нем элементов function eol(head: l_ptr): boolean; begin eol: =head=nil; end;

Процедура вывода всех элементов списка procedureprint_list(head: l_ptr); var temp: l_ptr; begin temp: =head; while Процедура вывода всех элементов списка 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); Процедура удаления всего списка 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 Задания n Написать функцию, которая определяет входит ли список L 1 в список L 2. n Описать процедуру, которая переносит в конец непустого списка L его первый элемент.