In the simplist dynamic memory implementation of a queue, the data part of the linked list record is a simple type (integer, real, booean, etc). As an example, in the type below the data part of the linked list record node is an integer. There are two queue pointers to the list : front points to the first node, and rear to the last node on the linked list.
type
pointer = ^node;
Node = RECORD
Data : integer;
Next : pointer
END (* Node *);
Queue = RECORD
Front, Rear : pointer;
END (* Queue *);
In a slightly more complex implementation of a queue, the data part is
a pointer to a tree node, and as seen below is of type Nodeptr.
TYPE (* Records for trees *)
NodePtr = ^Parent;
Parent = RECORD
Info: integer;
Left, Right: NodePtr
END;
(* Records for queues *)
Pointer = ^Node;
Node = RECORD
Data: NodePtr;
Next: Pointer
END (* Node *);
Queue = RECORD
Front, Rear:Pointer
END (* Queue *);
Again, front points to the first node on the linked list, and
rear, to the last node. Assume in the following that var
q : queue. In both cases, q.front := nil (and
q.rear := nil) initializes the queue; Append(q, x)
adds a node whose data part has the value x to the
end of the queue; and Remove(q, x) removes the first node
from the list. The type of x, of course, varies with the type
definition. In the former case, its integer; in the latter,
NodePtr.