[Back to POINTERS SWAG index] [Back to Main SWAG index] [Original]
Unit Q;
(***************************************************************************)
(* Unit Name: Queue *)
(* Author: William Hobday *)
(* Last Modified: March 2, 1989 *)
(* *)
(* Description: This unit implements a queue in an array implementation *)
(* using the following documented procedures: *)
(* NewQueue : queue *)
(* EnQueue( queue,value ) *)
(* DeQueue( queue ) : value *)
(* Empty( queue ) : boolean *)
(***************************************************************************)
interface
Const Max_Q = 50;
type Queue = record
Data: array[1..max_Q] of char;
Head,
Tail,
Length: integer;
end;
Procedure NewQueue( var Q: Queue );
Procedure EnQueue( var Q: Queue; Name : char );
Function DeQueue( var Q: Queue ) : char;
Function Empty( Q: Queue ) : boolean;
implementation
(***************************************************************************)
(* Name: NewQueue *)
(* *)
(* Purpose: Creates a new empty Queue *)
(* Input: Q - the Q to be created *)
(* Output: Q - a new empty Q *)
(***************************************************************************)
Procedure NewQueue(var Q: Queue);
begin
With Q do
begin
Head := 1;
Tail := 0;
Length := 0
end
end;
(***************************************************************************)
(* Name: EnQueue *)
(* *)
(* Purpose: Creates a new node containing the given info and places it *)
(* on the end of the Q *)
(* Input: Q - Q to be appended on *)
(* Name - data to be added to Q *)
(* Output: Q - the modified Q *)
(***************************************************************************)
Procedure EnQueue(var Q: Queue; Name: char);
begin
with Q do
if length < Max_Q
then
begin
inc( Length );
Tail := ( Tail+1 ) mod Max_Q;
Data[ Tail ] := Name
end
else writeln('Error --- Queue Overflow ---')
end;
(***************************************************************************)
(* Name: DeQueue *)
(* *)
(* Purpose: Removes node at the head of the queue and returns data *)
(* Input: Q - Queue to be modified *)
(* Output: DeQueue - Name deleted from list *)
(***************************************************************************)
Function DeQueue(var Q: Queue) : char;
begin
with Q do
if length > 0
then begin
dec( length );
DeQueue := Data[head];
head := ( head+1 ) mod Max_Q
end
else writeln('Error --- Queue underflow ---')
end;
(***************************************************************************)
(* Name: Empty *)
(* *)
(* Purpose: Returns TRUE if Q is empty *)
(* Input: Q - Queue to be evaluated *)
(* Output: Empty - Result of Function *)
(***************************************************************************)
Function Empty( Q: Queue ) : boolean;
begin
if Q.length > 0
then Empty := false
else Empty := true
end;
end.
[Back to POINTERS SWAG index] [Back to Main SWAG index] [Original]