Частина тексту файла (без зображень, графіків і формул):
Міністерство освіти і науки України
Національний університет «Львівська Політехніка»
Кафедра
Інформаційних
систем та мереж
Лабораторна робота №5
на тему
Робота з динамічними структурами.
Мета роботи: набуття практичних навичок опрацювання таких динамічних структур як зв’язні списки і дерева.
Постановка завдання
Розробити програми які виконують операції вказані в індивідуальному завданні.
Програму для роботи з двонаправленими зв’язними списками. Кожен елемент списку містить посилання на наступний і попередній елемент в списку. Програма повинна забезпечувати ввід і побудову списку.
Програму для роботи для роботи з деревами. Кожен елемент дерева містить посилання на батьківський елемент і посилання на елементи-нащадки (необмежена кількість). Програма повинна забезпечувати ввід і побудову дерева.
Кожен елемент списку містить інформаційне поле(атрибут) деякого простого типу: символ, стрічка, число.
Всі операції над динамічними структурами повинні супроводжуватись відповідним виводом на екран.
В контрольних прикладах забезпечити опрацювання структур з 10-20 елементами.
Індивідуальні завдання:
8
Доповнення списку з обох кінців.
Видалення елемента з дерева за вказаним значенням інформаційного атрибуту.
Текст програми 1:
program L5_1;
uses Crt;
const max=10;
type
TStack = ^TItem;
TItem = record
data: integer;
next,prev: TStack;
end;
var c: integer;
ch: char;
left: boolean;
st,tmp,a1: TStack;
procedure Add2R(v: integer);
Begin
New(tmp);
tmp^.data:=v;
tmp^.next:=nil;
st^.next:=tmp;
Inc(c);
end;
procedure Add2L(v: integer);
Begin
New(tmp);
tmp^.data:=v;
tmp^.next:=a1^.next;
tmp^.prev:=a1;
a1^.next:=tmp;
Inc(c);
end;
procedure WriteArr;
Begin
WriteLn('');
If left then Write('->[') else Write(' [');
st:=a1^.next;
while st^.next<>nil do
Begin
Write(st^.data);
st:=st^.next;
If st^.next<>nil then Write(',');
end;
If left then WriteLn('] ') else WriteLn(']<-');
WriteLn;
If c>0 then WriteLn(' ',c,' elements in list') else WriteLn(' List is empty');
WriteLn;
WriteLn(' [Left]\[Right] - change direction');
WriteLn(' [+] - add random element');
WriteLn(' [Esc] - exit');
end;
Begin
Randomize;
New(a1);
New(st);
st^.data:=random(100);
st^.prev:=a1;
st^.next:=nil;
a1^.next:=st;
c:=1;
left:=true;
repeat
ClrScr;
WriteArr;
ch:=ReadKey;
case ch of
#75: left:=true;
#77: left:=false;
'+': If left then Add2L(random(100)) else Add2R(random(100));
end;
until ch=#27;
end.
Результати виконання програми:
Текст програми 2:
program L5_2;
uses Crt;
type Tree = ^S;
S = record
data: integer;
left, right: tree;
end;
var del,cnt,c,i: integer;
t: Tree;
procedure AddElem(n: integer; var tr: Tree);
procedure Add(var trr:Tree);
begin
if trr=nil then
begin
new(trr);
trr^.data:=n;
trr^.left:=nil;
trr^.right:=nil;
end
else
if trr^.data>n then Add(trr^.left)
else
if trr^.data<n then Add(trr^.right);
end;
begin
Add(tr);
end;
procedure WriteTree;
procedure WriteItem(p: Tree);
Begin
if p<>nil then
begin
if p^.left<>nil then write('L: ') else write('R: ');
WriteLn(p^.data);
WriteItem(p^.left);
WriteItem(p^.right);
Inc(c);
end;
end;
Begin
c:=0;
WriteItem(t);
WriteLn(c,' elements in the tree');
WriteLn('Enter item data to delete it(-1 to exit):');
end;
procedure Delete(e: integer; var tr: Tree);
procedure Go(var tr: Tree);
var left,right: Tree;
begin
if tr<>nil then
begin
Go(tr^.left);
Go(tr^.right);
if tr^.data=e then
begin
left:=tr^.left;
right:=tr^.right;
dispose(tr);
tr:=nil;
if left=nil then tr:=right
else
if right=nil then tr:=left
else
begin
tr:=left;
while left^.right<>nil do
left:=left^.right;
left^.right:=right;
end;
end;
end;
end;
begin
Go(tr);
end;
{--------=[MaiN]=--------}
Begin
Randomize;
ClrScr;
WriteLn('How many elements do you want to add to the tree?');
ReadLn(cnt);
For i:=1 to cnt do AddElem(random(100),t);
repeat
ClrScr;
WriteTree;
ReadLn(del);
If del<>-1 then Delete(del,t) else Exit;
until false;
end.
Результати виконання програми:
Висновки:
При виконанні даної роботи я набув практичних навичок опрацювання таких динамічних структур як зв’язні списки і дерева.
Ви не можете залишити коментар. Для цього, будь ласка, увійдіть
або зареєструйтесь.
Ділись своїми роботами та отримуй миттєві бонуси!
Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!