Лекция 13. Динамические структуры данных
Статические и динамические переменные
Для обычных переменных память выделяется до того, как программа начинает выполняться.
Динамическая переменная – это переменная, область памяти для которой выделяется в процессе работы программы.
Указатель – переменная, которая содержит адрес другой переменной.
Имя:^Тип;
P1:^integer;
P2:^real;
Выделение и освобождение памяти
New(Указатель) –создает переменную и ее адрес записывает в переменную-указатель.
Dispose(Указатель) – освобождает память, занимаемую динамической переменной.
Var
P1,p2,p3:^integer;
Begin
New(p1);
New(p2);
Readln(p1^,p2^);
P3^:=p1^+p2^;
Writeln(p3^);
Dispose(p1);
End.
Список
Каждый элемент списка представляет собой запись, состоящую из двух частей. Первая часть – информационная, вторая – обеспечивает связь с другими элементами списка. Различают односвязные и двухсвязные списки.
type
p_student=^student;
student=record
name:string[20];
next:p_student;
end;
var
head:p_student; { начало списка }
curr:p_student; { текущий элемент списка }
buf:string[20]; { буфер для ввода с клавиатуры }
begin
repeat
write('Фамилия-> ');
readln(buf);
if length(buf)<>0 then
begin
new(curr);
curr^.name:=buf;
curr^.next:=head;
head:=curr;
end;
until length(buf)=0;
writeln('** Введенный список **');
curr:=head;
while curr<>NIL do begin
writeln(curr^.name );
curr:=curr^.next;
end;
readln;
end.
Контрольные вопросы
1. Что является значением переменной-указателя (в общем случае)?
2. Как выделить память для динамической переменной?
3. Как получить доступ к динамической переменной?
4. Что представляют из себя элементы динамической структуры «список»?
5. Из каких частей состоит запись, являющаяся элементом динамической структуры список?