# Doubly Linked Lists. One powerful variation of a linked list is the doubly linked list. The doubly linked list structure is one in which each node has.

## Presentation on theme: "Doubly Linked Lists. One powerful variation of a linked list is the doubly linked list. The doubly linked list structure is one in which each node has."— Presentation transcript:

One powerful variation of a linked list is the doubly linked list. The doubly linked list structure is one in which each node has a pointer to both its successor and its predecessor. nextprevelemnextprevelemnextprevelem head tail

Doubly Linked Lists struct Node { char element; Node *prev; Node *next; Node(const char& e=char(), Node *p=NULL, Node *n=NULL) : element(e), prev(p), next(n) { } };

Sentinel Nodes As always, implementation of a data structure is up to the individual. However, one way of implementing a double linked list is to create sentinel nodes at the beginning and end of the list. – Pointers to the sentinel nodes can be stored in a data structure as data members – Advantage: Not necessary to treat the front or rear differently when inserting or removing nextprevelem nextprevelemnextprevelem nextNULLhead NULLprevtail

Deque - Double-Ended Queues A Deque (pronounced ‘deck’) is a data structure in which items may be added to or deleted from the head or the tail. They are also known as doubly-ended queues. The Deque is typically implemented with a linked list, providing easy access to the front and the back of the list, although a dynamic array could also be used for this.

Deque - Double-Ended Queues The deque data structure typically has the following features: – How are the data related? Sequentially – Operations insertFirst - inserts an element at the front of a deque insertLast - inserts an element at the rear of a deque removeFirst - removes an element from the front of a deque removeLast - removes an element from the rear of a deque (Note that the previous 2 functions did not return and data values) First - returns a reference to the element at the front last - returns a reference to the element at the rear size, isEmpty

Deque Advantages Removing a node from the rear of a singly linked list was inefficient because we had to find the next-to-last by searching from the head The deque is implemented with a doubly linked list. Therefore, now, removing from the rear is not a problem.