SlideShare a Scribd company logo
Lists
COMP171
Fall 2005
Linked Lists / Slide 2
Outline
Abstract Data Type (ADT)
List ADT
List ADT with Array Implementation
Linked lists
Basic operations of linked lists
Insert, find, delete, print, etc.
Variations of linked lists
Circular linked lists
Doubly linked lists
Linked Lists / Slide 3
Abstract Data Type (ADT)
Data type
a set of objects + a set of operations
Example: integer
 set of whole numbers
 operations: +, -, x, /
Can this be generalized?
(e.g. procedures generalize the notion of an
operator)
Yes!
 Abstract data type
high-level abstractions (managing complexity
through abstraction)
Encapsulation
Linked Lists / Slide 4
Encapsulation
Operation on the ADT can only be done by calling the
appropriate function
no mention of how the set of operations is
implemented
 The definition of the type and all operations on that
type can be localized to one section of the program
 If we wish to change the implementation of an ADT
we know where to look
by revising one small section we can be sure that
there is no subtlety elsewhere that will cause errors
 We can treat the ADT as a primitive type: we have no
concern with the underlying implementation
ADT → C++: class
method → C++: member function
Linked Lists / Slide 5
ADT…
Examples
the set ADT
 A set of elements
 Operations: union, intersection, size and complement
the queue ADT
 A set of sequences of elements
 Operations: create empty queue, insert, examine, delete,
and destroy queue
Two ADT’s are different if they have the same
underlying model but different operations
E.g. a different set ADT with only the union and
find operations
The appropriateness of an implementation
depends very much on the operations to be
performed
Linked Lists / Slide 6
Pros and Cons
 Implementation of the ADT is separate from its use
 Modular: one module for one ADT
Easier to debug
Easier for several people to work simultaneously
 Code for the ADT can be reused in different
applications
 Information hiding
A logical unit to do a specific job
implementation details can be changed without affecting user
programs
 Allow rapid prototying
Prototype with simple ADT implementations, then tune them
later when necessary
 Loss of efficiency
Linked Lists / Slide 7
The List ADT
A sequence of zero or more elements
A1, A2, A3, … AN
N: length of the list
A1: first element
AN: last element
Ai: position i
If N=0, then empty list
Linearly ordered
Ai precedes Ai+1
Ai follows Ai-1
Linked Lists / Slide 8
Operations
printList: print the list
makeEmpty: create an empty list
find: locate the position of an object in a list
list: 34,12, 52, 16, 12
find(52) → 3
insert: insert an object to a list
insert(x,3) → 34, 12, 52, x, 16, 12
remove: delete an element from the list
remove(52) → 34, 12, x, 16, 12
findKth: retrieve the element at a certain
position
Linked Lists / Slide 9
Implementation of an ADT
Choose a data structure to represent the
ADT
E.g. arrays, records, etc.
Each operation associated with the ADT is
implemented by one or more subroutines
Two standard implementations for the list ADT
Array-based
Linked list
Linked Lists / Slide 10
Array Implementation
Elements are stored in contiguous array
positions
Linked Lists / Slide 11
Array Implementation...
Requires an estimate of the maximum size of
the list
 waste space
printList and find: linear
findKth: constant
insert and delete: slow
e.g. insert at position 0 (making a new element)
 requires first pushing the entire array down one spot to
make room
e.g. delete at position 0
 requires shifting all the elements in the list up one
On average, half of the lists needs to be moved for
either operation
Linked Lists / Slide 12
Pointer Implementation (Linked List)
Ensure that the list is not stored contiguously
use a linked list
a series of structures that are not necessarily adjacent
in memory
 Each node contains the element and a pointer to a
structure containing its successor
the last cell’s next link points to NULL
 Compared to the array implementation,
the pointer implementation uses only as much space as is needed
for the elements currently on the list
but requires space for the pointers in each cell
Linked Lists / Slide 13
Linked Lists
A linked list is a series of connected nodes
Each node contains at least
A piece of data (any type)
Pointer to the next node in the list
Head: pointer to the first node
The last node points to NULL
A ∅
Head
B C
A
data pointer
node
Linked Lists / Slide 14
A Simple Linked List Class
We use two classes: Node and List
Declare Node class for the nodes
data: double-type data in this example
next: a pointer to the next node in the list
class Node {
public:
double data; // data
Node* next; // pointer to next
};
Linked Lists / Slide 15
A Simple Linked List Class
Declare List, which contains
head: a pointer to the first node in the list.
Since the list is empty initially, head is set to NULL
Operations on List
class List {
public:
List(void) { head = NULL; } // constructor
~List(void); // destructor
bool IsEmpty() { return head == NULL; }
Node* InsertNode(int index, double x);
int FindNode(double x);
int DeleteNode(double x);
void DisplayList(void);
private:
Node* head;
};
Linked Lists / Slide 16
A Simple Linked List Class
Operations of List
IsEmpty: determine whether or not the list is
empty
InsertNode: insert a new node at a particular
position
FindNode: find a node with a given value
DeleteNode: delete a node with a given value
DisplayList: print all the nodes in the list
Linked Lists / Slide 17
Inserting a new node
Node* InsertNode(int index, double x)
Insert a node with data equal to x after the index’th elements.
(i.e., when index = 0, insert the node as the first element;
when index = 1, insert the node after the first element, and so on)
If the insertion is successful, return the inserted node.
Otherwise, return NULL.
(If index is < 0 or > length of the list, the insertion will fail.)
Steps
1. Locate index’th element
2. Allocate memory for the new node
3. Point the new node to its successor
4. Point the new node’s predecessor to the new node
newNode
index’th
element
Linked Lists / Slide 18
Inserting a new node
Possible cases of InsertNode
1. Insert into an empty list
2. Insert in front
3. Insert at back
4. Insert in middle
But, in fact, only need to handle two cases
Insert as the first node (Case 1 and Case 2)
Insert in the middle or at the end of the list (Case 3 and
Case 4)
Linked Lists / Slide 19
Inserting a new node
Node* List::InsertNode(int index, double x) {
if (index < 0) return NULL;
int currIndex = 1;
Node* currNode = head;
while (currNode && index > currIndex) {
currNode = currNode->next;
currIndex++;
}
if (index > 0 && currNode == NULL) return NULL;
Node* newNode = new Node;
newNode->data = x;
if (index == 0) {
newNode->next = head;
head = newNode;
}
else {
newNode->next = currNode->next;
currNode->next = newNode;
}
return newNode;
}
Try to locate
index’th node. If it
doesn’t exist,
return NULL.
Linked Lists / Slide 20
Inserting a new node
Node* List::InsertNode(int index, double x) {
if (index < 0) return NULL;
int currIndex = 1;
Node* currNode = head;
while (currNode && index > currIndex) {
currNode = currNode->next;
currIndex++;
}
if (index > 0 && currNode == NULL) return NULL;
Node* newNode = new Node;
newNode->data = x;
if (index == 0) {
newNode->next = head;
head = newNode;
}
else {
newNode->next = currNode->next;
currNode->next = newNode;
}
return newNode;
}
Create a new node
Linked Lists / Slide 21
Inserting a new node
Node* List::InsertNode(int index, double x) {
if (index < 0) return NULL;
int currIndex = 1;
Node* currNode = head;
while (currNode && index > currIndex) {
currNode = currNode->next;
currIndex++;
}
if (index > 0 && currNode == NULL) return NULL;
Node* newNode = new Node;
newNode->data = x;
if (index == 0) {
newNode->next = head;
head = newNode;
}
else {
newNode->next = currNode->next;
currNode->next = newNode;
}
return newNode;
}
Insert as first element
head
newNode
Linked Lists / Slide 22
Inserting a new node
Node* List::InsertNode(int index, double x) {
if (index < 0) return NULL;
int currIndex = 1;
Node* currNode = head;
while (currNode && index > currIndex) {
currNode = currNode->next;
currIndex++;
}
if (index > 0 && currNode == NULL) return NULL;
Node* newNode = new Node;
newNode->data = x;
if (index == 0) {
newNode->next = head;
head = newNode;
}
else {
newNode->next = currNode->next;
currNode->next = newNode;
}
return newNode;
}
Insert after currNode
newNode
currNode
Linked Lists / Slide 23
Finding a node
int FindNode(double x)
Search for a node with the value equal to x in the list.
If such a node is found, return its position. Otherwise, return
0.
int List::FindNode(double x) {
Node* currNode = head;
int currIndex = 1;
while (currNode && currNode->data != x) {
currNode = currNode->next;
currIndex++;
}
if (currNode) return currIndex;
return 0;
}
Linked Lists / Slide 24
Deleting a node
int DeleteNode(double x)
Delete a node with the value equal to x from the list.
If such a node is found, return its position. Otherwise, return
0.
Steps
Find the desirable node (similar to FindNode)
Release the memory occupied by the found node
Set the pointer of the predecessor of the found node to the
successor of the found node
Like InsertNode, there are two special cases
Delete first node
Delete the node in middle or at the end of the list
Linked Lists / Slide 25
Deleting a node
int List::DeleteNode(double x) {
Node* prevNode = NULL;
Node* currNode = head;
int currIndex = 1;
while (currNode && currNode->data != x) {
prevNode = currNode;
currNode = currNode->next;
currIndex++;
}
if (currNode) {
if (prevNode) {
prevNode->next = currNode->next;
delete currNode;
}
else {
head = currNode->next;
delete currNode;
}
return currIndex;
}
return 0;
}
Try to find the node with
its value equal to x
Linked Lists / Slide 26
Deleting a node
int List::DeleteNode(double x) {
Node* prevNode = NULL;
Node* currNode = head;
int currIndex = 1;
while (currNode && currNode->data != x) {
prevNode = currNode;
currNode = currNode->next;
currIndex++;
}
if (currNode) {
if (prevNode) {
prevNode->next = currNode->next;
delete currNode;
}
else {
head = currNode->next;
delete currNode;
}
return currIndex;
}
return 0;
}
currNodeprevNode
Linked Lists / Slide 27
Deleting a node
int List::DeleteNode(double x) {
Node* prevNode = NULL;
Node* currNode = head;
int currIndex = 1;
while (currNode && currNode->data != x) {
prevNode = currNode;
currNode = currNode->next;
currIndex++;
}
if (currNode) {
if (prevNode) {
prevNode->next = currNode->next;
delete currNode;
}
else {
head = currNode->next;
delete currNode;
}
return currIndex;
}
return 0;
}
currNodehead
Linked Lists / Slide 28
Printing all the elements
void DisplayList(void)
Print the data of all the elements
Print the number of the nodes in the list
void List::DisplayList()
{
int num = 0;
Node* currNode = head;
while (currNode != NULL){
cout << currNode->data << endl;
currNode = currNode->next;
num++;
}
cout << "Number of nodes in the list: " << num << endl;
}
Linked Lists / Slide 29
Destroying the list
~List(void)
Use the destructor to release all the memory used by the list.
Step through the list and delete each node one by one.
List::~List(void) {
Node* currNode = head, *nextNode = NULL;
while (currNode != NULL)
{
nextNode = currNode->next;
// destroy the current node
delete currNode;
currNode = nextNode;
}
}
Linked Lists / Slide 30
Using List
int main(void)
{
List list;
list.InsertNode(0, 7.0); // successful
list.InsertNode(1, 5.0); // successful
list.InsertNode(-1, 5.0); // unsuccessful
list.InsertNode(0, 6.0); // successful
list.InsertNode(8, 4.0); // unsuccessful
// print all the elements
list.DisplayList();
if(list.FindNode(5.0) > 0) cout << "5.0 found" << endl;
else cout << "5.0 not found" << endl;
if(list.FindNode(4.5) > 0) cout << "4.5 found" << endl;
else cout << "4.5 not found" << endl;
list.DeleteNode(7.0);
list.DisplayList();
return 0;
}
6
7
5
Number of nodes in the list: 3
5.0 found
4.5 not found
6
5
Number of nodes in the list: 2
result
Linked Lists / Slide 31
Variations of Linked Lists
Circular linked lists
The last node points to the first node of the list
How do we know when we have finished traversing
the list? (Tip: check if the pointer of the current
node is equal to the head.)
A
Head
B C
Linked Lists / Slide 32
Variations of Linked Lists
Doubly linked lists
Each node points to not only successor but the
predecessor
There are two NULL: at the first and last nodes in
the list
Advantage: given a node, it is easy to visit its
predecessor. Convenient to traverse lists backwards
A
Head
B∅ C ∅
Linked Lists / Slide 33
Array versus Linked Lists
Linked lists are more complex to code and manage
than arrays, but they have some distinct advantages.
Dynamic: a linked list can easily grow and shrink in size.
 We don’t need to know how many nodes will be in the list. They
are created in memory as needed.
 In contrast, the size of a C++ array is fixed at compilation time.
Easy and fast insertions and deletions
 To insert or delete an element in an array, we need to copy to
temporary variables to make room for new elements or close the
gap caused by deleted elements.
 With a linked list, no need to move other nodes. Only need to
reset some pointers.
Linked Lists / Slide 34
Example: The Polynomial ADT
An ADT for single-variable polynomials
Array implementation
∑=
=
N
i
i
i xaxf
0
)(
Linked Lists / Slide 35
The Polynomial ADT…
Acceptable if most of the coefficients Aj are
nonzero, undesirable if this is not the case
E.g. multiply
 most of the time is spent multiplying zeros and stepping
through nonexistent parts of the input polynomials
Implementation using a singly linked list
Each term is contained in one cell, and the cells
are sorted in decreasing order of exponents
51123)(
1510)(
14921990
2
141000
1
++−=
++=
xxxxP
xxxP

More Related Content

What's hot

Computer Organization And Architecture lab manual
Computer Organization And Architecture lab manualComputer Organization And Architecture lab manual
Computer Organization And Architecture lab manual
Nitesh Dubey
 
C++ STATEMENTS
C++ STATEMENTS C++ STATEMENTS
C++ STATEMENTS
Prof Ansari
 
RECURSION IN C
RECURSION IN C RECURSION IN C
RECURSION IN C
v_jk
 
If else statement in c++
If else statement in c++If else statement in c++
If else statement in c++
Bishal Sharma
 
C++
C++C++
Pointer in c
Pointer in cPointer in c
Pointer in c
lavanya marichamy
 
Data type in c
Data type in cData type in c
Data type in c
thirumalaikumar3
 
Operators-computer programming and utilzation
Operators-computer programming and utilzationOperators-computer programming and utilzation
Operators-computer programming and utilzation
Kaushal Patel
 
Presentation on C++ Programming Language
Presentation on C++ Programming LanguagePresentation on C++ Programming Language
Presentation on C++ Programming Language
satvirsandhu9
 
C operator and expression
C operator and expressionC operator and expression
C operator and expression
LavanyaManokaran
 
Multiplication algorithm
Multiplication algorithmMultiplication algorithm
Multiplication algorithm
Gaurav Subham
 
C pointers
C pointersC pointers
C pointers
Aravind Mohan
 
C pointer
C pointerC pointer
Pointers in C Language
Pointers in C LanguagePointers in C Language
Pointers in C Language
madan reddy
 
pseudo code basics
pseudo code basicspseudo code basics
pseudo code basics
Sabik T S
 
Digital Logic Design
Digital Logic Design Digital Logic Design
Digital Logic Design
Vaagdevi College of Engineering
 
Reduction & Handle Pruning
Reduction & Handle PruningReduction & Handle Pruning
Reduction & Handle Pruning
MdAshikJiddney
 
Register Organisation of 8086 Microprocessor
Register Organisation of 8086 MicroprocessorRegister Organisation of 8086 Microprocessor
Register Organisation of 8086 MicroprocessorNikhil Kumar
 
Lecture 13
Lecture 13Lecture 13
Lecture 13
Anwal Mirza
 
wired lans
wired lanswired lans
wired lanshoadqbk
 

What's hot (20)

Computer Organization And Architecture lab manual
Computer Organization And Architecture lab manualComputer Organization And Architecture lab manual
Computer Organization And Architecture lab manual
 
C++ STATEMENTS
C++ STATEMENTS C++ STATEMENTS
C++ STATEMENTS
 
RECURSION IN C
RECURSION IN C RECURSION IN C
RECURSION IN C
 
If else statement in c++
If else statement in c++If else statement in c++
If else statement in c++
 
C++
C++C++
C++
 
Pointer in c
Pointer in cPointer in c
Pointer in c
 
Data type in c
Data type in cData type in c
Data type in c
 
Operators-computer programming and utilzation
Operators-computer programming and utilzationOperators-computer programming and utilzation
Operators-computer programming and utilzation
 
Presentation on C++ Programming Language
Presentation on C++ Programming LanguagePresentation on C++ Programming Language
Presentation on C++ Programming Language
 
C operator and expression
C operator and expressionC operator and expression
C operator and expression
 
Multiplication algorithm
Multiplication algorithmMultiplication algorithm
Multiplication algorithm
 
C pointers
C pointersC pointers
C pointers
 
C pointer
C pointerC pointer
C pointer
 
Pointers in C Language
Pointers in C LanguagePointers in C Language
Pointers in C Language
 
pseudo code basics
pseudo code basicspseudo code basics
pseudo code basics
 
Digital Logic Design
Digital Logic Design Digital Logic Design
Digital Logic Design
 
Reduction & Handle Pruning
Reduction & Handle PruningReduction & Handle Pruning
Reduction & Handle Pruning
 
Register Organisation of 8086 Microprocessor
Register Organisation of 8086 MicroprocessorRegister Organisation of 8086 Microprocessor
Register Organisation of 8086 Microprocessor
 
Lecture 13
Lecture 13Lecture 13
Lecture 13
 
wired lans
wired lanswired lans
wired lans
 

Similar to List

Array linked list.ppt
Array  linked list.pptArray  linked list.ppt
Array linked list.ppt
Waf1231
 
Abstract data types
Abstract data typesAbstract data types
Abstract data types
JAGDEEPKUMAR23
 
17 linkedlist (1)
17 linkedlist (1)17 linkedlist (1)
17 linkedlist (1)
Himadri Sen Gupta
 
linked-list.ppt
linked-list.pptlinked-list.ppt
linked-list.ppt
DikkySuryadiSKomMKom
 
Linkedlist
LinkedlistLinkedlist
Linkedlist
Masud Parvaze
 
Adt of lists
Adt of listsAdt of lists
Adt of lists
Nivegeetha
 
Linked list
Linked list Linked list
Linked list
Arbind Mandal
 
Lecture 4 data structures and algorithms
Lecture 4 data structures and algorithmsLecture 4 data structures and algorithms
Lecture 4 data structures and algorithmsAakash deep Singhal
 
Fundamentals of data structures
Fundamentals of data structuresFundamentals of data structures
Fundamentals of data structuresNiraj Agarwal
 
3.linked list
3.linked list3.linked list
3.linked list
Chandan Singh
 
Unit - 2.pdf
Unit - 2.pdfUnit - 2.pdf
Unit - 2.pdf
AravindAnand21
 
Sorting & Linked Lists
Sorting & Linked ListsSorting & Linked Lists
Sorting & Linked Lists
J.T.A.JONES
 
03-Lists.ppt
03-Lists.ppt03-Lists.ppt
03-Lists.ppt
huynguyen556776
 
Data structures & algorithms lecture 3
Data structures & algorithms lecture 3Data structures & algorithms lecture 3
Data structures & algorithms lecture 3
Poojith Chowdhary
 
Lec-4_Linked-List (1).pdf
Lec-4_Linked-List (1).pdfLec-4_Linked-List (1).pdf
Lec-4_Linked-List (1).pdf
KylaMaeGarcia1
 
List,Stacks and Queues.pptx
List,Stacks and Queues.pptxList,Stacks and Queues.pptx
List,Stacks and Queues.pptx
UmatulSaboohSaleem1
 
Linked lists a
Linked lists aLinked lists a
Linked lists a
Khuram Shahzad
 
dynamicList.ppt
dynamicList.pptdynamicList.ppt
dynamicList.ppt
ssuser0be977
 
Write a program to implement below operations with both singly and d.pdf
Write a program to implement below operations with both singly and d.pdfWrite a program to implement below operations with both singly and d.pdf
Write a program to implement below operations with both singly and d.pdf
thangarajarivukadal
 

Similar to List (20)

Array linked list.ppt
Array  linked list.pptArray  linked list.ppt
Array linked list.ppt
 
Abstract data types
Abstract data typesAbstract data types
Abstract data types
 
17 linkedlist (1)
17 linkedlist (1)17 linkedlist (1)
17 linkedlist (1)
 
linked-list.ppt
linked-list.pptlinked-list.ppt
linked-list.ppt
 
Linkedlist
LinkedlistLinkedlist
Linkedlist
 
Adt of lists
Adt of listsAdt of lists
Adt of lists
 
Algo>ADT list & linked list
Algo>ADT list & linked listAlgo>ADT list & linked list
Algo>ADT list & linked list
 
Linked list
Linked list Linked list
Linked list
 
Lecture 4 data structures and algorithms
Lecture 4 data structures and algorithmsLecture 4 data structures and algorithms
Lecture 4 data structures and algorithms
 
Fundamentals of data structures
Fundamentals of data structuresFundamentals of data structures
Fundamentals of data structures
 
3.linked list
3.linked list3.linked list
3.linked list
 
Unit - 2.pdf
Unit - 2.pdfUnit - 2.pdf
Unit - 2.pdf
 
Sorting & Linked Lists
Sorting & Linked ListsSorting & Linked Lists
Sorting & Linked Lists
 
03-Lists.ppt
03-Lists.ppt03-Lists.ppt
03-Lists.ppt
 
Data structures & algorithms lecture 3
Data structures & algorithms lecture 3Data structures & algorithms lecture 3
Data structures & algorithms lecture 3
 
Lec-4_Linked-List (1).pdf
Lec-4_Linked-List (1).pdfLec-4_Linked-List (1).pdf
Lec-4_Linked-List (1).pdf
 
List,Stacks and Queues.pptx
List,Stacks and Queues.pptxList,Stacks and Queues.pptx
List,Stacks and Queues.pptx
 
Linked lists a
Linked lists aLinked lists a
Linked lists a
 
dynamicList.ppt
dynamicList.pptdynamicList.ppt
dynamicList.ppt
 
Write a program to implement below operations with both singly and d.pdf
Write a program to implement below operations with both singly and d.pdfWrite a program to implement below operations with both singly and d.pdf
Write a program to implement below operations with both singly and d.pdf
 

More from Amit Vats

Stacks and queue
Stacks and queueStacks and queue
Stacks and queueAmit Vats
 
Mi 103 mi 103 quiz 2
Mi 103 mi 103 quiz 2Mi 103 mi 103 quiz 2
Mi 103 mi 103 quiz 2Amit Vats
 
Mi 103 mi 103 quiz 2 (1)
Mi 103 mi 103 quiz 2 (1)Mi 103 mi 103 quiz 2 (1)
Mi 103 mi 103 quiz 2 (1)Amit Vats
 
Mi 103 linked list
Mi 103 linked listMi 103 linked list
Mi 103 linked listAmit Vats
 
Binary trees
Binary treesBinary trees
Binary treesAmit Vats
 

More from Amit Vats (6)

Stacks and queue
Stacks and queueStacks and queue
Stacks and queue
 
Mi 103 mi 103 quiz 2
Mi 103 mi 103 quiz 2Mi 103 mi 103 quiz 2
Mi 103 mi 103 quiz 2
 
Mi 103 mi 103 quiz 2 (1)
Mi 103 mi 103 quiz 2 (1)Mi 103 mi 103 quiz 2 (1)
Mi 103 mi 103 quiz 2 (1)
 
Mi 103 linked list
Mi 103 linked listMi 103 linked list
Mi 103 linked list
 
Binary trees
Binary treesBinary trees
Binary trees
 
Handling
HandlingHandling
Handling
 

Recently uploaded

Marketing internship report file for MBA
Marketing internship report file for MBAMarketing internship report file for MBA
Marketing internship report file for MBA
gb193092
 
Supporting (UKRI) OA monographs at Salford.pptx
Supporting (UKRI) OA monographs at Salford.pptxSupporting (UKRI) OA monographs at Salford.pptx
Supporting (UKRI) OA monographs at Salford.pptx
Jisc
 
Unit 2- Research Aptitude (UGC NET Paper I).pdf
Unit 2- Research Aptitude (UGC NET Paper I).pdfUnit 2- Research Aptitude (UGC NET Paper I).pdf
Unit 2- Research Aptitude (UGC NET Paper I).pdf
Thiyagu K
 
Language Across the Curriculm LAC B.Ed.
Language Across the  Curriculm LAC B.Ed.Language Across the  Curriculm LAC B.Ed.
Language Across the Curriculm LAC B.Ed.
Atul Kumar Singh
 
STRAND 3 HYGIENIC PRACTICES.pptx GRADE 7 CBC
STRAND 3 HYGIENIC PRACTICES.pptx GRADE 7 CBCSTRAND 3 HYGIENIC PRACTICES.pptx GRADE 7 CBC
STRAND 3 HYGIENIC PRACTICES.pptx GRADE 7 CBC
kimdan468
 
Normal Labour/ Stages of Labour/ Mechanism of Labour
Normal Labour/ Stages of Labour/ Mechanism of LabourNormal Labour/ Stages of Labour/ Mechanism of Labour
Normal Labour/ Stages of Labour/ Mechanism of Labour
Wasim Ak
 
Acetabularia Information For Class 9 .docx
Acetabularia Information For Class 9  .docxAcetabularia Information For Class 9  .docx
Acetabularia Information For Class 9 .docx
vaibhavrinwa19
 
The basics of sentences session 5pptx.pptx
The basics of sentences session 5pptx.pptxThe basics of sentences session 5pptx.pptx
The basics of sentences session 5pptx.pptx
heathfieldcps1
 
Azure Interview Questions and Answers PDF By ScholarHat
Azure Interview Questions and Answers PDF By ScholarHatAzure Interview Questions and Answers PDF By ScholarHat
Azure Interview Questions and Answers PDF By ScholarHat
Scholarhat
 
Chapter 3 - Islamic Banking Products and Services.pptx
Chapter 3 - Islamic Banking Products and Services.pptxChapter 3 - Islamic Banking Products and Services.pptx
Chapter 3 - Islamic Banking Products and Services.pptx
Mohd Adib Abd Muin, Senior Lecturer at Universiti Utara Malaysia
 
Digital Artifact 2 - Investigating Pavilion Designs
Digital Artifact 2 - Investigating Pavilion DesignsDigital Artifact 2 - Investigating Pavilion Designs
Digital Artifact 2 - Investigating Pavilion Designs
chanes7
 
Best Digital Marketing Institute In NOIDA
Best Digital Marketing Institute In NOIDABest Digital Marketing Institute In NOIDA
Best Digital Marketing Institute In NOIDA
deeptiverma2406
 
Group Presentation 2 Economics.Ariana Buscigliopptx
Group Presentation 2 Economics.Ariana BuscigliopptxGroup Presentation 2 Economics.Ariana Buscigliopptx
Group Presentation 2 Economics.Ariana Buscigliopptx
ArianaBusciglio
 
Introduction to AI for Nonprofits with Tapp Network
Introduction to AI for Nonprofits with Tapp NetworkIntroduction to AI for Nonprofits with Tapp Network
Introduction to AI for Nonprofits with Tapp Network
TechSoup
 
Honest Reviews of Tim Han LMA Course Program.pptx
Honest Reviews of Tim Han LMA Course Program.pptxHonest Reviews of Tim Han LMA Course Program.pptx
Honest Reviews of Tim Han LMA Course Program.pptx
timhan337
 
How libraries can support authors with open access requirements for UKRI fund...
How libraries can support authors with open access requirements for UKRI fund...How libraries can support authors with open access requirements for UKRI fund...
How libraries can support authors with open access requirements for UKRI fund...
Jisc
 
Mule 4.6 & Java 17 Upgrade | MuleSoft Mysore Meetup #46
Mule 4.6 & Java 17 Upgrade | MuleSoft Mysore Meetup #46Mule 4.6 & Java 17 Upgrade | MuleSoft Mysore Meetup #46
Mule 4.6 & Java 17 Upgrade | MuleSoft Mysore Meetup #46
MysoreMuleSoftMeetup
 
Digital Tools and AI for Teaching Learning and Research
Digital Tools and AI for Teaching Learning and ResearchDigital Tools and AI for Teaching Learning and Research
Digital Tools and AI for Teaching Learning and Research
Vikramjit Singh
 
Model Attribute Check Company Auto Property
Model Attribute  Check Company Auto PropertyModel Attribute  Check Company Auto Property
Model Attribute Check Company Auto Property
Celine George
 
The Accursed House by Émile Gaboriau.pptx
The Accursed House by Émile Gaboriau.pptxThe Accursed House by Émile Gaboriau.pptx
The Accursed House by Émile Gaboriau.pptx
DhatriParmar
 

Recently uploaded (20)

Marketing internship report file for MBA
Marketing internship report file for MBAMarketing internship report file for MBA
Marketing internship report file for MBA
 
Supporting (UKRI) OA monographs at Salford.pptx
Supporting (UKRI) OA monographs at Salford.pptxSupporting (UKRI) OA monographs at Salford.pptx
Supporting (UKRI) OA monographs at Salford.pptx
 
Unit 2- Research Aptitude (UGC NET Paper I).pdf
Unit 2- Research Aptitude (UGC NET Paper I).pdfUnit 2- Research Aptitude (UGC NET Paper I).pdf
Unit 2- Research Aptitude (UGC NET Paper I).pdf
 
Language Across the Curriculm LAC B.Ed.
Language Across the  Curriculm LAC B.Ed.Language Across the  Curriculm LAC B.Ed.
Language Across the Curriculm LAC B.Ed.
 
STRAND 3 HYGIENIC PRACTICES.pptx GRADE 7 CBC
STRAND 3 HYGIENIC PRACTICES.pptx GRADE 7 CBCSTRAND 3 HYGIENIC PRACTICES.pptx GRADE 7 CBC
STRAND 3 HYGIENIC PRACTICES.pptx GRADE 7 CBC
 
Normal Labour/ Stages of Labour/ Mechanism of Labour
Normal Labour/ Stages of Labour/ Mechanism of LabourNormal Labour/ Stages of Labour/ Mechanism of Labour
Normal Labour/ Stages of Labour/ Mechanism of Labour
 
Acetabularia Information For Class 9 .docx
Acetabularia Information For Class 9  .docxAcetabularia Information For Class 9  .docx
Acetabularia Information For Class 9 .docx
 
The basics of sentences session 5pptx.pptx
The basics of sentences session 5pptx.pptxThe basics of sentences session 5pptx.pptx
The basics of sentences session 5pptx.pptx
 
Azure Interview Questions and Answers PDF By ScholarHat
Azure Interview Questions and Answers PDF By ScholarHatAzure Interview Questions and Answers PDF By ScholarHat
Azure Interview Questions and Answers PDF By ScholarHat
 
Chapter 3 - Islamic Banking Products and Services.pptx
Chapter 3 - Islamic Banking Products and Services.pptxChapter 3 - Islamic Banking Products and Services.pptx
Chapter 3 - Islamic Banking Products and Services.pptx
 
Digital Artifact 2 - Investigating Pavilion Designs
Digital Artifact 2 - Investigating Pavilion DesignsDigital Artifact 2 - Investigating Pavilion Designs
Digital Artifact 2 - Investigating Pavilion Designs
 
Best Digital Marketing Institute In NOIDA
Best Digital Marketing Institute In NOIDABest Digital Marketing Institute In NOIDA
Best Digital Marketing Institute In NOIDA
 
Group Presentation 2 Economics.Ariana Buscigliopptx
Group Presentation 2 Economics.Ariana BuscigliopptxGroup Presentation 2 Economics.Ariana Buscigliopptx
Group Presentation 2 Economics.Ariana Buscigliopptx
 
Introduction to AI for Nonprofits with Tapp Network
Introduction to AI for Nonprofits with Tapp NetworkIntroduction to AI for Nonprofits with Tapp Network
Introduction to AI for Nonprofits with Tapp Network
 
Honest Reviews of Tim Han LMA Course Program.pptx
Honest Reviews of Tim Han LMA Course Program.pptxHonest Reviews of Tim Han LMA Course Program.pptx
Honest Reviews of Tim Han LMA Course Program.pptx
 
How libraries can support authors with open access requirements for UKRI fund...
How libraries can support authors with open access requirements for UKRI fund...How libraries can support authors with open access requirements for UKRI fund...
How libraries can support authors with open access requirements for UKRI fund...
 
Mule 4.6 & Java 17 Upgrade | MuleSoft Mysore Meetup #46
Mule 4.6 & Java 17 Upgrade | MuleSoft Mysore Meetup #46Mule 4.6 & Java 17 Upgrade | MuleSoft Mysore Meetup #46
Mule 4.6 & Java 17 Upgrade | MuleSoft Mysore Meetup #46
 
Digital Tools and AI for Teaching Learning and Research
Digital Tools and AI for Teaching Learning and ResearchDigital Tools and AI for Teaching Learning and Research
Digital Tools and AI for Teaching Learning and Research
 
Model Attribute Check Company Auto Property
Model Attribute  Check Company Auto PropertyModel Attribute  Check Company Auto Property
Model Attribute Check Company Auto Property
 
The Accursed House by Émile Gaboriau.pptx
The Accursed House by Émile Gaboriau.pptxThe Accursed House by Émile Gaboriau.pptx
The Accursed House by Émile Gaboriau.pptx
 

List

  • 2. Linked Lists / Slide 2 Outline Abstract Data Type (ADT) List ADT List ADT with Array Implementation Linked lists Basic operations of linked lists Insert, find, delete, print, etc. Variations of linked lists Circular linked lists Doubly linked lists
  • 3. Linked Lists / Slide 3 Abstract Data Type (ADT) Data type a set of objects + a set of operations Example: integer  set of whole numbers  operations: +, -, x, / Can this be generalized? (e.g. procedures generalize the notion of an operator) Yes!  Abstract data type high-level abstractions (managing complexity through abstraction) Encapsulation
  • 4. Linked Lists / Slide 4 Encapsulation Operation on the ADT can only be done by calling the appropriate function no mention of how the set of operations is implemented  The definition of the type and all operations on that type can be localized to one section of the program  If we wish to change the implementation of an ADT we know where to look by revising one small section we can be sure that there is no subtlety elsewhere that will cause errors  We can treat the ADT as a primitive type: we have no concern with the underlying implementation ADT → C++: class method → C++: member function
  • 5. Linked Lists / Slide 5 ADT… Examples the set ADT  A set of elements  Operations: union, intersection, size and complement the queue ADT  A set of sequences of elements  Operations: create empty queue, insert, examine, delete, and destroy queue Two ADT’s are different if they have the same underlying model but different operations E.g. a different set ADT with only the union and find operations The appropriateness of an implementation depends very much on the operations to be performed
  • 6. Linked Lists / Slide 6 Pros and Cons  Implementation of the ADT is separate from its use  Modular: one module for one ADT Easier to debug Easier for several people to work simultaneously  Code for the ADT can be reused in different applications  Information hiding A logical unit to do a specific job implementation details can be changed without affecting user programs  Allow rapid prototying Prototype with simple ADT implementations, then tune them later when necessary  Loss of efficiency
  • 7. Linked Lists / Slide 7 The List ADT A sequence of zero or more elements A1, A2, A3, … AN N: length of the list A1: first element AN: last element Ai: position i If N=0, then empty list Linearly ordered Ai precedes Ai+1 Ai follows Ai-1
  • 8. Linked Lists / Slide 8 Operations printList: print the list makeEmpty: create an empty list find: locate the position of an object in a list list: 34,12, 52, 16, 12 find(52) → 3 insert: insert an object to a list insert(x,3) → 34, 12, 52, x, 16, 12 remove: delete an element from the list remove(52) → 34, 12, x, 16, 12 findKth: retrieve the element at a certain position
  • 9. Linked Lists / Slide 9 Implementation of an ADT Choose a data structure to represent the ADT E.g. arrays, records, etc. Each operation associated with the ADT is implemented by one or more subroutines Two standard implementations for the list ADT Array-based Linked list
  • 10. Linked Lists / Slide 10 Array Implementation Elements are stored in contiguous array positions
  • 11. Linked Lists / Slide 11 Array Implementation... Requires an estimate of the maximum size of the list  waste space printList and find: linear findKth: constant insert and delete: slow e.g. insert at position 0 (making a new element)  requires first pushing the entire array down one spot to make room e.g. delete at position 0  requires shifting all the elements in the list up one On average, half of the lists needs to be moved for either operation
  • 12. Linked Lists / Slide 12 Pointer Implementation (Linked List) Ensure that the list is not stored contiguously use a linked list a series of structures that are not necessarily adjacent in memory  Each node contains the element and a pointer to a structure containing its successor the last cell’s next link points to NULL  Compared to the array implementation, the pointer implementation uses only as much space as is needed for the elements currently on the list but requires space for the pointers in each cell
  • 13. Linked Lists / Slide 13 Linked Lists A linked list is a series of connected nodes Each node contains at least A piece of data (any type) Pointer to the next node in the list Head: pointer to the first node The last node points to NULL A ∅ Head B C A data pointer node
  • 14. Linked Lists / Slide 14 A Simple Linked List Class We use two classes: Node and List Declare Node class for the nodes data: double-type data in this example next: a pointer to the next node in the list class Node { public: double data; // data Node* next; // pointer to next };
  • 15. Linked Lists / Slide 15 A Simple Linked List Class Declare List, which contains head: a pointer to the first node in the list. Since the list is empty initially, head is set to NULL Operations on List class List { public: List(void) { head = NULL; } // constructor ~List(void); // destructor bool IsEmpty() { return head == NULL; } Node* InsertNode(int index, double x); int FindNode(double x); int DeleteNode(double x); void DisplayList(void); private: Node* head; };
  • 16. Linked Lists / Slide 16 A Simple Linked List Class Operations of List IsEmpty: determine whether or not the list is empty InsertNode: insert a new node at a particular position FindNode: find a node with a given value DeleteNode: delete a node with a given value DisplayList: print all the nodes in the list
  • 17. Linked Lists / Slide 17 Inserting a new node Node* InsertNode(int index, double x) Insert a node with data equal to x after the index’th elements. (i.e., when index = 0, insert the node as the first element; when index = 1, insert the node after the first element, and so on) If the insertion is successful, return the inserted node. Otherwise, return NULL. (If index is < 0 or > length of the list, the insertion will fail.) Steps 1. Locate index’th element 2. Allocate memory for the new node 3. Point the new node to its successor 4. Point the new node’s predecessor to the new node newNode index’th element
  • 18. Linked Lists / Slide 18 Inserting a new node Possible cases of InsertNode 1. Insert into an empty list 2. Insert in front 3. Insert at back 4. Insert in middle But, in fact, only need to handle two cases Insert as the first node (Case 1 and Case 2) Insert in the middle or at the end of the list (Case 3 and Case 4)
  • 19. Linked Lists / Slide 19 Inserting a new node Node* List::InsertNode(int index, double x) { if (index < 0) return NULL; int currIndex = 1; Node* currNode = head; while (currNode && index > currIndex) { currNode = currNode->next; currIndex++; } if (index > 0 && currNode == NULL) return NULL; Node* newNode = new Node; newNode->data = x; if (index == 0) { newNode->next = head; head = newNode; } else { newNode->next = currNode->next; currNode->next = newNode; } return newNode; } Try to locate index’th node. If it doesn’t exist, return NULL.
  • 20. Linked Lists / Slide 20 Inserting a new node Node* List::InsertNode(int index, double x) { if (index < 0) return NULL; int currIndex = 1; Node* currNode = head; while (currNode && index > currIndex) { currNode = currNode->next; currIndex++; } if (index > 0 && currNode == NULL) return NULL; Node* newNode = new Node; newNode->data = x; if (index == 0) { newNode->next = head; head = newNode; } else { newNode->next = currNode->next; currNode->next = newNode; } return newNode; } Create a new node
  • 21. Linked Lists / Slide 21 Inserting a new node Node* List::InsertNode(int index, double x) { if (index < 0) return NULL; int currIndex = 1; Node* currNode = head; while (currNode && index > currIndex) { currNode = currNode->next; currIndex++; } if (index > 0 && currNode == NULL) return NULL; Node* newNode = new Node; newNode->data = x; if (index == 0) { newNode->next = head; head = newNode; } else { newNode->next = currNode->next; currNode->next = newNode; } return newNode; } Insert as first element head newNode
  • 22. Linked Lists / Slide 22 Inserting a new node Node* List::InsertNode(int index, double x) { if (index < 0) return NULL; int currIndex = 1; Node* currNode = head; while (currNode && index > currIndex) { currNode = currNode->next; currIndex++; } if (index > 0 && currNode == NULL) return NULL; Node* newNode = new Node; newNode->data = x; if (index == 0) { newNode->next = head; head = newNode; } else { newNode->next = currNode->next; currNode->next = newNode; } return newNode; } Insert after currNode newNode currNode
  • 23. Linked Lists / Slide 23 Finding a node int FindNode(double x) Search for a node with the value equal to x in the list. If such a node is found, return its position. Otherwise, return 0. int List::FindNode(double x) { Node* currNode = head; int currIndex = 1; while (currNode && currNode->data != x) { currNode = currNode->next; currIndex++; } if (currNode) return currIndex; return 0; }
  • 24. Linked Lists / Slide 24 Deleting a node int DeleteNode(double x) Delete a node with the value equal to x from the list. If such a node is found, return its position. Otherwise, return 0. Steps Find the desirable node (similar to FindNode) Release the memory occupied by the found node Set the pointer of the predecessor of the found node to the successor of the found node Like InsertNode, there are two special cases Delete first node Delete the node in middle or at the end of the list
  • 25. Linked Lists / Slide 25 Deleting a node int List::DeleteNode(double x) { Node* prevNode = NULL; Node* currNode = head; int currIndex = 1; while (currNode && currNode->data != x) { prevNode = currNode; currNode = currNode->next; currIndex++; } if (currNode) { if (prevNode) { prevNode->next = currNode->next; delete currNode; } else { head = currNode->next; delete currNode; } return currIndex; } return 0; } Try to find the node with its value equal to x
  • 26. Linked Lists / Slide 26 Deleting a node int List::DeleteNode(double x) { Node* prevNode = NULL; Node* currNode = head; int currIndex = 1; while (currNode && currNode->data != x) { prevNode = currNode; currNode = currNode->next; currIndex++; } if (currNode) { if (prevNode) { prevNode->next = currNode->next; delete currNode; } else { head = currNode->next; delete currNode; } return currIndex; } return 0; } currNodeprevNode
  • 27. Linked Lists / Slide 27 Deleting a node int List::DeleteNode(double x) { Node* prevNode = NULL; Node* currNode = head; int currIndex = 1; while (currNode && currNode->data != x) { prevNode = currNode; currNode = currNode->next; currIndex++; } if (currNode) { if (prevNode) { prevNode->next = currNode->next; delete currNode; } else { head = currNode->next; delete currNode; } return currIndex; } return 0; } currNodehead
  • 28. Linked Lists / Slide 28 Printing all the elements void DisplayList(void) Print the data of all the elements Print the number of the nodes in the list void List::DisplayList() { int num = 0; Node* currNode = head; while (currNode != NULL){ cout << currNode->data << endl; currNode = currNode->next; num++; } cout << "Number of nodes in the list: " << num << endl; }
  • 29. Linked Lists / Slide 29 Destroying the list ~List(void) Use the destructor to release all the memory used by the list. Step through the list and delete each node one by one. List::~List(void) { Node* currNode = head, *nextNode = NULL; while (currNode != NULL) { nextNode = currNode->next; // destroy the current node delete currNode; currNode = nextNode; } }
  • 30. Linked Lists / Slide 30 Using List int main(void) { List list; list.InsertNode(0, 7.0); // successful list.InsertNode(1, 5.0); // successful list.InsertNode(-1, 5.0); // unsuccessful list.InsertNode(0, 6.0); // successful list.InsertNode(8, 4.0); // unsuccessful // print all the elements list.DisplayList(); if(list.FindNode(5.0) > 0) cout << "5.0 found" << endl; else cout << "5.0 not found" << endl; if(list.FindNode(4.5) > 0) cout << "4.5 found" << endl; else cout << "4.5 not found" << endl; list.DeleteNode(7.0); list.DisplayList(); return 0; } 6 7 5 Number of nodes in the list: 3 5.0 found 4.5 not found 6 5 Number of nodes in the list: 2 result
  • 31. Linked Lists / Slide 31 Variations of Linked Lists Circular linked lists The last node points to the first node of the list How do we know when we have finished traversing the list? (Tip: check if the pointer of the current node is equal to the head.) A Head B C
  • 32. Linked Lists / Slide 32 Variations of Linked Lists Doubly linked lists Each node points to not only successor but the predecessor There are two NULL: at the first and last nodes in the list Advantage: given a node, it is easy to visit its predecessor. Convenient to traverse lists backwards A Head B∅ C ∅
  • 33. Linked Lists / Slide 33 Array versus Linked Lists Linked lists are more complex to code and manage than arrays, but they have some distinct advantages. Dynamic: a linked list can easily grow and shrink in size.  We don’t need to know how many nodes will be in the list. They are created in memory as needed.  In contrast, the size of a C++ array is fixed at compilation time. Easy and fast insertions and deletions  To insert or delete an element in an array, we need to copy to temporary variables to make room for new elements or close the gap caused by deleted elements.  With a linked list, no need to move other nodes. Only need to reset some pointers.
  • 34. Linked Lists / Slide 34 Example: The Polynomial ADT An ADT for single-variable polynomials Array implementation ∑= = N i i i xaxf 0 )(
  • 35. Linked Lists / Slide 35 The Polynomial ADT… Acceptable if most of the coefficients Aj are nonzero, undesirable if this is not the case E.g. multiply  most of the time is spent multiplying zeros and stepping through nonexistent parts of the input polynomials Implementation using a singly linked list Each term is contained in one cell, and the cells are sorted in decreasing order of exponents 51123)( 1510)( 14921990 2 141000 1 ++−= ++= xxxxP xxxP