Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
УМК_ОАиП.doc
Скачиваний:
6
Добавлен:
01.04.2025
Размер:
5.06 Mб
Скачать

Лабораторная работа № 38.

Тема: Разработка алгоритмов и программ с использованием динамических структур данных.

Цель работы: Научиться разрабатывать алгоритмы и программы с использованием динамических структур данных.

Средства: ПЭВМ, среда разработки Pascal.

Актуализация опорных знаний

1. Динамические структуры данных.

2. Понятие стека.

3. Понятие очереди.

4. Односвязные и двухсвязные линейные списки и кольца.

5. Бинарные деревья.

Примеры выполнения заданий

Задание 1: Разработать алгоритм и программу решения задачи, которая выполняет операции со стеком: формирует стек, извлекает из него элемент.

Uses Crt;

Type

Exst=^st;

st=Record

data:integer;

next:Exst;

end;

Var

i,a:integer;

stack:Exst;

Flag:boolean;

Procedure Print(Var u:exst);

Begin

Writeln('Ваш стек');

While u<>nil do

begin

Write(u^.data,' ');

u:=u^.next;

end;

End;

Procedure WriteStack(Var u:Exst);

Var

x:exst;

Begin

u:=nil;

Writeln('Введите элементы стека.Конец ввода -0');

Read(i);

65

While i<>0 do

begin

New(x);

x^.data:=i;

x^.next:=u;

u:=x;

Read(i);

end;

End;

Procedure ReadStack(Var u:Exst);

Var

x:Exst;

Begin

x:=u;

u:=u^.next;

Dispose(x);

End;

Function Free(Var u:Exst):boolean;

Begin

If u=nil

Then

Free:=False

Else

Free:=True;

End;

Begin

ClrScr;

Writeln('Выберите вид работы:');

Writeln('1:Формирование стека');

Writeln('2:Извлечение элемента из стека');

Writeln('0:Выход');

Readln(a);

If a=1

Then

begin

WriteStack(stack);

Print(stack);

end;

If a=2

Then

begin

While not Flag do

begin

Writeln('Стек пустой,чтобы извлечь элемент');

Writeln('надо его сформировать');

WriteStack(stack);

Flag:=Free(stack);

end;

ReadStack(stack);

Print(stack);

end;

Readln;

66

Readln;

End.

Задание 2: Разработать алгоритм и программу решения задачи, которая выполняет операции с очередью: формирует очередь, извлекает элемент из очереди.

Uses Crt;

Type

EXO=^O;

O=Record

data:integer;

next:EXO;

end;

Var

i,a:integer;

x1,x2:Exo;

Procedure Print;

Var

u:ExO;

Begin

u:=x1;

Writeln('Ваша очередь');

While (u<>nil) do

begin

Write(u^.data,' ');

u:=u^.next;

end;

Writeln;

End;

Procedure WriteO(Var x1,x2:Exo);

Var

u:Exo;

Begin

x1:=Nil;

x2:=Nil;

Writeln('Введите элементы очереди.Конец ввода-0');

Read(i);

While i<>0 do

begin

New(u);

u^.data:=i;

u^.next:=Nil;

If x1=Nil

Then

x1:=u

Else

x2^.next:=u;

x2:=u;

Read(i);

67

end;

Print;

End;

Procedure ReadO(Var x1,x2:Exo;Var i:integer);

Var

u:Exo;

Function Nul(x1:Exo):boolean;

Begin

Nul:=(x1=nil);

End;

Begin

If Nul(x1)

Then

begin

Writeln('Очередь пуста');

WriteO(x1,x2);

i:=x1^.data;

u:=x1;

x1:=x1^.next;

Dispose(u);

end

Else

Begin

i:=x1^.data;

u:=x1;

x1:=x1^.next;

Dispose(u);

End;

Print;

End;

Begin

ClrScr;

Writeln('Введите вид работы:');

Writeln('1:Формирование очереди');

Writeln('2:Извлечение элемента из очереди');

Writeln('0:Выход');

Readln(a);

Case a of

1:WriteO(x1,x2);

2:ReadO(x1,x2,i);

end;

Readln;

Readln;

End.