Скачиваний:
4
Добавлен:
01.05.2014
Размер:
1.39 Кб
Скачать
type

TIterator=procedure (AItem:pointer);

PListItem=^TListItem;
TListItem=record
Data:pointer;
Next:PListItem;
end;

PFIFO=^TFIFO;
TFIFO=object
AList,BList:PListItem;
constructor Init;
destructor Done;
procedure Put(Element: pointer);
function Get:pointer;
procedure FreeItem(AItem: pointer); virtual;
procedure ForEach(AIterator:TIterator);
end;



constructor TFIFO.Init;
begin
AList:=Nil;
BList:=Nil;
end;

destructor TFIFO.Done;
var
P:PListItem;
begin
while AList<>Nil do
begin
P:=AList^.Next;
FreeItem(AList^.Data);
Dispose(AList);
AList:=P;
end;
end;

function TFIFO.Get:pointer;
var
P:PListItem;
GetData: pointer;
begin
if AList=Nil then begin Get:=nil; exit; end;
P:=AList^.Next;
GetData:=AList^.Data;
Dispose(AList);
AList:=P;
if AList=nil then BList:=AList;
Get:=GetData;
end;

Procedure TFIFO.Put(Element: pointer);
var
P: PListItem;
begin
New(P);
P^.Data:=Element;
if (BList=nil) and (AList=nil) then
begin
P^.Next:=nil;
AList:=P;
BList:=P;
end
else
begin
BList^.Next:=P;
P^.Next:=nil;
BList:=P;
end;
end;

procedure TFifo.FreeItem;
begin
end;

procedure ForEach(AIterator:TIterator);
var
Tmp:PListItem;
begin
Tmp:=AList;
while Tmp<>nil do
begin
AIterator(Tmp);
Tmp:=Tmp^.Next;
end;
end;



begin

end.
Соседние файлы в папке Вопросы к экзамену с ответами и демо-программами на Паскале