cse 20312 linked lists - university of notre damesemrich/ds17/10/linkedlist.pdf · linked list: adt...

17
CSE 20312 Linked Lists

Upload: others

Post on 26-Mar-2020

10 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: CSE 20312 Linked Lists - University of Notre Damesemrich/ds17/10/linkedlist.pdf · Linked List: ADT Attributes size() Access at(i) Modification insert(it, val) push_back(val) erase(it)

CSE 20312 Linked Lists

Page 2: CSE 20312 Linked Lists - University of Notre Damesemrich/ds17/10/linkedlist.pdf · Linked List: ADT Attributes size() Access at(i) Modification insert(it, val) push_back(val) erase(it)

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?

Page 3: CSE 20312 Linked Lists - University of Notre Damesemrich/ds17/10/linkedlist.pdf · Linked List: ADT Attributes size() Access at(i) Modification insert(it, val) push_back(val) erase(it)

Linked Lists

Page 4: CSE 20312 Linked Lists - University of Notre Damesemrich/ds17/10/linkedlist.pdf · Linked List: ADT Attributes size() Access at(i) Modification insert(it, val) push_back(val) erase(it)

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

Page 5: CSE 20312 Linked Lists - University of Notre Damesemrich/ds17/10/linkedlist.pdf · Linked List: ADT Attributes size() Access at(i) Modification insert(it, val) push_back(val) erase(it)

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

Page 6: CSE 20312 Linked Lists - University of Notre Damesemrich/ds17/10/linkedlist.pdf · Linked List: ADT Attributes size() Access at(i) Modification insert(it, val) push_back(val) erase(it)

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)

Page 7: CSE 20312 Linked Lists - University of Notre Damesemrich/ds17/10/linkedlist.pdf · Linked List: ADT Attributes size() Access at(i) Modification insert(it, val) push_back(val) erase(it)

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

Page 8: CSE 20312 Linked Lists - University of Notre Damesemrich/ds17/10/linkedlist.pdf · Linked List: ADT Attributes size() Access at(i) Modification insert(it, val) push_back(val) erase(it)

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)

Page 9: CSE 20312 Linked Lists - University of Notre Damesemrich/ds17/10/linkedlist.pdf · Linked List: ADT Attributes size() Access at(i) Modification insert(it, val) push_back(val) erase(it)

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

Page 10: CSE 20312 Linked Lists - University of Notre Damesemrich/ds17/10/linkedlist.pdf · Linked List: ADT Attributes size() Access at(i) Modification insert(it, val) push_back(val) erase(it)

Linked List: Singly (RAII)

Attributes

size()

Access

at(i)

Modification

insert(it,val)

push_back(val)

erase(it)

ProblemsSpecialcasesfor

emptylistPush_backisO(n)OnlyinsertafterEraseisO(n)

Page 11: CSE 20312 Linked Lists - University of Notre Damesemrich/ds17/10/linkedlist.pdf · Linked List: ADT Attributes size() Access at(i) Modification insert(it, val) push_back(val) erase(it)

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

Page 12: CSE 20312 Linked Lists - University of Notre Damesemrich/ds17/10/linkedlist.pdf · Linked List: ADT Attributes size() Access at(i) Modification insert(it, val) push_back(val) erase(it)

Linked List: Singly (Tail)

Attributes

size()

Access

at(i)

Modification

insert(it,val)

push_back(val)

erase(it)

ProblemsSpecialcasesfor

emptylistOnlyinsertafterEraseisO(n)

Page 13: CSE 20312 Linked Lists - University of Notre Damesemrich/ds17/10/linkedlist.pdf · Linked List: ADT Attributes size() Access at(i) Modification insert(it, val) push_back(val) erase(it)

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

Page 14: CSE 20312 Linked Lists - University of Notre Damesemrich/ds17/10/linkedlist.pdf · Linked List: ADT Attributes size() Access at(i) Modification insert(it, val) push_back(val) erase(it)

Linked List: Doubly-Linked

Attributes

size()

Access

at(i)

Modification

insert(it,val)

push_back(val)

erase(it)

Page 15: CSE 20312 Linked Lists - University of Notre Damesemrich/ds17/10/linkedlist.pdf · Linked List: ADT Attributes size() Access at(i) Modification insert(it, val) push_back(val) erase(it)
Page 16: CSE 20312 Linked Lists - University of Notre Damesemrich/ds17/10/linkedlist.pdf · Linked List: ADT Attributes size() Access at(i) Modification insert(it, val) push_back(val) erase(it)

Sequence Containers

Page 17: CSE 20312 Linked Lists - University of Notre Damesemrich/ds17/10/linkedlist.pdf · Linked List: ADT Attributes size() Access at(i) Modification insert(it, val) push_back(val) erase(it)

Sequence Data Structures