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

Implementation

Var FifoError:0..2;

Procedure InitFifo;

Begin

f.Uk1:=0;

f.n:=0;

f.Uk2:=0;

FifoError:=fifook

End;

Function EmptyFifo;

Begin

EmptyFifo:=f.n=0

End;

Function FullFifo;

Begin

FullFifo:=f.n=fifosize

End;

Procedure PutFifo;

Begin

if not FullFifo(f) then

begin

inc(f.n);

inc(f.Uk2);

f.buf[f.Uk2]:=El;

f.Uk2:=f.Uk2 mod fifosize;

FifoError:=fifook

end

else FifoError:=fifofull

End;

Procedure GetFifo;

Begin

if not EmptyFifo(f) then

begin

dec(f.n);

el:=f.buf[f.Uk1];

inc(f.Uk1);

f.Uk1:=f.Uk1 mod fifosize;

FifoError:=fifook

end

else FifoError:=fifoempty

End;

Function ReadFifo;

Begin

ReadFifo:=f.buf[f.Uk1]

End;

End.

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

Unit UFifoL;{очередь на списке}

Interface

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

fifoempty=2;{очередь пуста}

Type BaseType=byte;

ElPtr=^Element;

Fifo=record

PStart,PEnd:ElPtr

end;

Element=record

Data:BaseType;

Link:ElPtr

end;

Var error:byte;

Procedure InitFifo (var f:Fifo);{конструктор}

Function EmptyFifo (var f:Fifo):boolean;{очередь пуста?}

Function FullFifo (var f:Fifo):boolean;{очередь полна?}

Procedure GetFifo (var f:Fifo; var el:BaseType);{удаление элемента из очереди}

Procedure PutFifo (var f:Fifo; el:BaseType);{помещение элемента в очередь}

Function ReadFifo(f:Fifo;el:BaseType):BaseType;{чтение первого элемента из очереди}

Implementation

Procedure InitFifo;

Begin

New(f.PStart);

f.PEnd:=f.PStart;

f.PStart^.Data:=0;

f.PStart^.Link:=nil;

error:=fifook

End;

Function EmptyFifo;

Begin

EmptyFifo:=(f.PStart = f.PEnd);

End;

Function FullFifo;

Begin

FullFifo:=MaxAvail<SizeOf(Element);

error:=fifook

End;

Procedure PutFifo;

Begin

if not FullFifo(f) then

with f do

begin

New(PEnd^.link);

PEnd:=PEnd^.link;

PEnd^.Data:=el;

PEnd^.link:=nil;

error:=fifook

end

End;

Procedure GetFifo;

var Buf:ElPtr;

Begin

if not EmptyFifo(f) then

begin

Buf:=f.PStart;

El:=f.PStart^.Data;

f.PStart:=f.PStart^.link;

Dispose(Buf);

error:=fifook

end

else error:=fifoempty

End;

Function ReadFifo;

var Buf:ElPtr;

Begin

if not EmptyFifo(f) then

begin

Buf:=f.PStart;

ReadFifo:=f.PStart^.Data;

error:=fifook

end

else error:=fifoempty

End;

End.

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

unit UStackM;{стек на массиве}

Interface

Const stacksize = 10;{размер стека}

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

stackover = 1;{стек переполнен}

stackunder = 2;{стек пуст}

Var StackError: byte;

Type Index = 0..StackSize;

BaseType = word;

Stack = record

buf: array [Index] of BaseType;

uk: Index;{указатель на верхний элемент стека}

end;

Procedure InitStack(var S:Stack);{конструктор}

Function EmptyStack(S:Stack):boolean;{стек пуст?}

Function FullStack(S:Stack):boolean;{стек полон?}

Procedure PutStack(var S:Stack;El:BaseType);{помещение элемента в стек}

Procedure GetStack(var S:Stack;var El:BaseType);{удаление элемента из стека}