Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Структуры Данных_модули.DOC
Скачиваний:
28
Добавлен:
23.06.2014
Размер:
84.99 Кб
Скачать

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);{деструктор}