type
elem=^zapis;
zapis=record
name:string;
next:elem;
end;
var
a1,a:elem;
begin
new(a1);
a1^.name:='Иванов';
a1^.next:=nil;
writeln(a1^.name);
{Добавимо елемент 'Петров' на початок}
writeln('Формування стеку:');
new(a);
a^.name:='Петров';
a^.next:=a1;
write(a^.name,' ');
a:=a^.next;
writeln(a^.name);
end.
Результат роботи програми:
Иванов
Формування стеку:
Петров Иванов
Приклад 2. Наступна програма демонструє формування безкінечного стеку.
type
elem=^zapis;
zapis=record
name:string;
next:elem;
end;
var a1,a:elem;
name:string;
begin
repeat
readln(name);
if name<>'' then
begin
new(a);
a^.name:=name;
a^.next:=a1;
a1:=a;
end;
until name='';
while a<>nil do
begin
writeln(a^.name);
a:=a^.next;
end;
end.
Результат роботи програми:
елемент1
елемент2
елемент3
елемент4
елемент5
елемент6
елемент6
елемент5
елемент4
елемент3
елемент2
елемент1
Розглянемо докладніше як працює з попереднього прикладу структура:
new(a);
a^.name:=name;
a^.next:=a1;
a1:=a;
При повторному виконанні вказівок:
new(a);
a^.name:=name;
a^.next:=a1;
a1:=a;
в пам’яті ПК відбудуться наступні перетворення:
Бачимо, що кожен наступний елемент (Name2) встановлюється на початок списку. Останній елемент, який увійде у стек – перший з нього виходить (він буде на першому місці, тобто при читанні стеку, буде першим).
ЗВ’ЯЗАНИЙ СПИСОК. ЧЕРГА.
Формування черги (вставка елементів в кінець списку).
| ||||||||
| ||||||||
Після створення динамічної змінної s^,поміщаємо в неї «Ільчук». Потім необхідно на цей елемент «напрямити» вказівник елемента sn^ (динамічна змінна sn^ містить вказівник next . А отже, sn^.next:=s;). Після цього елемент «Ільчук» добавиться в кінець списку. Але вказівник sn ще вказує на попередньо останній елемент (тобто на «Сидоров»). Напрямимо його на «Ільчук» (на «Ільчук вказує s. Отже, sn:=s).
Розглянемо схематично дію програмного коду вставки елемента в чергу.
type
elem=^zapis;
zapis=record
name:string;
next:elem;
end;
var
s1, s, sn:elem;
begin
new(s);
readln(name);
s^.name:=name;
s^.next:=nil;
if s1=nil then s1:=s
else sn^.next:=s;
sn:=s;
end.
В результаті роботи такої програми три вказівника будуть вказувати на перший елемент черги.
При повторному виконанні вказівок
new(s);
readln(name);
s^.name:=name;
s^.next:=nil;
if s1=nil then s1:=s
else sn^.next:=s;
sn:=s;
новий елемент s^ буде добавлено в кінець списку. При цьому s1 буде вказувати на перший елемент списку, а s та sn – на добавлений елемент списку (останній елемент).
Розглянемо на схемі повторну дію згаданих вище вказівок:
ТЕКСТ ПРОГРАМИ ФОРМУВАННЯ ЧЕРГИ:
type
elem=^zapis;
zapis=record
name:string;
next:elem;
end;
var s1, s, sn:elem;
name:string;
BEGIN
s1:=nil; s:=nil;
repeat
new(s);
readln(name);
if name<>’’ then begin
s^.name:=name;
s^.next:=nil;
if s1=nil then s1:=s;
else sn^.next:=s;
sn:=s;
end;
until name=’’;
while s1<>nil do begin
writeln('--',s1^.name);
s1:=s1^.next;
end;
END .
Дата: 2019-05-29, просмотров: 181.