Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
динамические структуры.doc
Скачиваний:
4
Добавлен:
14.09.2019
Размер:
154.11 Кб
Скачать

Программа формирования динамического списка

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

оздание нового элемента, указатель curr получает адрес свободной ячейки динамической памяти.

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