Как правильно сделать проход по кольцевой очереди?

Как правильно сделать проход по очереди для вывода информации этой очереди?

просто пробежаться по массиву от 0 до Arr_Size(длинна массива) нельзя( комментарий препода "проход по очереди надо делать не по массиву, а по ОЧЕРЕДИ, от первого в ОЧЕРЕДИ до последнего в ОЧЕРЕДИ (а не в массиве)!" Но как это сделать?

Если добавить все 3 элемента в очередь, те образовав кольцевую ситуацию,то выводиться только 1 элемент, тк First:=0 а Last:=0

Если сделать цикл от First to First+CountClient-1, то при полной очереди выводятся все элементы, но стоит 1 удалить, а затем добавить, то вывод будет только 2ух элементов, тк у нас First:=1 а First+CountClient-1:=3, те элемент под индексом "0" просто пропускается

function TBank.AddClient (Client:TClient):boolean;
begin
if (CountClient<=Arr_Size) then
begin
 Clients[Last]:=Client;    //добавление в конец колц.очереди
 Last:=Last+1;                               //ув.счетчика
    if (Last>Arr_Size) then begin
Last:=0;   end;
inc(CountClient);
result:=true;
  end  else begin
  result:=false; end;
   end;
//----------------------------------------------------------------------

function TBank.DeleteClient :boolean;
begin
if (CountClient=0) then begin
result:=false; end
else
begin
Clients[First]:=NIL;
Clients[First].Free;
First:=First+1;                            
if (First>Arr_Size) then begin
 First:=0;
 end;
   CountClient:=CountClient-1;
   result:=true;
   end;end;
 //----------------------------------------------------------------------


function TBank.OutputFullInfo:string;
var i,c:integer;
begin
result:='';
if CountClient=0 then result:=''
else begin
for i:= first to Last do
begin
 if Clients[i]<>nil then begin
 result:=result+Clients[i].GetNameClient+#10#13;
 result:=result+Clients[i].FullInfoOperationsWithDeposits+#10#13;
  end else
  end;
end;
end;

Ответы (0 шт):