🗊Презентация Работа с динамической памятью

Нажмите для полного просмотра!
Работа с динамической памятью, слайд №1Работа с динамической памятью, слайд №2Работа с динамической памятью, слайд №3Работа с динамической памятью, слайд №4Работа с динамической памятью, слайд №5Работа с динамической памятью, слайд №6Работа с динамической памятью, слайд №7Работа с динамической памятью, слайд №8Работа с динамической памятью, слайд №9Работа с динамической памятью, слайд №10Работа с динамической памятью, слайд №11Работа с динамической памятью, слайд №12Работа с динамической памятью, слайд №13Работа с динамической памятью, слайд №14Работа с динамической памятью, слайд №15Работа с динамической памятью, слайд №16Работа с динамической памятью, слайд №17Работа с динамической памятью, слайд №18Работа с динамической памятью, слайд №19Работа с динамической памятью, слайд №20Работа с динамической памятью, слайд №21Работа с динамической памятью, слайд №22Работа с динамической памятью, слайд №23Работа с динамической памятью, слайд №24Работа с динамической памятью, слайд №25Работа с динамической памятью, слайд №26Работа с динамической памятью, слайд №27Работа с динамической памятью, слайд №28Работа с динамической памятью, слайд №29Работа с динамической памятью, слайд №30Работа с динамической памятью, слайд №31Работа с динамической памятью, слайд №32Работа с динамической памятью, слайд №33Работа с динамической памятью, слайд №34Работа с динамической памятью, слайд №35Работа с динамической памятью, слайд №36Работа с динамической памятью, слайд №37Работа с динамической памятью, слайд №38Работа с динамической памятью, слайд №39Работа с динамической памятью, слайд №40Работа с динамической памятью, слайд №41Работа с динамической памятью, слайд №42Работа с динамической памятью, слайд №43

Содержание

Вы можете ознакомиться и скачать презентацию на тему Работа с динамической памятью. Доклад-сообщение содержит 43 слайдов. Презентации для любого класса можно скачать бесплатно. Если материал и наш сайт презентаций Mypresentation Вам понравились – поделитесь им с друзьями с помощью социальных кнопок и добавьте в закладки в своем браузере.

Слайды и текст этой презентации


Слайд 1





Лекция
 Работа с динамической памятью 
Указатели: виды, описание, использование. Динамические переменные. Динамические структуры данных: стек, очередь, линейный список, бинарное дерево.
Описание слайда:
Лекция Работа с динамической памятью Указатели: виды, описание, использование. Динамические переменные. Динамические структуры данных: стек, очередь, линейный список, бинарное дерево.

Слайд 2





Основные понятия
Переменные для хранения адресов областей памяти называются указателями. 
В указателе можно хранить адрес данных или программного кода. 
Адрес занимает четыре байта и хранится в виде двух слов, одно из которых определяет сегмент, второе — смещение.
Описание слайда:
Основные понятия Переменные для хранения адресов областей памяти называются указателями. В указателе можно хранить адрес данных или программного кода. Адрес занимает четыре байта и хранится в виде двух слов, одно из которых определяет сегмент, второе — смещение.

Слайд 3





Виды указателей
стандартные:
	var p : pointer;
Описание слайда:
Виды указателей стандартные: var p : pointer;

Слайд 4





Операции с указателями 
присваивание;
					p1 := p2;
проверка на равенство и неравенство:
			 	  	if p1 = p2 then …
Описание слайда:
Операции с указателями присваивание; p1 := p2; проверка на равенство и неравенство: if p1 = p2 then …

Слайд 5





Операция разадресации 
применяется для обращения к значению переменной, адрес которой хранится в указателе:
var p1: ^word;     // НЕ разадресация
…
p1^ := 2; inc(p1^);    writeln(p1^);     // ОНА!
С величинами, адрес которых хранится в указателе, можно выполнять любые действия, допустимые для значений этого типа.
Описание слайда:
Операция разадресации применяется для обращения к значению переменной, адрес которой хранится в указателе: var p1: ^word; // НЕ разадресация … p1^ := 2; inc(p1^); writeln(p1^); // ОНА! С величинами, адрес которых хранится в указателе, можно выполнять любые действия, допустимые для значений этого типа.

Слайд 6





Операция @ и функция addr 
позволяют получить адрес переменной:
var w   :  word;	
     pw : ^word;	
...
pw := @w; 	
{ или pw := addr(w); }
pw^ := 2;
Описание слайда:
Операция @ и функция addr позволяют получить адрес переменной: var w : word; pw : ^word; ... pw := @w; { или pw := addr(w); } pw^ := 2;

Слайд 7





Стандартные функции 
для работы с указателями:
seg(x) : word — возвращает адрес сегмента для х;
ofs(x) : word — возвращает смещение для х;
cseg : word — возвращает значение регистра сегмента кода CS;
dseg : word — возвращает значение регистра сегмента данных DS;
ptr(seg, ofs : word) : pointer — по заданному сегменту и смещению формирует адрес типа pointer.
Описание слайда:
Стандартные функции для работы с указателями: seg(x) : word — возвращает адрес сегмента для х; ofs(x) : word — возвращает смещение для х; cseg : word — возвращает значение регистра сегмента кода CS; dseg : word — возвращает значение регистра сегмента данных DS; ptr(seg, ofs : word) : pointer — по заданному сегменту и смещению формирует адрес типа pointer.

Слайд 8





Динамические переменные 
создаются в хипе во время выполнения программы с помощью подпрограмм new или getmem:
Процедура  new( var p : тип_указателя ) 
Функция      new( тип_указателя ) : pointer
Процедура и функция new обычно применяются для типизированных указателей.
Процедура getmem( var p : pointer; size : word ) 
Эту процедуру можно применять и для указателей типа pointer.
Описание слайда:
Динамические переменные создаются в хипе во время выполнения программы с помощью подпрограмм new или getmem: Процедура new( var p : тип_указателя ) Функция new( тип_указателя ) : pointer Процедура и функция new обычно применяются для типизированных указателей. Процедура getmem( var p : pointer; size : word ) Эту процедуру можно применять и для указателей типа pointer.

Слайд 9





Пример работы с динамическими переменными 
type rec = record
		    d : word;
		    s : string;
	   end;
	   pword = ^word;

var   p1, p2 : pword;
	   p3        : ^rec;
Описание слайда:
Пример работы с динамическими переменными type rec = record d : word; s : string; end; pword = ^word; var p1, p2 : pword; p3 : ^rec;

Слайд 10





p1^ := 3;     p2^ := 2; 
p1^ := 3;     p2^ := 2; 
p3^.d := p1^; 
p3^.s := 'Вася';
Описание слайда:
p1^ := 3; p2^ := 2; p1^ := 3; p2^ := 2; p3^.d := p1^; p3^.s := 'Вася';

Слайд 11





Мусор
При присваивании указателю другого значения старое значение теряется. 
Это приводит к появлению так называемого мусора (обозначен овалом), когда доступа к участку динамической памяти нет, а сам он помечен как занятый.
Описание слайда:
Мусор При присваивании указателю другого значения старое значение теряется. Это приводит к появлению так называемого мусора (обозначен овалом), когда доступа к участку динамической памяти нет, а сам он помечен как занятый.

Слайд 12





Освобождение памяти 
Процедура  Dispose(var p : pointer) 
освобождает участок памяти, выделенный New.
Процедура Freemem(var p : pointer; size : word) 
освобождает участок памяти размером size, начиная с адреса p. 
Если память выделялась с помощью New, следует применять Dispose, в противном случае — Freemem.
Значение указателя после вызова этих процедур становится неопределенным.
Описание слайда:
Освобождение памяти Процедура Dispose(var p : pointer) освобождает участок памяти, выделенный New. Процедура Freemem(var p : pointer; size : word) освобождает участок памяти размером size, начиная с адреса p. Если память выделялась с помощью New, следует применять Dispose, в противном случае — Freemem. Значение указателя после вызова этих процедур становится неопределенным.

Слайд 13





Освобождение памяти из-под группы переменных
Если требуется освободить память из-под нескольких переменных одновременно, можно применять процедуры Mark и Release.
Процедура Mark(var p : pointer) записывает в указатель p адрес начала участка свободной динамической памяти на момент ее вызова. 
Процедура Release(var p : pointer) освобождает участок динамической памяти, начиная с адреса, записанного в указатель p процедурой Мark.
Описание слайда:
Освобождение памяти из-под группы переменных Если требуется освободить память из-под нескольких переменных одновременно, можно применять процедуры Mark и Release. Процедура Mark(var p : pointer) записывает в указатель p адрес начала участка свободной динамической памяти на момент ее вызова. Процедура Release(var p : pointer) освобождает участок динамической памяти, начиная с адреса, записанного в указатель p процедурой Мark.

Слайд 14





Вспомогательные функции 
Функция Maxavail : longint возвращает длину в байтах самого длинного свободного участка динамической памяти.
Функция Memavail : longint возвращает полный объем свободной динамической памяти в байтах.
Вспомогательная функция Sizeof(x) : word возвращает объем в байтах, занимаемый x, причем x может быть либо именем переменной любого типа, либо именем типа
Описание слайда:
Вспомогательные функции Функция Maxavail : longint возвращает длину в байтах самого длинного свободного участка динамической памяти. Функция Memavail : longint возвращает полный объем свободной динамической памяти в байтах. Вспомогательная функция Sizeof(x) : word возвращает объем в байтах, занимаемый x, причем x может быть либо именем переменной любого типа, либо именем типа

Слайд 15






Лекция 
Динамические структуры данных
Описание слайда:
Лекция Динамические структуры данных

Слайд 16





Виды динамических структур 
В программах чаще всего используются: 
линейные списки
стеки
Описание слайда:
Виды динамических структур В программах чаще всего используются: линейные списки стеки

Слайд 17





Стек 
Реализует принцип обслуживания LIFO
(Last In – First Out). 
Для работы со стеком используются две статические переменные: 
	- указатель на вершину стека;
	- вспомогательный указатель:
var top, p : pnode;
Создание первого элемента стека:
new(top); 
top^.d := 100; 
top^.s := ‘Вася'; 
top^.p := nil;
Описание слайда:
Стек Реализует принцип обслуживания LIFO (Last In – First Out). Для работы со стеком используются две статические переменные: - указатель на вершину стека; - вспомогательный указатель: var top, p : pnode; Создание первого элемента стека: new(top); top^.d := 100; top^.s := ‘Вася'; top^.p := nil;

Слайд 18





Добавление элемента в стек
1. Выделение памяти
new(p);
Описание слайда:
Добавление элемента в стек 1. Выделение памяти new(p);

Слайд 19





Выборка из стека
Выборка данных
with top^ do writeln (d, s);
Описание слайда:
Выборка из стека Выборка данных with top^ do writeln (d, s);

Слайд 20





Пример работы со стеком
Программа формирует стек из пяти целых чисел и их текстового представления и выводит его на экран. 
program stack;
const n = 5;
type	pnode = ^node;
		node = record								d : word;
			s : string;
			p : pnode;
		end;
var	top	: pnode; 
		i	: word;
		s	: string;
const	text : array [1 .. n]  of string =  ('one', 'two', 'three', 'four', 'five');
Описание слайда:
Пример работы со стеком Программа формирует стек из пяти целых чисел и их текстового представления и выводит его на экран. program stack; const n = 5; type pnode = ^node; node = record d : word; s : string; p : pnode; end; var top : pnode; i : word; s : string; const text : array [1 .. n] of string = ('one', 'two', 'three', 'four', 'five');

Слайд 21





{ -------------------------------- занесение в стек ----- }
{ -------------------------------- занесение в стек ----- }
function push(top : pnode; d : word; const s : string) : pnode;
var p : pnode;
begin
	new(p);
	p^.d := d;     p^.s := s;     p^.p := top;
	push := p;
end;
Описание слайда:
{ -------------------------------- занесение в стек ----- } { -------------------------------- занесение в стек ----- } function push(top : pnode; d : word; const s : string) : pnode; var p : pnode; begin new(p); p^.d := d; p^.s := s; p^.p := top; push := p; end;

Слайд 22





{ ------------------------------- главная программа ----- }
{ ------------------------------- главная программа ----- }
begin
	top := nil;
	{ занесение в стек: }
	for i := 1 to n do top := push(top, i, text[i]);
	
    { выборка из стека: }
	while top <> nil do begin
		top := pop(top, i, s);   	writeln(i:2, s);
	end;
end.
Описание слайда:
{ ------------------------------- главная программа ----- } { ------------------------------- главная программа ----- } begin top := nil; { занесение в стек: } for i := 1 to n do top := push(top, i, text[i]); { выборка из стека: } while top <> nil do begin top := pop(top, i, s); writeln(i:2, s); end; end.

Слайд 23





Очередь
Реализует принцип обслуживания FIFO
Описание слайда:
Очередь Реализует принцип обслуживания FIFO

Слайд 24





Выборка элемента из начала

with beg^ do writeln (d, s);
p := beg; 
beg := beg^.p; 
dispose(p);
Описание слайда:
Выборка элемента из начала with beg^ do writeln (d, s); p := beg; beg := beg^.p; dispose(p);

Слайд 25





Линейные списки 
односвязные
двусвязные
Описание слайда:
Линейные списки односвязные двусвязные

Слайд 26





Пример работы со списком
Программа, формирующая односвязный список из пяти элементов, содержащих число и его текстовое представление. Выполняет вставку и удаление заданного элемента. В качестве ключа используется число.
Описание слайда:
Пример работы со списком Программа, формирующая односвязный список из пяти элементов, содержащих число и его текстовое представление. Выполняет вставку и удаление заданного элемента. В качестве ключа используется число.

Слайд 27


Работа с динамической памятью, слайд №27
Описание слайда:

Слайд 28


Работа с динамической памятью, слайд №28
Описание слайда:

Слайд 29


Работа с динамической памятью, слайд №29
Описание слайда:

Слайд 30


Работа с динамической памятью, слайд №30
Описание слайда:

Слайд 31


Работа с динамической памятью, слайд №31
Описание слайда:

Слайд 32


Работа с динамической памятью, слайд №32
Описание слайда:

Слайд 33


Работа с динамической памятью, слайд №33
Описание слайда:

Слайд 34


Работа с динамической памятью, слайд №34
Описание слайда:

Слайд 35





Бинарное дерево
Бинарное дерево — динамическая структура данных, состоящая из узлов, каждый из которых содержит кроме данных не более двух ссылок на различные бинарные деревья. 
На каждый узел имеется ровно одна ссылка. 
Начальный узел называется корнем дерева.
Описание слайда:
Бинарное дерево Бинарное дерево — динамическая структура данных, состоящая из узлов, каждый из которых содержит кроме данных не более двух ссылок на различные бинарные деревья. На каждый узел имеется ровно одна ссылка. Начальный узел называется корнем дерева.

Слайд 36





Операции
Для бинарных деревьев определены операции:
включения узла в дерево;
поиска по дереву;
обхода дерева;
удаления узла.
Элемент дерева:
type	pnode = ^node;
		node = record
 		       data : word;		{ ключ }
		       left  : pnode;		{ указатель на левое поддерево }
		       right : pnode		{ указатель на правое поддерево }
		end;
Описание слайда:
Операции Для бинарных деревьев определены операции: включения узла в дерево; поиска по дереву; обхода дерева; удаления узла. Элемент дерева: type pnode = ^node; node = record data : word; { ключ } left : pnode; { указатель на левое поддерево } right : pnode { указатель на правое поддерево } end;

Слайд 37





Поиск по дереву 
function find(root : pnode; key : word; var p, 
                     parent : pnode) : boolean;
begin
   p := root;	  { поиск начинается от корня }
   while p <> nil do begin
      if key = p^.data then	{ такой узел есть }
	      begin find := true; exit end;	
      parent := p;   { запомнить ук-ль перед спуском }
      if key < p^.data
	    then p := p^.left	 { спуститься влево }
	    else p := p^.right; 	{ спуститься вправо }
   end;
   find := false;
end;
Описание слайда:
Поиск по дереву function find(root : pnode; key : word; var p, parent : pnode) : boolean; begin p := root; { поиск начинается от корня } while p <> nil do begin if key = p^.data then { такой узел есть } begin find := true; exit end; parent := p; { запомнить ук-ль перед спуском } if key < p^.data then p := p^.left { спуститься влево } else p := p^.right; { спуститься вправо } end; find := false; end;

Слайд 38





Включение в дерево
procedure insert(var root : pnode; key : word);
var p, parent : pnode;
begin
	if find(root, key, p, parent) then begin
		writeln(' такой элемент уже есть'); exit; end;
	
     new(p);	{ создание нового элемента }
	p^.data := key;
	p^.left   := nil;
	p^.right := nil;
	if root = nil then root := p { первый элемент }
	else	{ присоед-е нового элемента к дереву}
		if key < parent^.data
		then   parent^.left   := p
		else   parent^.right  := p;
end;
Описание слайда:
Включение в дерево procedure insert(var root : pnode; key : word); var p, parent : pnode; begin if find(root, key, p, parent) then begin writeln(' такой элемент уже есть'); exit; end; new(p); { создание нового элемента } p^.data := key; p^.left := nil; p^.right := nil; if root = nil then root := p { первый элемент } else { присоед-е нового элемента к дереву} if key < parent^.data then parent^.left := p else parent^.right := p; end;

Слайд 39





Обход дерева
procedure print_tree( дерево );
begin
	print_tree( левое_поддерево )
	посещение корня
	print_tree( правое_поддерево )
end;
Описание слайда:
Обход дерева procedure print_tree( дерево ); begin print_tree( левое_поддерево ) посещение корня print_tree( правое_поддерево ) end;

Слайд 40





Удаление из дерева
Найти узел, который будет поставлен на место удаляемого.
Реорганизовать дерево так, чтобы не нарушились его свойства.
Присоединить новый узел к узлу-предку удаляемого узла.
Освободить память из-под удаляемого узла.
Описание слайда:
Удаление из дерева Найти узел, который будет поставлен на место удаляемого. Реорганизовать дерево так, чтобы не нарушились его свойства. Присоединить новый узел к узлу-предку удаляемого узла. Освободить память из-под удаляемого узла.

Слайд 41





Удаление узла, не имеющего потомков
Описание слайда:
Удаление узла, не имеющего потомков

Слайд 42





Удаление узла с двумя потомками
Описание слайда:
Удаление узла с двумя потомками

Слайд 43





Удаление узла (общий случай)
Описание слайда:
Удаление узла (общий случай)



Похожие презентации
Mypresentation.ru
Загрузить презентацию