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

Interface

Const tablsize = 100; {размер таблицы}

tablok = 0; {успешное завершение операции}

tablover = 1; {таблица переполнена}

tablunder = 2; {таблица пуста}

tablelnotfound = 3; {элемент не найден}

Type Index = 0..TablSize;

BaseType = Word;

Element = record

k:Integer;

V:BaseType;

end;

Tabl = record

buf:array [Index] of Element;

uk:Index;

end;

Var TablError:byte;

Procedure InitTabl (var T:Tabl);{конструктор}

Function EmptyTabl (var T:Tabl):boolean;{таблица пуста?}

Function FullTabl (var T:Tabl):boolean;{таблица переполнена?}

Procedure PutTabl (var T:Tabl; El:Element);{включение элемента}

Function GetTabl (var T:Tabl; var El:Element; key:integer):boolean;{исключение элемента}

Function LineFind (var T:Tabl; key:integer; var El:Element; var n:Index):boolean; {линейный поиск}

Function FastLineFind (var T:Tabl; key:integer; var El:Element; var n:Index): boolean; {быстрый линейный поиск}

Function BinFind (var T:Tabl; key:integer; var El:Element; var n:Index):boolean; {бинарный поиск}

Implementation

Procedure InitTabl;

Var I:index;

Begin

T.uk:=0;

TablError:=2

End;

Function EmptyTabl;

Begin

if T.uk=0 then TablError:=tablunder;

EmptyTabl:=T.uk=0;

End;

Function FullTabl;

Begin

if T.uk=TablSize then TablError:=tablover;

FullTabl:=T.uk=tablsize;

End;

Procedure PutTabl;

Begin

if not FullTabl (T) then

begin

inc(T.uk);

T.buf[T.uk]:= El;

TablError:= tablok;

end

else TablError:= tablover;

End;

Function GetTabl;

var i:byte;

n:Index;

Begin

if not(EmptyTabl(T)) then

if LineFind(T,key,el,n) then

begin

el:=T.buf[n];

T.buf[n]:=T.buf[T.uk-1];

Dec(T.uk);

TablError:=TablOk;

end

else TablError:=tablelnotfound;

End;

Function LineFind;

var i:Index;

Begin

i:=0;

TablError:=TablElNotFound;

while (i<T.uk) and (TablError=TablElNotFound) do

begin

if T.buf[i].k=key then

begin

TablError:=TablOk;

el:=T.buf[i];

n:=i;

end;

Inc(i);

end;

LineFind:=TablError=TablOk;

End;

Function FastLineFind;

var i:byte;

f:boolean;

Begin

f:=false;

i:=0;

T.buf[T.uk+1].k:=key;

While not(f) do

begin

if T.buf[i].k=key then

begin

f:=true;

el:=T.buf[i];

n:=i;

end;

Inc(i);

end;

if n=T.uk+1 then TablError:=TablElNotFound

else TablError:=TablOk;

FastLineFind:=TablError=TablOk;

End;

Function BinFind;

var i,j,k:Index;

f:boolean;

Begin

i:=0;

j:=T.uk-1;

f:=false;

repeat

k:=(i+j) div 2;

if T.buf[k].k=key then

begin

f:=true;

el:=T.buf[i];

end;

if T.buf[k].k>key then i:=k+1

else j:=k-1;

until f or (i>j);

if f then TablError:=TablOk

else begin

n:=i;

TablError:=TablElNotFound;

end;

End;

End.

{---------------------------------------------------------------------------}

unit UTreeTab; {таблица на дереве}