unit QUEUE;
INTERFACE
type
 TElem = Integer; { тип эл-тов очереди}
 TList = ^Telement;
 TElement = record
             INFO:TElem;
             NEXT : TList
            end;
 TQueue = record
           head:TList;
           tail:TList;
          end;
 procedure QueueInit (VAR Q:TQueue); {INIT}
 Function QueueEmpty(Q:TQueue):boolean; {проверка на заполненность}
 Procedure QueuePush(var q:TQueue; e:TElem);  {поместить в хвост}
 Function QueuePop(var q:TQueue):TElem;       {извлечь из хвоста}
IMPLEMENTATION
 procedure QueueInit (VAR Q:TQueue);
 begin
  q.head:=nil
 end;
 Function QueueEmpty(Q:TQueue):boolean;
 begin
  QueueEmpty:=(Q.HEAD=nil)
 end;
 Procedure QueuePush(var q:TQueue; e:TElem);
 var z:Tlist;
 begin
  new(z);
  z^.info:=E;
  z^.next:=nil;
  If QueueEmpty(q) then q.head:=z else q.tail^.next:=z;
  q.tail:=z
 end;
 Function QueuePop(var q:TQueue):TElem;
 var
  z:TList;
 begin
  z:=q.head;
  q.head:=z^.next;
  QueuePop:=Z^.info;
  dispose(z)
 end;
end.