Добавил:
Studfiles2
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:
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.
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.
Соседние файлы в папке Вопросы к экзамену с ответами и демо-программами на Паскале