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.