- •Модули для лабораторных работ.
- •Var I:byte;
- •Var I:Index;
- •Var I:byte;
- •Interface
- •V:BaseType;
- •Var TablError:byte;
- •Implementation
- •Var I:index;
- •Interface
- •Var tablerror:byte;
- •Implementation
- •Interface
- •Var TablError:byte;
- •Implementation
- •Var I:index;
- •Interface
- •Var TablError:byte;
- •Implementation
- •Var I:index;
- •Interface
- •Implementation
- •Var I:index;
- •Interface
- •Implementation
- •Interface
- •Implementation
- •Interface
- •Implementation
- •Interface
- •Implementation
- •Interface
- •Implementation
- •Interface
- •Implementation
- •Interface
- •Implementation
- •Interface
- •Implementation
- •Interface
- •Implementation
- •Interface
- •Implementation
- •Interface
- •Implementation
Interface
Const ok=0;{успешное выполнение операции}
notfound=1;{элемент в дереве отсутствует}
notmem=2;{не хватает памяти}
keyexist=3;{элемент с таким ключом уже есть в дереве}
error:byte=ok;
Type basetype=word;
keytype=word;
elptr=^element;
element=record
key:keytype;
data:basetype;
rson,lson:elptr;
end;
tree=elptr;
Procedure InitTree(var t:tree);{конструктор}
Procedure PutTree(var t:tree; e:basetype; k:keytype);{помещение элемента в
дерево}
Procedure GetTree(var t:tree; var e:basetype; k:keytype);{удаление элемента
из дерева}
Function EmptyTree(var t:tree):boolean;{дерево пусто?}
Procedure DoneTree(var t:tree);{деструктор}
Implementation
Procedure InitTree;
Begin
t:=nil;
error:=ok;
End;
Procedure PutTree;
Begin
if sizeof(element)<maxavail then
if t=nil then
begin
new(t); t^.key:=k; t^.data:=e;
t^.lson:=nil; t^.rson:=nil;
error:=ok;
end
else
if k>t^.key then PutTree(t^.rson,e,k)
else if k<t^.key then PutTree(t^.lson,e,k)
else error:=keyexist
else error:=notmem;
End;
Procedure GetTree;
var q:tree;
Procedure Del(var r:tree);
Begin
if r^.rson<>nil then Del(r^.rson)
else begin
q^.key:=r^.key;
q^.data:=r^.data;
q:=r; r:=r^.lson;
end
End;{Del}
Begin
if t=nil then error:=notfound
else if k<t^.key then GetTree(t^.lson,e,k)
else if k>t^.key then GetTree(t^.rson,e,k)
else {исключение t^}
begin
e:=t^.data; q:=t;
error:=ok;
if (t^.rson=nil)and(t^.lson=nil) then
begin
dispose(q);
t:=nil
end
else if (t^.rson<>nil)and(t^.lson=nil) then
begin
t:=q^.rson;
dispose(q)
end
else if (t^.rson=nil)and(t^.lson<>nil) then
begin
t:=q^.lson;
dispose(q)
end
else
begin
Del(q^.lson);
dispose(q);
end
end;
error:=ok;
End;
Procedure DoneTree;
Procedure Clear(t:tree);
Begin
if t<>nil then
begin
Clear(t^.lson);
Clear(t^.rson);
Dispose(t)
end;
End;{Clear}
Begin
Clear(t);
error:=ok;
End;
Function EmptyTree;
Begin
EmptyTree:=t=nil;
End;
End.
{-----------------------------------------------------------------------------}
unit dstree;{сбалансированное бинарное дерево}
Interface
Const ok=0;{успешное завершение операции}
notfound=1;{элемент в дереве отсутствует}
notmem=2;{не хватает памяти}
keyexist=3;{элемент с таким ключом уже есть в дереве}
error:byte=ok;
Type basetype=integer;
keytype=word;
elptr=^element;
element=record
key:keytype;
data:basetype;
rson,lson:elptr;
bal:integer;
end;
tree=elptr;
Procedure InitTree(var t:tree);{конструктор}
Procedure PutTree(var t:tree; e:basetype; k:keytype;var h:boolean);
{помещение элемента в сбалансированное дерево}
Procedure GetTree(var t:tree; var e:basetype; k:keytype;var h:boolean);
{удаление элемента из сбалансированного дерева}
Function EmptyTree(var t:tree):boolean;{дерево пусто?}
Procedure DoneTree(var t:tree);{деструктор}
