SlideShare una empresa de Scribd logo
1 de 38
Data Structure and
Algorithm
(CS 102)
Ashok K Turuk
Problem With Array
• Fixed Length (Occupy a Block of
memory) [Are also called Dense List]
• To expand an Array

– create a new array, longer in size and
– copy the contents of the old array into the
new array

• Insertion or Deletion
2
Solution
• Attach a pointer to each item in
the array, which points to the
next item

–This is a linked list
–An data item plus its pointer
is called a node
3
Linked List
• A linked list, or one-way list, is a
linear collection of data elements ,
called nodes, where the linear order
is given by means of pointer

4
Linked List
• Each node is divided into two
parts

–First part contains the
information of the element, and
–Second part called the link field
or nextpointer field contains the
address of the next node in the
list.
5
Linked Lists
A

B

C

Head
• A linked list is a series of connected
nodes
• Head : pointer to the first node
• The last node points to NULL

6
Linked Lists
node

A

data

pointer

• Each node contains at least
– A piece of data (any type)
– Pointer to the next node in the list

7
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
};
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
A Simple Linked List Class
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;
};
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
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.)
Inserting a new node
• Steps
1.
2.
3.
4.

Locate index’th element
Allocate memory for the new node
Point the new node to its successor
Point the new node’s predecessor to the new
node
index’th element

newNode
Inserting a new node
•

Possible cases of InsertNode

1.
2.
3.
4.

•

Insert into an empty list
Insert in front
Insert at back
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)
Inserting a new node

Node*

Try to
List::InsertNode(int index, double x) { locate
index’th node.
if (index < 0) return NULL;
If it doesn’t

exist, return
int currIndex =
1;
NULL.
Node* currNode
=
head;
while (currNode && index > currIndex) {
currNode =
currNode->next;
currIndex++;
}
if (index > 0 && currNode == NULL)
return NULL;
Node* newNode
newNode->data
if (index == 0) {
}
else {

=
=

new
x;

Node;

newNode->next
head

=

head;
=

newNode->next
currNode->next

=
=

currNode->next;
newNode;

newNode;
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 =
newNode->data =
if (index == 0) {
newNode->next
head
}
else {
newNode->next
currNode->next
}
return newNode;
}

new Node;
x;
Create a new node

=
=

head;
newNode;

=
=

currNode->next;
newNode;
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

newNode->data

=

Node;

Insert as first
element

x;

if (index == 0) {
newNode->next =
head;
head
=
newNode;
}

head

else {
newNode->next =
currNode->next =
}
return newNode;
}

currNode->next;
newNode;

newNode
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
=
newNode->data
=
if (index == 0) {
newNode->next
head
}

else {
}

Node;

=
=

head;
newNode;

Insert after
currNode

newNode->next =currNode->next;
currNode->next =
newNode;

return newNode;

}

new
x;

currNode

newNode
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;
}
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;
}
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
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
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
Deleting a node

Try to find the node
int List::DeleteNode(double x) {
with its value equal to
Node* prevNode =
NULL;
x
Node* currNode =
head;
int currIndex =
1;
while (currNode && currNode->data != x) {
prevNode
=
currNode;
currNode=
currNode->next;
currIndex++;
}
if (currNode) {

if (prevNode) {
}
else {

}

}
return currIndex;

prevNode->next
=
delete currNode;

currNode->next;

head
delete currNode;

=

currNode->next;
Deleting a node

int List::DeleteNode(double x) {
prevNode currNode

A

B

C
Deleting a node

int List::DeleteNode(double x) {
prevNode

A

C
Deleting a node

int List::DeleteNode(double x) {
prevNode

A

C
Deleting a node

int List::DeleteNode(double x) {
Node* prevNode =
NULL;
Node* currNode =
head;
int currIndex
=
1;
while (currNode && currNode->data != x) {
prevNode
=
currNode
=
currIndex++;
}

currNode;
currNode->next;

if (currNode) {
if (prevNode) {
prevNode->next=
currNode->next;
delete currNode;
}
else {

}

}
return 0;

}
return currIndex;

head
delete currNode;

=

currNode->next;
Deleting a node
int List::DeleteNode(double x) {
head currNode

A

B
Deleting a node
int List::DeleteNode(double x) {
head

B
Deleting a node
int List::DeleteNode(double x) {
head

B
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;
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;
}
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;
}
}
Using List
int main(void)
{
List list;
list.InsertNode(0, 7.0);
list.InsertNode(1, 5.0);
list.InsertNode(-1, 5.0);
list.InsertNode(0, 6.0);
list.InsertNode(8, 4.0);
// print all the elements
list.DisplayList();
if(list.FindNode(5.0) > 0)
else
if(list.FindNode(4.5) > 0)
else
list.DeleteNode(7.0);
list.DisplayList();
return 0;
}

//
//
//
//
//

6
result
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

successful
successful
unsuccessful
successful
unsuccessful

cout
cout
cout
cout

<<
<<
<<
<<

"5.0
"5.0
"4.5
"4.5

found" << endl;
not found" << endl;
found" << endl;
not found" << endl;
Variations of Linked Lists
• Circular linked lists

– The last node points to the first node of the list

A

B

C

Head

– 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.)
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
Time of the Operations
• Time to search() is O(L) where L is the
relative location of the desired item in the
List. In the worst case. The time is O(n). In
the average case it is O(N/2)=O(n).
• Time for remove() is dominated by the time
for search, and is thus O(n).
• Time for insert at head or at tail is O(1).
• Time for insert at other positions is
dominated by search time, and thus O(n).

• Time for size() is O(1), and time for isEmpty() is O(1)
CS 103

38

Más contenido relacionado

La actualidad más candente

linked list (c#)
 linked list (c#) linked list (c#)
linked list (c#)swajahatr
 
Array implementation and linked list as datat structure
Array implementation and linked list as datat structureArray implementation and linked list as datat structure
Array implementation and linked list as datat structureTushar Aneyrao
 
Data structure using c module 1
Data structure using c module 1Data structure using c module 1
Data structure using c module 1smruti sarangi
 
Fundamentals of data structures
Fundamentals of data structuresFundamentals of data structures
Fundamentals of data structuresNiraj Agarwal
 
Linked list
Linked listLinked list
Linked listVONI
 
Data Structure and Algorithms Arrays
Data Structure and Algorithms ArraysData Structure and Algorithms Arrays
Data Structure and Algorithms ArraysManishPrajapati78
 
Data structure lecture 5
Data structure lecture 5Data structure lecture 5
Data structure lecture 5Kumar
 
DATA STRUCTURE CLASS 12 COMPUTER SCIENCE
DATA STRUCTURE CLASS 12 COMPUTER SCIENCEDATA STRUCTURE CLASS 12 COMPUTER SCIENCE
DATA STRUCTURE CLASS 12 COMPUTER SCIENCEDev Chauhan
 
Linked List, Types of Linked LIst, Various Operations, Applications of Linked...
Linked List, Types of Linked LIst, Various Operations, Applications of Linked...Linked List, Types of Linked LIst, Various Operations, Applications of Linked...
Linked List, Types of Linked LIst, Various Operations, Applications of Linked...Balwant Gorad
 
Unit 2 linked list and queues
Unit 2   linked list and queuesUnit 2   linked list and queues
Unit 2 linked list and queueskalyanineve
 

La actualidad más candente (20)

linked list (c#)
 linked list (c#) linked list (c#)
linked list (c#)
 
Array implementation and linked list as datat structure
Array implementation and linked list as datat structureArray implementation and linked list as datat structure
Array implementation and linked list as datat structure
 
Unit 5 linked list
Unit   5 linked listUnit   5 linked list
Unit 5 linked list
 
Data structure using c module 1
Data structure using c module 1Data structure using c module 1
Data structure using c module 1
 
Unit 7 sorting
Unit 7   sortingUnit 7   sorting
Unit 7 sorting
 
Unit 7 sorting
Unit   7 sortingUnit   7 sorting
Unit 7 sorting
 
Fundamentals of data structures
Fundamentals of data structuresFundamentals of data structures
Fundamentals of data structures
 
Linked list
Linked listLinked list
Linked list
 
Linked list
Linked listLinked list
Linked list
 
Data Structure and Algorithms Arrays
Data Structure and Algorithms ArraysData Structure and Algorithms Arrays
Data Structure and Algorithms Arrays
 
Data structure lecture 5
Data structure lecture 5Data structure lecture 5
Data structure lecture 5
 
DATA STRUCTURE CLASS 12 COMPUTER SCIENCE
DATA STRUCTURE CLASS 12 COMPUTER SCIENCEDATA STRUCTURE CLASS 12 COMPUTER SCIENCE
DATA STRUCTURE CLASS 12 COMPUTER SCIENCE
 
Linklist
LinklistLinklist
Linklist
 
Linked list
Linked listLinked list
Linked list
 
Linked List, Types of Linked LIst, Various Operations, Applications of Linked...
Linked List, Types of Linked LIst, Various Operations, Applications of Linked...Linked List, Types of Linked LIst, Various Operations, Applications of Linked...
Linked List, Types of Linked LIst, Various Operations, Applications of Linked...
 
Arrays
ArraysArrays
Arrays
 
Algo>ADT list & linked list
Algo>ADT list & linked listAlgo>ADT list & linked list
Algo>ADT list & linked list
 
Data structure
Data  structureData  structure
Data structure
 
Linked lists a
Linked lists aLinked lists a
Linked lists a
 
Unit 2 linked list and queues
Unit 2   linked list and queuesUnit 2   linked list and queues
Unit 2 linked list and queues
 

Destacado

Lecture 2 data structures and algorithms
Lecture 2 data structures and algorithmsLecture 2 data structures and algorithms
Lecture 2 data structures and algorithmsAakash deep Singhal
 
Lecture 6 data structures and algorithms
Lecture 6 data structures and algorithmsLecture 6 data structures and algorithms
Lecture 6 data structures and algorithmsAakash deep Singhal
 
Lecture 16 data structures and algorithms
Lecture 16 data structures and algorithmsLecture 16 data structures and algorithms
Lecture 16 data structures and algorithmsAakash deep Singhal
 
Lecture 15 data structures and algorithms
Lecture 15 data structures and algorithmsLecture 15 data structures and algorithms
Lecture 15 data structures and algorithmsAakash deep Singhal
 
Lecture 14 data structures and algorithms
Lecture 14 data structures and algorithmsLecture 14 data structures and algorithms
Lecture 14 data structures and algorithmsAakash deep Singhal
 
មេរៀនៈ Data Structure and Algorithm in C/C++
មេរៀនៈ Data Structure and Algorithm in C/C++មេរៀនៈ Data Structure and Algorithm in C/C++
មេរៀនៈ Data Structure and Algorithm in C/C++Ngeam Soly
 
Lecture 1 data structures and algorithms
Lecture 1 data structures and algorithmsLecture 1 data structures and algorithms
Lecture 1 data structures and algorithmsAakash deep Singhal
 
DATA STRUCTURES
DATA STRUCTURESDATA STRUCTURES
DATA STRUCTURESbca2010
 

Destacado (12)

Lecture 2 data structures and algorithms
Lecture 2 data structures and algorithmsLecture 2 data structures and algorithms
Lecture 2 data structures and algorithms
 
U2.linked list
U2.linked listU2.linked list
U2.linked list
 
Lecture 6 data structures and algorithms
Lecture 6 data structures and algorithmsLecture 6 data structures and algorithms
Lecture 6 data structures and algorithms
 
12111 data structure
12111 data structure12111 data structure
12111 data structure
 
Lecture 16 data structures and algorithms
Lecture 16 data structures and algorithmsLecture 16 data structures and algorithms
Lecture 16 data structures and algorithms
 
Lecture 15 data structures and algorithms
Lecture 15 data structures and algorithmsLecture 15 data structures and algorithms
Lecture 15 data structures and algorithms
 
Lecture 14 data structures and algorithms
Lecture 14 data structures and algorithmsLecture 14 data structures and algorithms
Lecture 14 data structures and algorithms
 
Subsidence in coal mines
Subsidence in coal minesSubsidence in coal mines
Subsidence in coal mines
 
Linked list
Linked listLinked list
Linked list
 
មេរៀនៈ Data Structure and Algorithm in C/C++
មេរៀនៈ Data Structure and Algorithm in C/C++មេរៀនៈ Data Structure and Algorithm in C/C++
មេរៀនៈ Data Structure and Algorithm in C/C++
 
Lecture 1 data structures and algorithms
Lecture 1 data structures and algorithmsLecture 1 data structures and algorithms
Lecture 1 data structures and algorithms
 
DATA STRUCTURES
DATA STRUCTURESDATA STRUCTURES
DATA STRUCTURES
 

Similar a Lecture 4 data structures and algorithms

Introduction to data structure by anil dutt
Introduction to data structure by anil duttIntroduction to data structure by anil dutt
Introduction to data structure by anil duttAnil Dutt
 
in C++ , Design a linked list class named IntegerList to hold a seri.pdf
in C++ , Design a linked list class named IntegerList to hold a seri.pdfin C++ , Design a linked list class named IntegerList to hold a seri.pdf
in C++ , Design a linked list class named IntegerList to hold a seri.pdfeyewaregallery
 
Array linked list.ppt
Array  linked list.pptArray  linked list.ppt
Array linked list.pptWaf1231
 
Data Structure and Algorithm Lesson 2.pptx
Data Structure and Algorithm Lesson 2.pptxData Structure and Algorithm Lesson 2.pptx
Data Structure and Algorithm Lesson 2.pptxJoannahClaireAlforqu
 
linkedlist-130914084342-phpapp02.pptx
linkedlist-130914084342-phpapp02.pptxlinkedlist-130914084342-phpapp02.pptx
linkedlist-130914084342-phpapp02.pptxMeghaKulkarni27
 
Inspect the class declaration for a doubly-linked list node in Node-h-.pdf
Inspect the class declaration for a doubly-linked list node in Node-h-.pdfInspect the class declaration for a doubly-linked list node in Node-h-.pdf
Inspect the class declaration for a doubly-linked list node in Node-h-.pdfvishalateen
 

Similar a Lecture 4 data structures and algorithms (20)

3.linked list
3.linked list3.linked list
3.linked list
 
Abstract data types
Abstract data typesAbstract data types
Abstract data types
 
linked-list.ppt
linked-list.pptlinked-list.ppt
linked-list.ppt
 
17 linkedlist (1)
17 linkedlist (1)17 linkedlist (1)
17 linkedlist (1)
 
Linkedlist
LinkedlistLinkedlist
Linkedlist
 
List
ListList
List
 
Linked list
Linked listLinked list
Linked list
 
Unit - 2.pdf
Unit - 2.pdfUnit - 2.pdf
Unit - 2.pdf
 
dynamicList.ppt
dynamicList.pptdynamicList.ppt
dynamicList.ppt
 
Unit7 C
Unit7 CUnit7 C
Unit7 C
 
Introduction to data structure by anil dutt
Introduction to data structure by anil duttIntroduction to data structure by anil dutt
Introduction to data structure by anil dutt
 
Data structures
Data structuresData structures
Data structures
 
in C++ , Design a linked list class named IntegerList to hold a seri.pdf
in C++ , Design a linked list class named IntegerList to hold a seri.pdfin C++ , Design a linked list class named IntegerList to hold a seri.pdf
in C++ , Design a linked list class named IntegerList to hold a seri.pdf
 
Array linked list.ppt
Array  linked list.pptArray  linked list.ppt
Array linked list.ppt
 
Data Structure and Algorithm Lesson 2.pptx
Data Structure and Algorithm Lesson 2.pptxData Structure and Algorithm Lesson 2.pptx
Data Structure and Algorithm Lesson 2.pptx
 
C Homework Help
C Homework HelpC Homework Help
C Homework Help
 
C Exam Help
C Exam Help C Exam Help
C Exam Help
 
linkedlist-130914084342-phpapp02.pptx
linkedlist-130914084342-phpapp02.pptxlinkedlist-130914084342-phpapp02.pptx
linkedlist-130914084342-phpapp02.pptx
 
Inspect the class declaration for a doubly-linked list node in Node-h-.pdf
Inspect the class declaration for a doubly-linked list node in Node-h-.pdfInspect the class declaration for a doubly-linked list node in Node-h-.pdf
Inspect the class declaration for a doubly-linked list node in Node-h-.pdf
 
Linked list1.ppt
Linked list1.pptLinked list1.ppt
Linked list1.ppt
 

Último

How to Configure Email Server in Odoo 17
How to Configure Email Server in Odoo 17How to Configure Email Server in Odoo 17
How to Configure Email Server in Odoo 17Celine George
 
Enzyme, Pharmaceutical Aids, Miscellaneous Last Part of Chapter no 5th.pdf
Enzyme, Pharmaceutical Aids, Miscellaneous Last Part of Chapter no 5th.pdfEnzyme, Pharmaceutical Aids, Miscellaneous Last Part of Chapter no 5th.pdf
Enzyme, Pharmaceutical Aids, Miscellaneous Last Part of Chapter no 5th.pdfSumit Tiwari
 
Accessible design: Minimum effort, maximum impact
Accessible design: Minimum effort, maximum impactAccessible design: Minimum effort, maximum impact
Accessible design: Minimum effort, maximum impactdawncurless
 
Employee wellbeing at the workplace.pptx
Employee wellbeing at the workplace.pptxEmployee wellbeing at the workplace.pptx
Employee wellbeing at the workplace.pptxNirmalaLoungPoorunde1
 
Organic Name Reactions for the students and aspirants of Chemistry12th.pptx
Organic Name Reactions  for the students and aspirants of Chemistry12th.pptxOrganic Name Reactions  for the students and aspirants of Chemistry12th.pptx
Organic Name Reactions for the students and aspirants of Chemistry12th.pptxVS Mahajan Coaching Centre
 
Presiding Officer Training module 2024 lok sabha elections
Presiding Officer Training module 2024 lok sabha electionsPresiding Officer Training module 2024 lok sabha elections
Presiding Officer Training module 2024 lok sabha electionsanshu789521
 
Alper Gobel In Media Res Media Component
Alper Gobel In Media Res Media ComponentAlper Gobel In Media Res Media Component
Alper Gobel In Media Res Media ComponentInMediaRes1
 
Presentation by Andreas Schleicher Tackling the School Absenteeism Crisis 30 ...
Presentation by Andreas Schleicher Tackling the School Absenteeism Crisis 30 ...Presentation by Andreas Schleicher Tackling the School Absenteeism Crisis 30 ...
Presentation by Andreas Schleicher Tackling the School Absenteeism Crisis 30 ...EduSkills OECD
 
URLs and Routing in the Odoo 17 Website App
URLs and Routing in the Odoo 17 Website AppURLs and Routing in the Odoo 17 Website App
URLs and Routing in the Odoo 17 Website AppCeline George
 
Contemporary philippine arts from the regions_PPT_Module_12 [Autosaved] (1).pptx
Contemporary philippine arts from the regions_PPT_Module_12 [Autosaved] (1).pptxContemporary philippine arts from the regions_PPT_Module_12 [Autosaved] (1).pptx
Contemporary philippine arts from the regions_PPT_Module_12 [Autosaved] (1).pptxRoyAbrique
 
18-04-UA_REPORT_MEDIALITERAСY_INDEX-DM_23-1-final-eng.pdf
18-04-UA_REPORT_MEDIALITERAСY_INDEX-DM_23-1-final-eng.pdf18-04-UA_REPORT_MEDIALITERAСY_INDEX-DM_23-1-final-eng.pdf
18-04-UA_REPORT_MEDIALITERAСY_INDEX-DM_23-1-final-eng.pdfssuser54595a
 
Crayon Activity Handout For the Crayon A
Crayon Activity Handout For the Crayon ACrayon Activity Handout For the Crayon A
Crayon Activity Handout For the Crayon AUnboundStockton
 
Separation of Lanthanides/ Lanthanides and Actinides
Separation of Lanthanides/ Lanthanides and ActinidesSeparation of Lanthanides/ Lanthanides and Actinides
Separation of Lanthanides/ Lanthanides and ActinidesFatimaKhan178732
 
Concept of Vouching. B.Com(Hons) /B.Compdf
Concept of Vouching. B.Com(Hons) /B.CompdfConcept of Vouching. B.Com(Hons) /B.Compdf
Concept of Vouching. B.Com(Hons) /B.CompdfUmakantAnnand
 
Paris 2024 Olympic Geographies - an activity
Paris 2024 Olympic Geographies - an activityParis 2024 Olympic Geographies - an activity
Paris 2024 Olympic Geographies - an activityGeoBlogs
 
Incoming and Outgoing Shipments in 1 STEP Using Odoo 17
Incoming and Outgoing Shipments in 1 STEP Using Odoo 17Incoming and Outgoing Shipments in 1 STEP Using Odoo 17
Incoming and Outgoing Shipments in 1 STEP Using Odoo 17Celine George
 
How to Make a Pirate ship Primary Education.pptx
How to Make a Pirate ship Primary Education.pptxHow to Make a Pirate ship Primary Education.pptx
How to Make a Pirate ship Primary Education.pptxmanuelaromero2013
 

Último (20)

How to Configure Email Server in Odoo 17
How to Configure Email Server in Odoo 17How to Configure Email Server in Odoo 17
How to Configure Email Server in Odoo 17
 
Enzyme, Pharmaceutical Aids, Miscellaneous Last Part of Chapter no 5th.pdf
Enzyme, Pharmaceutical Aids, Miscellaneous Last Part of Chapter no 5th.pdfEnzyme, Pharmaceutical Aids, Miscellaneous Last Part of Chapter no 5th.pdf
Enzyme, Pharmaceutical Aids, Miscellaneous Last Part of Chapter no 5th.pdf
 
Accessible design: Minimum effort, maximum impact
Accessible design: Minimum effort, maximum impactAccessible design: Minimum effort, maximum impact
Accessible design: Minimum effort, maximum impact
 
TataKelola dan KamSiber Kecerdasan Buatan v022.pdf
TataKelola dan KamSiber Kecerdasan Buatan v022.pdfTataKelola dan KamSiber Kecerdasan Buatan v022.pdf
TataKelola dan KamSiber Kecerdasan Buatan v022.pdf
 
Model Call Girl in Bikash Puri Delhi reach out to us at 🔝9953056974🔝
Model Call Girl in Bikash Puri  Delhi reach out to us at 🔝9953056974🔝Model Call Girl in Bikash Puri  Delhi reach out to us at 🔝9953056974🔝
Model Call Girl in Bikash Puri Delhi reach out to us at 🔝9953056974🔝
 
Employee wellbeing at the workplace.pptx
Employee wellbeing at the workplace.pptxEmployee wellbeing at the workplace.pptx
Employee wellbeing at the workplace.pptx
 
Organic Name Reactions for the students and aspirants of Chemistry12th.pptx
Organic Name Reactions  for the students and aspirants of Chemistry12th.pptxOrganic Name Reactions  for the students and aspirants of Chemistry12th.pptx
Organic Name Reactions for the students and aspirants of Chemistry12th.pptx
 
Presiding Officer Training module 2024 lok sabha elections
Presiding Officer Training module 2024 lok sabha electionsPresiding Officer Training module 2024 lok sabha elections
Presiding Officer Training module 2024 lok sabha elections
 
Alper Gobel In Media Res Media Component
Alper Gobel In Media Res Media ComponentAlper Gobel In Media Res Media Component
Alper Gobel In Media Res Media Component
 
Presentation by Andreas Schleicher Tackling the School Absenteeism Crisis 30 ...
Presentation by Andreas Schleicher Tackling the School Absenteeism Crisis 30 ...Presentation by Andreas Schleicher Tackling the School Absenteeism Crisis 30 ...
Presentation by Andreas Schleicher Tackling the School Absenteeism Crisis 30 ...
 
Código Creativo y Arte de Software | Unidad 1
Código Creativo y Arte de Software | Unidad 1Código Creativo y Arte de Software | Unidad 1
Código Creativo y Arte de Software | Unidad 1
 
URLs and Routing in the Odoo 17 Website App
URLs and Routing in the Odoo 17 Website AppURLs and Routing in the Odoo 17 Website App
URLs and Routing in the Odoo 17 Website App
 
Contemporary philippine arts from the regions_PPT_Module_12 [Autosaved] (1).pptx
Contemporary philippine arts from the regions_PPT_Module_12 [Autosaved] (1).pptxContemporary philippine arts from the regions_PPT_Module_12 [Autosaved] (1).pptx
Contemporary philippine arts from the regions_PPT_Module_12 [Autosaved] (1).pptx
 
18-04-UA_REPORT_MEDIALITERAСY_INDEX-DM_23-1-final-eng.pdf
18-04-UA_REPORT_MEDIALITERAСY_INDEX-DM_23-1-final-eng.pdf18-04-UA_REPORT_MEDIALITERAСY_INDEX-DM_23-1-final-eng.pdf
18-04-UA_REPORT_MEDIALITERAСY_INDEX-DM_23-1-final-eng.pdf
 
Crayon Activity Handout For the Crayon A
Crayon Activity Handout For the Crayon ACrayon Activity Handout For the Crayon A
Crayon Activity Handout For the Crayon A
 
Separation of Lanthanides/ Lanthanides and Actinides
Separation of Lanthanides/ Lanthanides and ActinidesSeparation of Lanthanides/ Lanthanides and Actinides
Separation of Lanthanides/ Lanthanides and Actinides
 
Concept of Vouching. B.Com(Hons) /B.Compdf
Concept of Vouching. B.Com(Hons) /B.CompdfConcept of Vouching. B.Com(Hons) /B.Compdf
Concept of Vouching. B.Com(Hons) /B.Compdf
 
Paris 2024 Olympic Geographies - an activity
Paris 2024 Olympic Geographies - an activityParis 2024 Olympic Geographies - an activity
Paris 2024 Olympic Geographies - an activity
 
Incoming and Outgoing Shipments in 1 STEP Using Odoo 17
Incoming and Outgoing Shipments in 1 STEP Using Odoo 17Incoming and Outgoing Shipments in 1 STEP Using Odoo 17
Incoming and Outgoing Shipments in 1 STEP Using Odoo 17
 
How to Make a Pirate ship Primary Education.pptx
How to Make a Pirate ship Primary Education.pptxHow to Make a Pirate ship Primary Education.pptx
How to Make a Pirate ship Primary Education.pptx
 

Lecture 4 data structures and algorithms

  • 1. Data Structure and Algorithm (CS 102) Ashok K Turuk
  • 2. Problem With Array • Fixed Length (Occupy a Block of memory) [Are also called Dense List] • To expand an Array – create a new array, longer in size and – copy the contents of the old array into the new array • Insertion or Deletion 2
  • 3. Solution • Attach a pointer to each item in the array, which points to the next item –This is a linked list –An data item plus its pointer is called a node 3
  • 4. Linked List • A linked list, or one-way list, is a linear collection of data elements , called nodes, where the linear order is given by means of pointer 4
  • 5. Linked List • Each node is divided into two parts –First part contains the information of the element, and –Second part called the link field or nextpointer field contains the address of the next node in the list. 5
  • 6. Linked Lists A B C Head • A linked list is a series of connected nodes • Head : pointer to the first node • The last node points to NULL 6
  • 7. Linked Lists node A data pointer • Each node contains at least – A piece of data (any type) – Pointer to the next node in the list 7
  • 8. 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 };
  • 9. 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
  • 10. A Simple Linked List Class 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; };
  • 11. 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
  • 12. 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.)
  • 13. Inserting a new node • Steps 1. 2. 3. 4. Locate index’th element Allocate memory for the new node Point the new node to its successor Point the new node’s predecessor to the new node index’th element newNode
  • 14. Inserting a new node • Possible cases of InsertNode 1. 2. 3. 4. • Insert into an empty list Insert in front Insert at back 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)
  • 15. Inserting a new node Node* Try to List::InsertNode(int index, double x) { locate index’th node. if (index < 0) return NULL; If it doesn’t exist, return int currIndex = 1; NULL. Node* currNode = head; while (currNode && index > currIndex) { currNode = currNode->next; currIndex++; } if (index > 0 && currNode == NULL) return NULL; Node* newNode newNode->data if (index == 0) { } else { = = new x; Node; newNode->next head = head; = newNode->next currNode->next = = currNode->next; newNode; newNode;
  • 16. 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 = newNode->data = if (index == 0) { newNode->next head } else { newNode->next currNode->next } return newNode; } new Node; x; Create a new node = = head; newNode; = = currNode->next; newNode;
  • 17. 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 newNode->data = Node; Insert as first element x; if (index == 0) { newNode->next = head; head = newNode; } head else { newNode->next = currNode->next = } return newNode; } currNode->next; newNode; newNode
  • 18. 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 = newNode->data = if (index == 0) { newNode->next head } else { } Node; = = head; newNode; Insert after currNode newNode->next =currNode->next; currNode->next = newNode; return newNode; } new x; currNode newNode
  • 19. 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; }
  • 20. 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; }
  • 21. 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
  • 22. 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
  • 23. 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
  • 24. Deleting a node Try to find the node int List::DeleteNode(double x) { with its value equal to Node* prevNode = NULL; x Node* currNode = head; int currIndex = 1; while (currNode && currNode->data != x) { prevNode = currNode; currNode= currNode->next; currIndex++; } if (currNode) { if (prevNode) { } else { } } return currIndex; prevNode->next = delete currNode; currNode->next; head delete currNode; = currNode->next;
  • 25. Deleting a node int List::DeleteNode(double x) { prevNode currNode A B C
  • 26. Deleting a node int List::DeleteNode(double x) { prevNode A C
  • 27. Deleting a node int List::DeleteNode(double x) { prevNode A C
  • 28. Deleting a node int List::DeleteNode(double x) { Node* prevNode = NULL; Node* currNode = head; int currIndex = 1; while (currNode && currNode->data != x) { prevNode = currNode = currIndex++; } currNode; currNode->next; if (currNode) { if (prevNode) { prevNode->next= currNode->next; delete currNode; } else { } } return 0; } return currIndex; head delete currNode; = currNode->next;
  • 29. Deleting a node int List::DeleteNode(double x) { head currNode A B
  • 30. Deleting a node int List::DeleteNode(double x) { head B
  • 31. Deleting a node int List::DeleteNode(double x) { head B
  • 32. 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;
  • 33. 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; }
  • 34. 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; } }
  • 35. Using List int main(void) { List list; list.InsertNode(0, 7.0); list.InsertNode(1, 5.0); list.InsertNode(-1, 5.0); list.InsertNode(0, 6.0); list.InsertNode(8, 4.0); // print all the elements list.DisplayList(); if(list.FindNode(5.0) > 0) else if(list.FindNode(4.5) > 0) else list.DeleteNode(7.0); list.DisplayList(); return 0; } // // // // // 6 result 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 successful successful unsuccessful successful unsuccessful cout cout cout cout << << << << "5.0 "5.0 "4.5 "4.5 found" << endl; not found" << endl; found" << endl; not found" << endl;
  • 36. Variations of Linked Lists • Circular linked lists – The last node points to the first node of the list A B C Head – 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.)
  • 37. 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
  • 38. Time of the Operations • Time to search() is O(L) where L is the relative location of the desired item in the List. In the worst case. The time is O(n). In the average case it is O(N/2)=O(n). • Time for remove() is dominated by the time for search, and is thus O(n). • Time for insert at head or at tail is O(1). • Time for insert at other positions is dominated by search time, and thus O(n). • Time for size() is O(1), and time for isEmpty() is O(1) CS 103 38