Answered step by step
Verified Expert Solution
Question
00
1 Approved Answer
Linked lists are the next data structure you will be creating. They are a non - contiguous sequence container, and will offer some advantages over
Linked lists are the next data structure you will be creating. They are a noncontiguous sequence container, and will offer some advantages over vectorsDynArrays namely a much more efficient way to remove data. You will be creating a doublylinked list, which allows for bidirectional traversal, as well as a much more efficient way to insert and remove data at any point in the sequence. Because the data is stored noncontiguously, this will require a good understanding of pointers and dynamic allocations. A node is represented by a circle and consists of three components. A pointer leading from it to the next node, one to the previous node, and the data itself stored in each node. The data can be anything from a single integer to an array of chars. You can also see that the first and last Nodes of a linked list each point to nothing. The pointers still exist in each nodethey simply have nothing to point to This is represented in C as a null pointer, or nullptr. To add a node between B and C you would have to adjust Bnext to point to the new node along with Cprev. The new node would also have to have its pointers set to point at B and C as well. ie newNodenext and newNodeprev. Linked lists can be hard to mentally visualize. Do not be afraid to diagram out the steps needed to perform the necessary steps needed for the various methods. Review Dynamic memory Pointers Pointers to classesstructs Structs Explicitly calling nondefault constructors New Topics Advanced usage of pointers Nested classesstructs This class has three userdefined types you will be working with. Make sure to familiarize yourself with what data members are in each type, and what they represent. Node data The value being stored think of the element in an array next A pointer to the next node in the list prev A pointer to the previous node in the list Iterator mCurr A Node pointer representing the current position of the iterator DList mHead A pointer to the front Node in the list mTail A pointer to the back Node in the list mSize The current number of Nodes allocated Methods Node Constructor Set the data members to the values of the parameters passed in DList Constructor Set all data members to reflect that no nodes are currently allocated AddHead Dynamically add a Node to the front of the list Update the head to point to the newly added node Update the size of the list Dont forget to link the nodes together before updating the head AddTail Dynamically add a Node to the back of the list Update the tail to point to the newly added node Update the size of the list Dont forget to link the nodes together before updating the tail Clear Free up the memory for all dynamically allocated nodes Set all of the data members back to their default state Remember there are more nodes than just the head and tail This will require some form of loop Destructor Free up the memory for all dynamically allocated nodes Theres a method that does this Begin Creates and returns an Iterator that points to the head node End Creates and returns an Iterator that points to the Node after the last valid node in the list Iterator PreFix Increment Moves the Iterator to the next node in the list and returns it Iterator PostFix Increment Postfix operators take in an int to allow the compiler to differentiate Moves the Iterator to the next node in the list and return an Iterator to the original position This will require a temporary variable Iterator PreFix Decrement Moves the Iterator to the previous node in the list and returns it Iterator PostFix Decrement Postfix operators take in an int to allow the compiler to differentiate Moves the Iterator to the previous node in the list and return an Iterator to the original position This will require a temporary variable Iterator Dereference Return the data of the node the Iterator is pointing to Insert Do not be afraid to diagram this! Dynamically allocate a Node and insert it in front of the position of the passedin Iterator There are three special cases for this method, depending on what the Iterator is storing Empty List Iterator will be storing a null pointer, so the list needs to be started Theres a method to help with this Head Iterator will be storing a pointer to the head of the list Theres a method to help with this Anywhere else Iterator is storing a pointer to another node even the tail Link the nodes before and after the inserted nodes This will require setting a total of four nextprev pointers In all cases, the passedin Iterator should be updated to store the newly inserted node Erase Do not be afraid to diagram this! Delete the node stored in the passedin Iterator This will require some pointers to be adjusted before the deletion In most of these cases, a temporary pointer will be required There are four special cases for this method, depending on what the Iterator is storing Empty List Iterator will be storing a null pointer Since there is nothing to remove, the method can be exited Head Iterator will be storing a pointer to the head of the list Will need to update the head pointer Tail Iterator will be storing a pointer to the tail of the list Will need to update the tail pointer Anywhere else Iterator is storing a pointer to another node This will require linking the nodes before and after the node to erase together In all cases, the passedin Iterator should be updated to store the node after the erased node Assignment Operator Assigns all values to match those of the object passed in Clean up existing memory before the deep copy Theres a method that does this Deep copy the entire list This requires some type of loop to move through the passedin list Look at your other methods, as there are some that can make this very easy If the size has not already been updated, shallow copy it Copy Constructor Creates a copy of the object passed in Deep copy the entire list This requires some type of loop to move through the passedin list Look at your other methods, as there are some that can make this very easy If the size has not already been updated, shallow copy it data members are not automatically initialized in C
Linked lists are the next data structure you will be creating. They are a noncontiguous sequence container, and will offer some advantages over vectorsDynArrays namely a much more efficient way to remove data.
You will be creating a doublylinked list, which allows for bidirectional traversal, as well
as a much more efficient way to insert and remove data at any point in the sequence. Because the data is stored noncontiguously, this will require a good understanding of pointers and dynamic allocations.
A node is represented by a circle and consists of three components. A
pointer leading from it to the next node, one to the previous node, and the data itself stored in each node. The data can be anything from a single integer to an array of chars. You can also see that the first and last Nodes of a linked list
each point to nothing. The pointers still exist in each nodethey simply have nothing to point to This is represented in C as a null pointer, or nullptr.
To add a node between B and C you would have to adjust Bnext to point to the new
node along with Cprev. The new node would also have to have its pointers set to point at B and C as well. ie newNodenext and newNodeprev.
Linked lists can be hard to mentally visualize. Do not be afraid to diagram out the steps needed to perform the necessary steps needed for the various methods.
Review
Dynamic memory
Pointers
Pointers to classesstructs
Structs
Explicitly calling nondefault constructors
New Topics
Advanced usage of pointers
Nested classesstructs
This class has three userdefined types you will be working with. Make sure to familiarize yourself with what data members are in each type, and what they represent.
Node
data The value being stored think of the element in an array
next A pointer to the next node in the list
prev A pointer to the previous node in the list
Iterator
mCurr A Node pointer representing the current position of the iterator
DList
mHead A pointer to the front Node in the list
mTail A pointer to the back Node in the list
mSize The current number of Nodes allocated
Methods
Node Constructor
Set the data members to the values of the parameters passed in
DList Constructor
Set all data members to reflect that no nodes are currently allocated
AddHead
Dynamically add a Node to the front of the list
Update the head to point to the newly added node
Update the size of the list
Dont forget to link the nodes together before updating the head
AddTail
Dynamically add a Node to the back of the list
Update the tail to point to the newly added node
Update the size of the list
Dont forget to link the nodes together before updating the tail
Clear
Free up the memory for all dynamically allocated nodes
Set all of the data members back to their default state
Remember there are more nodes than just the head and tail
This will require some form of loop
Destructor
Free up the memory for all dynamically allocated nodes Theres a method that does
this
Begin
Creates and returns an Iterator that points to the head node
End
Creates and returns an Iterator that points to the Node after the last valid node in the
list
Iterator PreFix Increment
Moves the Iterator to the next node in the list and returns it
Iterator PostFix Increment
Postfix operators take in an int to allow the compiler to differentiate
Moves the Iterator to the next node in the list and return an Iterator to the original
position
This will require a temporary variable
Iterator PreFix Decrement
Moves the Iterator to the previous node in the list and returns it
Iterator PostFix Decrement
Postfix operators take in an int to allow the compiler to differentiate
Moves the Iterator to the previous node in the list and return an Iterator to the original
position
This will require a temporary variable
Iterator Dereference
Return the data of the node the Iterator is pointing to
Insert
Do not be afraid to diagram this!
Dynamically allocate a Node and insert it in front of the position of the passedin
Iterator
There are three special cases for this method, depending on what the Iterator is storing
Empty List
Iterator will be storing a null pointer, so the list needs to be started
Theres a method to help with this
Head
Iterator will be storing a pointer to the head of the list
Theres a method to help with this
Anywhere else
Iterator is storing a pointer to another node even the tail
Link the nodes before and after the inserted nodes
This will require setting a total of four nextprev pointers
In all cases, the passedin Iterator should be updated to store the newly inserted node
Erase
Do not be afraid to diagram this!
Delete the node stored in the passedin Iterator
This will require some pointers to be adjusted before the deletion
In most of these cases, a temporary pointer will be required
There are four special cases for this method, depending on what the Iterator is storing
Empty List
Iterator will be storing a null pointer
Since there is nothing to remove, the method can be exited
Head
Iterator will be storing a pointer to the head of the list
Will need to update the head pointer
Tail
Iterator will be storing a pointer to the tail of the list
Will need to update the tail pointer
Anywhere else
Iterator is storing a pointer to another node
This will require linking the nodes before and after the node to erase
together
In all cases, the passedin Iterator should be updated to store the node after the erased
node
Assignment Operator
Assigns all values to match those of the object passed in
Clean up existing memory before the deep copy Theres a method that does this
Deep copy the entire list
This requires some type of loop to move through the passedin list
Look at your other methods, as there are some that can make this very easy
If the size has not already been updated, shallow copy it
Copy Constructor
Creates a copy of the object passed in
Deep copy the entire list
This requires some type of loop to move through the passedin list
Look at your other methods, as there are some that can make this very easy
If the size has not already been updated, shallow copy it
data members are not automatically initialized in C
Step by Step Solution
There are 3 Steps involved in it
Step: 1
Get Instant Access with AI-Powered Solutions
See step-by-step solutions with expert insights and AI powered tools for academic success
Step: 2
Step: 3
Ace Your Homework with AI
Get the answers you need in no time with our AI-driven, step-by-step assistance
Get Started