cse 20312 linked lists - university of notre damesemrich/ds17/10/linkedlist.pdf · linked list: adt...
TRANSCRIPT
CSE 20312 Linked Lists
Review: Linked List
What is a Linked List?
What is the difference between a Singly Linked List and a Doubly Linked List?
When should we prefer a Linked List over a Dynamic Array? Vice Versa?
Linked Lists
Linked List: ADT
Attributes
size()
Access
at(i)
Modification
insert(it,val)
push_back(val)
erase(it)
A Linked List is a sequence container consisting of nodes that reference other nodes.
Singly Linked List
Doubly Linked List
template<typenameT>classList{
protected:structNode{ //Nodestructure
Tdata; //Nodedata Node*next; //ReferencetonextNode};typedefNode*iterator;Node*head; //PointertofirstNode
public:List():head(nullptr){} //Constructoriteratorfront(){returnhead;}; //Frontoflistsize_tsize()const; //SizeofListT&at(constsize_ti); //Accesselementvoidinsert(iteratorit,constT&data); //Insertelementvoidpush_back(constT&data); //Inserttobackvoiderase(iteratorit); //Removeelement
};
Singly-Linked List with Template
Linked List: Singly (Template)
Attributes
size()
Access
at(i)
Modification
insert(it,val)
push_back(val)
erase(it)
ProblemssizeisO(n)Manualmemory
managementSpecialcasesfor
emptylistpush_backisO(n)OnlyinsertafterEraseisO(n)
template<typenameT>classList{
protected:Node*head;size_tlength;
public:List():head(nullptr),length(0){}iteratorfront(){returnhead;};size_tsize()const{returnlength;}T&at(constsize_ti);voidinsert(iteratorit,constT&data);voidpush_back(constT&data);voiderase(iteratorit);
};
Singly-Linked List with Fast Size
Linked List: Singly (Size)
Attributes
size()
Access
at(i)
Modification
insert(it,val)
push_back(val)
erase(it)
ProblemsManualmemory
managementSpecialcasesfor
emptylistpush_backisO(n)OnlyinsertafterEraseO(n)
template<typenameT>classList{
protected:Node*head;size_tlength;
public:List():head(nullptr),length(0){}iteratorfront(){returnhead;};~List();List(constList<T>&source);List<T>&operator=(List<T>source);voidswap(List<T>&source);size_tsize()const{returnlength;}T&at(constsize_ti);voidinsert(iteratorit,constT&data);voidpush_back(constT&data);voiderase(iteratorit);
};
Singly-Linked List with RAII
Linked List: Singly (RAII)
Attributes
size()
Access
at(i)
Modification
insert(it,val)
push_back(val)
erase(it)
ProblemsSpecialcasesfor
emptylistPush_backisO(n)OnlyinsertafterEraseisO(n)
template<typenameT>classList{
protected:Node*head;Node*tail;size_tlength;
public:List():head(nullptr),tail(nullptr),length(0){}iteratorfront(){returnhead;};iteratorback(){returntail;};~List();List(constList<T>&source);List<T>&operator=(List<T>source);voidswap(List<T>&source);size_tsize()const{returnlength;}T&at(constsize_ti);voidinsert(iteratorit,constT&data);voidpush_back(constT&data);voiderase(iteratorit);
};
Singly-Linked List with Tail
Linked List: Singly (Tail)
Attributes
size()
Access
at(i)
Modification
insert(it,val)
push_back(val)
erase(it)
ProblemsSpecialcasesfor
emptylistOnlyinsertafterEraseisO(n)
template<typenameT>classList{
protected:structNode{
Node*next;Node*prev;Tdata;
};Node*head;Node*tail;size_tlength;
public:List():head(nullptr),tail(nullptr),length(0){}iteratorfront(){returnhead;};iteratorback(){returntail;};~List();List(constList<T>&source);List<T>&operator=(List<T>source);voidswap(List<T>&source);size_tsize()const{returnlength;}T&at(constsize_ti);voidinsert(iteratorit,constT&data);voidpush_back(constT&data);voiderase(iteratorit);
};
Doubly-Linked List
Linked List: Doubly-Linked
Attributes
size()
Access
at(i)
Modification
insert(it,val)
push_back(val)
erase(it)
Sequence Containers
Sequence Data Structures