Содержание
- 2. 6.1 Адресация оперативной памяти. Указатели и операции над ними Минимальная адресуемая единица памяти большинства современных процессоров
- 3. Относительная адресация памяти или адресация по схеме "База + смещение" Аф = Аб + Асм, где
- 4. Типизированные и нетипизированные указатели Различают указатели: типизированные – адресующие данные конкретного типа; нетипизированные – не связанные
- 5. Операции присваивания и получения адреса 1. Присваивание. Допускается присваивать указателю только значение того же или неопределенного
- 6. Операции доступа и отношения 3. Доступ к данным по указателю (операция разыменования). Полученное значение имеет тип,
- 7. Подпрограммы, работающие с указателями 1. Функция ADDR(x): pointer – возвращает адрес объекта x, в качестве которого
- 8. 6.2 Динамическое распределение памяти Управление выделением и освобождением памяти осуществляется посредством специальных процедур и функций: 1.
- 9. Подпрограммы динамического распределения (2) 3. Процедура GetMem(var P: Pointer; Size: Integer) – выделяет указанное количество памяти
- 10. Динамическая матрица
- 11. Программа Program Ex6_1; {$APPTYPE CONSOLE} Uses SysUtils; Var i,j,n,m:word; s:single; ptrstr:array[1..10000] of pointer; Type tpsingle=^single; {Функция
- 12. Программа (2) Begin Randomize; WriteLn('Input n,m'); ReadLn(n,m); for i:=1 to n do begin GetMem(ptrstr[i],m*sizeof(single)); for j:=1
- 13. 6.3 Динамические структуры данных Структуры данных Последовательные Древовидные Сетевые Вектор Стек Дек Бинарные деревья Сортированные Бинарные
- 14. Списки Список – способ организации данных, предполагающий использова-ние указателей для определения следующего элемента. Элемент списка состоит
- 15. Виды списков Линейный односвязный Кольцевой односвязный Линейный двусвязный Кольцевой двусвязный Сетевой n-связный
- 16. Примеры описания элементов списка Односвязный список: Type pe = ^element; {тип указателя} element = record name:
- 17. 6.4 Односвязные списки Аналогично одномерным массивам реализуют последовательность элементов. Однако в отличие от одномерных массивов позволяют:
- 18. Объявление типа элемента и переменных Описание типа элемента: Type tpel=^element; {тип «указатель на элемент»} element=record num:integer;
- 19. Добавление элементов к списку 1 Добавление элемента к пустому списку: new(first); first ^.num:=5; first ^.p:=nil; 2
- 20. «Стек» записей Program Ex6_2; {$APPTYPE CONSOLE} Uses SysUtils; Type point=^zap; zap=record det:string[10]; diam:real; p:point; end; Var
- 21. Создание списка по типу стека ReadLn(a.det); while a.det 'end' do begin Readln(a.diam); q:=r; new(r); r^.det:=a.det; r^.diam:=a.diam;
- 22. Вывод полученного списка q:=r; if q=nil then WriteLn('No records') else while q nil do begin WriteLn(q^.det:11,q^.diam:5:1);
- 23. Варианты удаления элементов first 5 q 4 8 ∅ first 5 4 8 first 5 4
- 24. Удаление записей q:=r; c:=0; repeat if q^.diam if c=0 then begin r:=r^.p; dispose(q); q:=r end else
- 25. Вывод результата и освобождение памяти q:=r; if q=nil then WriteLn('No records') else while q nil do
- 26. Кольцевой список 1 2 3 4 5 Program Ex6_3; {$APPTYPE CONSOLE} Uses SysUtils; Var y:integer; Function
- 27. Создание списка begin { Создание списка } new(First); First^.name:=1; Pass:=First; for k:=2 to N do begin
- 28. Проход по кольцу n-1 раз Pass:=First; for k:=n downto 2 do begin for j:=1 to m-1
- 29. Удаление m-го элемента. Основная программа WriteLn(Pass^.name); Next^.p:=Pass^.p; dispose(Pass); Pass:=Next^.p; end; {Возврат результата} Play:=Pass^.name; dispose(Pass); end; 1
- 30. 6.5 Бинарные сортированные деревья В математике бинарным деревом называют конечное множество вершин, которое либо пусто, либо
- 31. Построение бинарного дерева Рассмотрим последовательность целых чисел: {5, 2, 8, 7, 2, 9, 1, 5} Пример.
- 32. Описание элемента древовидного списка Program Ex6_4; {$APPTYPE CONSOLE} Uses SysUtils; Const lim=100; Type top_ptr=^top; top=record value:integer;
- 33. Основная программа Begin WriteLn('Input numbers (End - 1000)'); r:=nil; Read(next_number); while next_number 1000 do begin new(pass);
- 34. Нерекурсивная процедура построения дерева Procedure Add1(Var r:top_ptr; pass:top_ptr); Var next,succ:top_ptr; Begin if r=nil then r:=pass else
- 35. Рекурсивная процедура построения дерева Procedure Add2(Var r:top_ptr; pass:top_ptr); begin if r=nil then r:=pass else if (pass^.value
- 36. Нерекурсивная процедура обхода дерева Procedure Tree1(r:top_ptr); var pass:top_ptr; mem_top:record nom:0..lim; adres:array[1..lim] of top_ptr; end; begin pass:=r;
- 37. Нерекурсивная процедура обхода дерева (2) with mem_top do begin nom:=0; while (pass nil) or (nom 0)
- 38. Рекурсивная процедура обхода дерева Procedure Tree2(r:top_ptr); begin if r nil then begin Tree2(r^.left); Write(r^.value:4); Tree2(r^.right); end;
- 40. Скачать презентацию