Requirements
In this sub-project, you will implement two classes:
- Sorted singly linked lists with a sentinel: Sorted_sentinel_list, and
- Singly linked nodes: Single_node.
A singly linked list with a sentinel and three nodes is shown in
Figure 1. The empty singly linked list with a sentinel is shown in Figure 2, the node marked S being
the sentinel node.
Figure 1. A singly linked list with a sentinel and three nodes.
Figure 2. An empty singly linked list with a sentinel.
Class Specifications
UML Class Diagram
Sorted_sentinel_list |
- list_head:Single_node
- list_tail:Single_node
- list_size:Integer
|
+ create():Sorted_sentinel_list
+ create( in sl:Sorted_sentinel_list ):Sorted_sentinel_list
+ size():Integer
+ empty():Boolean
+ front():Type
+ back():Type
+ head():Single_node
+ tail():Single_node
+ count( in obj:Type ):Integer
+ swap( inout list:Sorted_sentinel_list )
+ =( in rhs:Sorted_sentinel_list ):Sorted_sentinel_list
+ insert( in obj:Type )
+ push_back( in obj:Type )
+ pop_front():Type
+ erase( in obj:Type ):Integer
+ destroy()
|
Description
This class stores a finite list of n (zero or more) linearly ordered elements in that order stored in singly linked nodes.
If there are zero elements in the list, the list is said to be empty.
Each element is stored in an instance of the Single_node<Type> class.
At all times, the head pointer points to a sentinel node.
If the list is empty, the tail pointer points to the sentinel node.
Member Variables
The three member variables are:
- Two pointers to Single_node<Type> objects, referred to as the head pointer and tail pointer, respectively, and
- An integer referred to as the list size which equals the number of elements in the list.
Member Functions
Constructors
Sorted_sentinel_list()
The constructor creates an instance of a Single_node<Type> (called the sentinel). The value stored in this node is not important, you can use the default value or whatever value you want.
The next pointer of the sentinel should be nullptr.
The head and tail pointers are set to point at the sentinel.
The list size is set to 0. (O(1))
Destructor
The destructor must delete each of the nodes in the list including the sentinel. (O(n))
Copy Constructor
The copy constructor must create a new singly linked list with a copy of all of the
nodes within the linked list with the elements stored in the same order. Once a copy is made, any change to the original linked list
must not affect the copy. (O(n) and note that using insert will result in an O(n2) run-time)
Accessors
This class has seven accessors:
- int size() const;
- Returns the number of items in the list. (O(1))
- bool empty() const;
- Returns true if the list is empty, false otherwise. (O(1))
- Type front() const;
- Retrieves the object stored in the node pointed to by the next pointer of the sentinel. This function throws a underflow if the list is empty. (O(1))
- Type back() const;
- Retrieves the object stored in the node pointed to by the tail pointer. This function throws a underflow if the list is empty. (O(1))
- Single_node<Type> *head() const;
- Returns the head pointer. (O(1))
- Single_node<Type> *tail() const;
- Returns the tail pointer. (O(1))
- int count( Type const & ) const;
- Returns the number of nodes in the linked list storing a value equal to the argument. (O(n))
Mutators
This class has six mutators:
- void swap( Sorted_sentinel_list & );
- The swap function swaps all the member variables of this linked list with those of the argument. (O(1))
- Sorted_sentinel_list &operator=( Sorted_sentinel_list & );
- The assignment operator makes a copy of the argument and then swaps the member variables
of this sorted sentinel list with those of the copy. (O(nlhs + nrhs))
- void insert( Type const & );
- Creates a new Single_node<Type> storing the argument, placing
it into the correct location in the linked list such that
the element in the previous node (if any) is less than or equal
to the element stored in the current node, and that element
is less than or equal to the element stroed in the next node.
(O(n))
- Type pop_front();
- Delete the node at the front of the linked list and,
as necessary,
update the tail pointer and
the next pointer of the sentinel.
Return the object stored in the node being popped.
Throw an underflow exception if the list is empty.
(O(1))
- int erase( Type const & );
- Delete all nodes (other than the sentinals) in the linked list that contains the
object equal to the argument (use == to to test for
equality with the retrieved element).
As necessary, update the tail pointer and the next pointer of any other
node (including possibly the sentinel) within the list.
Return the number of nodes that were deleted.
(O(n))