- •Динамическая память и динамические структуры данных
- •Переменные – указатели
- •1 Способ.
- •2 Способ.
- •3 Способ.
- •4 Способ.
- •Динамические переменные
- •Динамические структуры данных
- •Связанные динамические списки
- •Программа формирования динамического списка
- •Ivanov Стек
- •X, y, verh : pstack;
- •Очередь
- •Else Begin
Программа формирования динамического списка
Program Dinlist;
Type p_stud =^student;
student =record
fam : string[20];
next : p_stud;
End;
Var head: p_stud; {указатель на первый элемент}
curr: p_stud; {указатель на текущий элемент}
s: string[20];
Begin
Repeat
Write (‘vvod fam_’);
Readln (s);
If Length (s) < > 0 then
begin
new (curr); {создание нового элемента, указатель curr
получает адрес свободной ячейки дин. памяти}
curr ^ . fam : = s; {информационное поле fam
принимает знач. s}
curr ^ . next : = head; {указатель нового элемента принимает
значение указателя head}
head : = curr; {head принимает значение адреса нового
элемента}
end;
Until length (s) = 0;
writeln (‘vvedenii spisok:’);
curr : = head; {curr принимает значение указателя начала}
while curr < > nil do
begin
writeln (curr ^ . fam); {печатается информационное поле
ячейки по адресу текущего указателя}
curr : = curr ^ . next; {текущий указатель принимает значение
адреса следующего элемента}
end;
readln;
End.
Рассмотрим подробно один шаг цикла формирования списка, т.е. добавления, например, второго элемента в начало списка: в списке есть Иванов, добавляем Петрова.
1. New (curr);
С
head
2. curr ^. fam : = s;
Информационное поле fam по новому адресу принимает значение введенной с клавиатуры фамилии (Петров).
curr ^ . next : = head;
Указатель нового элемента принимает значение указателя head, т.е. указывает на ячейку, на которую указывает head.
head
3. head : = curr; – head указывает на адрес нового элемента
Рассмотрим результат работы этой программы на экране.
vvod fam - Ivanov
vvod fam - Petrov
vvod fam - Sidorov
vvod fam –
vvedenii spisok: Sidorov
Petrov
Ivanov Стек
С тек – структура переменной длины, в которой добавление новых элементов и удаление существующих производятся с одного конца, называемого вершиной стека.
LIFO
Занесение данных в стек производится аналогично вставке нового элемента в начало списка. Для извлечения элемента из стека некоторой переменной нужно присвоить значение первого элемента с вершины стека. После этого должно быть изменено значение указателя на вершину стека.
Пример: Создать стек для хранения целых чисел. Предусмотреть создание стека, т.е. добавление новых элементов по порядку. Затем организовать доступ к вершине стека и удаление элементов из стека. Вывести на экран их значения по порядку.
Условимся называть verh - указатель на вершину стека;
у – указатель текущего элемента при создании стека;
х – указатель текущего элемента при извлечении данных из стека;
а – переменная для ввода чисел с клавиатуры;
b – переменная для вывода чисел на экран.
Program st;
Type
Pstack = ^ stack;
Stack = record
Data : integer;
Next : pstack;
End;
Var