9.13. Linked Queues¶
9.13.1. Linked Queues¶
The linked queue implementation is a straightforward adaptation of the linked list. Here is the linked queue class declaration.
front
and rear
are pointers to the front and rear queue elements, respectively.- // Linked queue implementation
- class LQueue implements Queue {
- private Link front; // Pointer to front queue node
- private Link rear; // Pointer to rear queue node
- private int size; // Number of elements in queue
- // Constructors
- LQueue() { init(); }
- LQueue(int size) { init(); } // Ignore size
- // Initialize queue
- void init() {
- front = rear = new Link(null);
- size = 0;
- }
9.13.2. Linked Dequeue¶
dequeue
operation.- // Remove and return element from front
- public Object dequeue() {
- if (size == 0) return null;
- Object it = front.next().element(); // Store the value
- front.setNext(front.next().next()); // Advance front
- if (front.next() == null) rear = front; // Last element
- size--;
- return it; // Return element
- }
9.13.3. Comparison of Array-Based and Linked Queues¶
All member functions for both the array-based and linked queue implementations require constant time. The space comparison issues are the same as for the equivalent stack implementations. Unlike the array-based stack implementation, there is no convenient way to store two queues in the same array, unless items are always transferred directly from one queue to the other.