CSC212 Data Structure - Computer Sciencewolberg/cs212/pdf/CSc212-07-LinkedLists.pdf · CSC212 Data...
Transcript of CSC212 Data Structure - Computer Sciencewolberg/cs212/pdf/CSc212-07-LinkedLists.pdf · CSC212 Data...
![Page 1: CSC212 Data Structure - Computer Sciencewolberg/cs212/pdf/CSc212-07-LinkedLists.pdf · CSC212 Data Structure Lecture 7 Linked Lists Instructor: George Wolberg Department of Computer](https://reader031.fdocuments.net/reader031/viewer/2022030410/5a9562747f8b9a8b5d8cfa50/html5/thumbnails/1.jpg)
CSC212 Data Structure CSC212 Data Structure
Lecture 7Linked Lists
Instructor: George WolbergDepartment of Computer Science
City College of New York
![Page 2: CSC212 Data Structure - Computer Sciencewolberg/cs212/pdf/CSc212-07-LinkedLists.pdf · CSC212 Data Structure Lecture 7 Linked Lists Instructor: George Wolberg Department of Computer](https://reader031.fdocuments.net/reader031/viewer/2022030410/5a9562747f8b9a8b5d8cfa50/html5/thumbnails/2.jpg)
MotivationMotivation
In a sequence using an array, inserting a new item needs to move others back...
10 20 30 ? ?
18
![Page 3: CSC212 Data Structure - Computer Sciencewolberg/cs212/pdf/CSc212-07-LinkedLists.pdf · CSC212 Data Structure Lecture 7 Linked Lists Instructor: George Wolberg Department of Computer](https://reader031.fdocuments.net/reader031/viewer/2022030410/5a9562747f8b9a8b5d8cfa50/html5/thumbnails/3.jpg)
MotivationMotivation
In a sequence using an array, inserting a new item needs to move others back...
10 20 20 30 ?
18
![Page 4: CSC212 Data Structure - Computer Sciencewolberg/cs212/pdf/CSc212-07-LinkedLists.pdf · CSC212 Data Structure Lecture 7 Linked Lists Instructor: George Wolberg Department of Computer](https://reader031.fdocuments.net/reader031/viewer/2022030410/5a9562747f8b9a8b5d8cfa50/html5/thumbnails/4.jpg)
MotivationMotivation
In a sequence using an array, inserting a new item needs to move others back...
So the Big-O of the insert is O(n)
10 18 20 30 ?
![Page 5: CSC212 Data Structure - Computer Sciencewolberg/cs212/pdf/CSc212-07-LinkedLists.pdf · CSC212 Data Structure Lecture 7 Linked Lists Instructor: George Wolberg Department of Computer](https://reader031.fdocuments.net/reader031/viewer/2022030410/5a9562747f8b9a8b5d8cfa50/html5/thumbnails/5.jpg)
MotivationMotivation
How can we insert a new item without moving others ?
10 20 30 ? ?
18
We need a new data structure
![Page 6: CSC212 Data Structure - Computer Sciencewolberg/cs212/pdf/CSc212-07-LinkedLists.pdf · CSC212 Data Structure Lecture 7 Linked Lists Instructor: George Wolberg Department of Computer](https://reader031.fdocuments.net/reader031/viewer/2022030410/5a9562747f8b9a8b5d8cfa50/html5/thumbnails/6.jpg)
MotivationMotivation
How can we insert a new item without moving others ?
18
??302010
break an array into a linked chain...
![Page 7: CSC212 Data Structure - Computer Sciencewolberg/cs212/pdf/CSc212-07-LinkedLists.pdf · CSC212 Data Structure Lecture 7 Linked Lists Instructor: George Wolberg Department of Computer](https://reader031.fdocuments.net/reader031/viewer/2022030410/5a9562747f8b9a8b5d8cfa50/html5/thumbnails/7.jpg)
MotivationMotivation
How can we insert a new item without moving others ?
18
??302010
and then put the new item into the chain
![Page 8: CSC212 Data Structure - Computer Sciencewolberg/cs212/pdf/CSc212-07-LinkedLists.pdf · CSC212 Data Structure Lecture 7 Linked Lists Instructor: George Wolberg Department of Computer](https://reader031.fdocuments.net/reader031/viewer/2022030410/5a9562747f8b9a8b5d8cfa50/html5/thumbnails/8.jpg)
MotivationMotivation
How can we insert a new item without moving others ?
18
??302010
But the links (->) need some way to build up
![Page 9: CSC212 Data Structure - Computer Sciencewolberg/cs212/pdf/CSc212-07-LinkedLists.pdf · CSC212 Data Structure Lecture 7 Linked Lists Instructor: George Wolberg Department of Computer](https://reader031.fdocuments.net/reader031/viewer/2022030410/5a9562747f8b9a8b5d8cfa50/html5/thumbnails/9.jpg)
Chapter 5 introduces the often-used data structure of linked lists.
This presentation shows how to implement the most common operations on linked lists.
Linked Lists in ActionLinked Lists in Action
CHAPTER 5Data Structures and Other Objects
![Page 10: CSC212 Data Structure - Computer Sciencewolberg/cs212/pdf/CSc212-07-LinkedLists.pdf · CSC212 Data Structure Lecture 7 Linked Lists Instructor: George Wolberg Department of Computer](https://reader031.fdocuments.net/reader031/viewer/2022030410/5a9562747f8b9a8b5d8cfa50/html5/thumbnails/10.jpg)
Each node in the linked list is a class, as shown here.
data
link
10
data
link
15
data
link
7
null
class node{public:
typedef int value_type;...
private:value_type data;node *link;
};
Declarations for Linked ListsDeclarations for Linked Lists
![Page 11: CSC212 Data Structure - Computer Sciencewolberg/cs212/pdf/CSc212-07-LinkedLists.pdf · CSC212 Data Structure Lecture 7 Linked Lists Instructor: George Wolberg Department of Computer](https://reader031.fdocuments.net/reader031/viewer/2022030410/5a9562747f8b9a8b5d8cfa50/html5/thumbnails/11.jpg)
data
link
7
The data portion of each node is a type called value_type, defined by a typedef.
link
null
data
link
15
Declarations for Linked ListsDeclarations for Linked Lists
data10
class node{public:
typedef int value_type;...
private:value_type data;node *link;
};
![Page 12: CSC212 Data Structure - Computer Sciencewolberg/cs212/pdf/CSc212-07-LinkedLists.pdf · CSC212 Data Structure Lecture 7 Linked Lists Instructor: George Wolberg Department of Computer](https://reader031.fdocuments.net/reader031/viewer/2022030410/5a9562747f8b9a8b5d8cfa50/html5/thumbnails/12.jpg)
Each node also contains a link field which is a pointer to another node.
data15
data7
Declarations for Linked ListsDeclarations for Linked Lists
data10
link
linknull
link
class node{public:
typedef int value_type;...
private:value_type data;node *link;
};
![Page 13: CSC212 Data Structure - Computer Sciencewolberg/cs212/pdf/CSc212-07-LinkedLists.pdf · CSC212 Data Structure Lecture 7 Linked Lists Instructor: George Wolberg Department of Computer](https://reader031.fdocuments.net/reader031/viewer/2022030410/5a9562747f8b9a8b5d8cfa50/html5/thumbnails/13.jpg)
Declarations for Linked ListsDeclarations for Linked Lists
A program can keep track of the first node by using a pointer variable such as head_ptr in this example.
Notice that head_ptr itself is not a node -- it is a pointer to a node. data
link
10
data
link
15
data
link
7
nullhead_ptrnode * head_ptr;
![Page 14: CSC212 Data Structure - Computer Sciencewolberg/cs212/pdf/CSc212-07-LinkedLists.pdf · CSC212 Data Structure Lecture 7 Linked Lists Instructor: George Wolberg Department of Computer](https://reader031.fdocuments.net/reader031/viewer/2022030410/5a9562747f8b9a8b5d8cfa50/html5/thumbnails/14.jpg)
Declarations for Linked ListsDeclarations for Linked Lists
A program can also keep track of the last node by using a pointer variable such as tail_ptr in this example.
Notice that tail_ptr itself is not a node -- it is a pointer to a node. data
link
10
data
link
15
data
link
7
nullhead_ptr
node * head_ptr;node * tail_ptr; tail_ptr
![Page 15: CSC212 Data Structure - Computer Sciencewolberg/cs212/pdf/CSc212-07-LinkedLists.pdf · CSC212 Data Structure Lecture 7 Linked Lists Instructor: George Wolberg Department of Computer](https://reader031.fdocuments.net/reader031/viewer/2022030410/5a9562747f8b9a8b5d8cfa50/html5/thumbnails/15.jpg)
Declarations for Linked ListsDeclarations for Linked Lists
A program can keep track of the first and the last nodes by using pointer variables such as head_ptr, tail_ptr.
Notice that neither head_ptr nor tail_ptr is a node -- it is a pointer to a node.
For an empty list, null is stored in both the head and the tail pointers.
head_ptrnull
tail_ptrnull
node * head_ptr;node * tail_ptr;head_ptr = NULL;tail_ptr = NULL;// NULL can be used for any pointers!
![Page 16: CSC212 Data Structure - Computer Sciencewolberg/cs212/pdf/CSc212-07-LinkedLists.pdf · CSC212 Data Structure Lecture 7 Linked Lists Instructor: George Wolberg Department of Computer](https://reader031.fdocuments.net/reader031/viewer/2022030410/5a9562747f8b9a8b5d8cfa50/html5/thumbnails/16.jpg)
The Complete node Class DefinitionThe Complete node Class Definition
The node class is fundamental to linked listsThe private member variablesdata: a value_type variable link: a pointer to the next node
The member functions include:A constructorSet data and set linkRetrieve data and retrieve link
![Page 17: CSC212 Data Structure - Computer Sciencewolberg/cs212/pdf/CSc212-07-LinkedLists.pdf · CSC212 Data Structure Lecture 7 Linked Lists Instructor: George Wolberg Department of Computer](https://reader031.fdocuments.net/reader031/viewer/2022030410/5a9562747f8b9a8b5d8cfa50/html5/thumbnails/17.jpg)
The Complete node Class DefinitionThe Complete node Class Definition
The node class is fundamental to linked listsThe private member variablesdata_field link_field
The member functions include:A constructorSet data and set linkRetrieve data and retrieve link
class node{public:
// TYPEDEFtypedef double value_type;
// CONSTRUCTORnode(
const value_type& init_data = value_type( ),node* init_link = NULL
){ data = init_data; link = init_link; }
// Member functions to set the data and link fields:void set_data(const value_type& new_data) { data = new_data; }void set_link(node* new_link) { link = new_link; }
// Constant member function to retrieve the current data:value_type data( ) const { return data; }
// Two slightly different member functions to retrieve// the current link:const node* link( ) const { return link; }node* link( ) { return link;}
private:value_type data;node* link;
};
default argument given by the value_type default constructor
Why TWO? p. 213-4
![Page 18: CSC212 Data Structure - Computer Sciencewolberg/cs212/pdf/CSc212-07-LinkedLists.pdf · CSC212 Data Structure Lecture 7 Linked Lists Instructor: George Wolberg Department of Computer](https://reader031.fdocuments.net/reader031/viewer/2022030410/5a9562747f8b9a8b5d8cfa50/html5/thumbnails/18.jpg)
A Small Quiz -A Small Quiz -
Suppose a program has built the linked list as shown, and head_ptr is a pointer to a node. What is the data type of *head_ptr? cout << (*head_ptr). data(); cout << head_ptr->data();
data
link
10
data
link
15
data
link
7
nullhead_ptr
![Page 19: CSC212 Data Structure - Computer Sciencewolberg/cs212/pdf/CSc212-07-LinkedLists.pdf · CSC212 Data Structure Lecture 7 Linked Lists Instructor: George Wolberg Department of Computer](https://reader031.fdocuments.net/reader031/viewer/2022030410/5a9562747f8b9a8b5d8cfa50/html5/thumbnails/19.jpg)
Linked List ToolkitLinked List Toolkit
Design Container Classes using Linked ListsThe use of a linked list is similar to our previous
use of an array in a container classBut storing and retrieving needs more work since
we do not have that handy indexing => Linked List Toolbox using node class
![Page 20: CSC212 Data Structure - Computer Sciencewolberg/cs212/pdf/CSc212-07-LinkedLists.pdf · CSC212 Data Structure Lecture 7 Linked Lists Instructor: George Wolberg Department of Computer](https://reader031.fdocuments.net/reader031/viewer/2022030410/5a9562747f8b9a8b5d8cfa50/html5/thumbnails/20.jpg)
The Workings of four functionsThe Workings of four functions
This lecture will show four functions: Compute the length of a linked list (code) Insert a new node at the head (code) Insert a node at any location (pseudo-code) Delete a node from the head (pseudo-code)
Read Section 5.2 for other functions in the Toolbox will be used in container classes bag and sequence
![Page 21: CSC212 Data Structure - Computer Sciencewolberg/cs212/pdf/CSc212-07-LinkedLists.pdf · CSC212 Data Structure Lecture 7 Linked Lists Instructor: George Wolberg Department of Computer](https://reader031.fdocuments.net/reader031/viewer/2022030410/5a9562747f8b9a8b5d8cfa50/html5/thumbnails/21.jpg)
size_t list_length(const node* head_ptr);
Length of a Linked ListLength of a Linked List
We simply want to compute the length of the linked list, for example the one shown here.
Note that list_length is not a member function of the node class
10
1
7
nullhead_ptr
![Page 22: CSC212 Data Structure - Computer Sciencewolberg/cs212/pdf/CSc212-07-LinkedLists.pdf · CSC212 Data Structure Lecture 7 Linked Lists Instructor: George Wolberg Department of Computer](https://reader031.fdocuments.net/reader031/viewer/2022030410/5a9562747f8b9a8b5d8cfa50/html5/thumbnails/22.jpg)
size_t list_length(const node* head_ptr);
Pseudo-code of list_lengthPseudo-code of list_length
1. Initialize the count to zero.2. Make cursor point to each
node, starting at the head. Each time cursor points to a new node, add 1 to count.
3. return count. 10
1
7
nullhead_ptr
count0
![Page 23: CSC212 Data Structure - Computer Sciencewolberg/cs212/pdf/CSc212-07-LinkedLists.pdf · CSC212 Data Structure Lecture 7 Linked Lists Instructor: George Wolberg Department of Computer](https://reader031.fdocuments.net/reader031/viewer/2022030410/5a9562747f8b9a8b5d8cfa50/html5/thumbnails/23.jpg)
size_t list_length(const node* head_ptr);
Pseudo-code of list_lengthPseudo-code of list_length
1. Initialize the count to zero.2. Make cursor point to each
node, starting at the head. Each time cursor points to a new node, add 1 to count.
3. return count. 10
1
7
nullhead_ptr
count1
cursor
![Page 24: CSC212 Data Structure - Computer Sciencewolberg/cs212/pdf/CSc212-07-LinkedLists.pdf · CSC212 Data Structure Lecture 7 Linked Lists Instructor: George Wolberg Department of Computer](https://reader031.fdocuments.net/reader031/viewer/2022030410/5a9562747f8b9a8b5d8cfa50/html5/thumbnails/24.jpg)
size_t list_length(const node* head_ptr);
Pseudo-code of list_lengthPseudo-code of list_length
1. Initialize the count to zero.2. Make cursor point to each
node, starting at the head. Each time cursor points to a new node, add 1 to count.
3. return count. 10
1
7
nullhead_ptr
count2
cursor
![Page 25: CSC212 Data Structure - Computer Sciencewolberg/cs212/pdf/CSc212-07-LinkedLists.pdf · CSC212 Data Structure Lecture 7 Linked Lists Instructor: George Wolberg Department of Computer](https://reader031.fdocuments.net/reader031/viewer/2022030410/5a9562747f8b9a8b5d8cfa50/html5/thumbnails/25.jpg)
size_t list_length(const node* head_ptr);
Pseudo-code of list_lengthPseudo-code of list_length
1. Initialize the count to zero.2. Make cursor point to each
node, starting at the head. Each time cursor points to a new node, add 1 to count.
3. return count. 10
1
7
nullhead_ptr
count3
cursor
![Page 26: CSC212 Data Structure - Computer Sciencewolberg/cs212/pdf/CSc212-07-LinkedLists.pdf · CSC212 Data Structure Lecture 7 Linked Lists Instructor: George Wolberg Department of Computer](https://reader031.fdocuments.net/reader031/viewer/2022030410/5a9562747f8b9a8b5d8cfa50/html5/thumbnails/26.jpg)
size_t list_length(const node* head_ptr);
Pseudo-code of list_lengthPseudo-code of list_length
1. Initialize the count to zero.2. Make cursor point to each
node, starting at the head. Each time cursor points to a new node, add 1 to count.
3. return count. 10
1
7
nullhead_ptr
count3
cursor
![Page 27: CSC212 Data Structure - Computer Sciencewolberg/cs212/pdf/CSc212-07-LinkedLists.pdf · CSC212 Data Structure Lecture 7 Linked Lists Instructor: George Wolberg Department of Computer](https://reader031.fdocuments.net/reader031/viewer/2022030410/5a9562747f8b9a8b5d8cfa50/html5/thumbnails/27.jpg)
size_t list_length(const node* head_ptr){
const node *cursor;size_t count = 0; // step 1for (cursor = head_ptr; cursor != NULL; cursor = cursor->link())
count++; // step 2return count; // step 3
}
Real code of list_length: List TraverseReal code of list_length: List Traverse
1. Initialize the count to zero.2. Each time cursor points to a new
node, add 1 to count.3. return count.
10
1
7
nullhead_ptrcount
0
cursor
![Page 28: CSC212 Data Structure - Computer Sciencewolberg/cs212/pdf/CSc212-07-LinkedLists.pdf · CSC212 Data Structure Lecture 7 Linked Lists Instructor: George Wolberg Department of Computer](https://reader031.fdocuments.net/reader031/viewer/2022030410/5a9562747f8b9a8b5d8cfa50/html5/thumbnails/28.jpg)
size_t list_length(const node* head_ptr){
const node *cursor;size_t count = 0; // step 1for (cursor = head_ptr; cursor != NULL; cursor = cursor->link())
count++; // step 2return count; // step 3
}
Real code of list_length: List TraverseReal code of list_length: List Traverse
1. Initialize the count to zero.2. Each time cursor points to a new
node, add 1 to count.3. return count.
10
1
7
nullhead_ptrcount
1
cursor
![Page 29: CSC212 Data Structure - Computer Sciencewolberg/cs212/pdf/CSc212-07-LinkedLists.pdf · CSC212 Data Structure Lecture 7 Linked Lists Instructor: George Wolberg Department of Computer](https://reader031.fdocuments.net/reader031/viewer/2022030410/5a9562747f8b9a8b5d8cfa50/html5/thumbnails/29.jpg)
size_t list_length(const node* head_ptr){
const node *cursor;size_t count = 0; // step 1for (cursor = head_ptr; cursor != NULL; cursor = cursor->link())
count++; // step 2return count; // step 3
}
Real code of list_length: List TraverseReal code of list_length: List Traverse
1. Initialize the count to zero.2. Each time cursor points to a new
node, add 1 to count.3. return count.
10
1
7
nullhead_ptrcount
2cursor
![Page 30: CSC212 Data Structure - Computer Sciencewolberg/cs212/pdf/CSc212-07-LinkedLists.pdf · CSC212 Data Structure Lecture 7 Linked Lists Instructor: George Wolberg Department of Computer](https://reader031.fdocuments.net/reader031/viewer/2022030410/5a9562747f8b9a8b5d8cfa50/html5/thumbnails/30.jpg)
size_t list_length(const node* head_ptr){
const node *cursor;size_t count = 0; // step 1for (cursor = head_ptr; cursor != NULL; cursor = cursor->link())
count++; // step 2return count; // step 3
}
Real code of list_length: List TraverseReal code of list_length: List Traverse
1. Initialize the count to zero.2. Each time cursor points to a new
node, add 1 to count.3. return count.
10
1
7
nullhead_ptrcount
3
cursor
![Page 31: CSC212 Data Structure - Computer Sciencewolberg/cs212/pdf/CSc212-07-LinkedLists.pdf · CSC212 Data Structure Lecture 7 Linked Lists Instructor: George Wolberg Department of Computer](https://reader031.fdocuments.net/reader031/viewer/2022030410/5a9562747f8b9a8b5d8cfa50/html5/thumbnails/31.jpg)
size_t list_length(const node* head_ptr){
const node *cursor;size_t count = 0;for (cursor = head_ptr; cursor != NULL; cursor = cursor->link())
count++;return count; // step 3
}
Big-O of list_lengthBig-O of list_length
Big-O: O (n) if length is n 10
1
7
nullhead_ptrcount
3
cursor
![Page 32: CSC212 Data Structure - Computer Sciencewolberg/cs212/pdf/CSc212-07-LinkedLists.pdf · CSC212 Data Structure Lecture 7 Linked Lists Instructor: George Wolberg Department of Computer](https://reader031.fdocuments.net/reader031/viewer/2022030410/5a9562747f8b9a8b5d8cfa50/html5/thumbnails/32.jpg)
size_t list_length(const node* head_ptr){
const node *cursor;size_t count = 0;for (cursor = head_ptr; cursor != NULL; cursor = cursor->link())
count++;return count;
}
Does list_length work for an empty list?Does list_length work for an empty list?
cursor = head_ptr = NULLcount = 0
count0
head_ptr
nullcursor
null
![Page 33: CSC212 Data Structure - Computer Sciencewolberg/cs212/pdf/CSc212-07-LinkedLists.pdf · CSC212 Data Structure Lecture 7 Linked Lists Instructor: George Wolberg Department of Computer](https://reader031.fdocuments.net/reader031/viewer/2022030410/5a9562747f8b9a8b5d8cfa50/html5/thumbnails/33.jpg)
The Workings of four functionsThe Workings of four functions
This lecture will show four functions: Compute the length of a linked list (code) Insert a new node at the head (code) Insert a node at any location (pseudo-code) Delete a node from the head (pseudo-code)
Read Section 5.2 for other functions in the Toolbox will be used in container classes bag and sequence
![Page 34: CSC212 Data Structure - Computer Sciencewolberg/cs212/pdf/CSc212-07-LinkedLists.pdf · CSC212 Data Structure Lecture 7 Linked Lists Instructor: George Wolberg Department of Computer](https://reader031.fdocuments.net/reader031/viewer/2022030410/5a9562747f8b9a8b5d8cfa50/html5/thumbnails/34.jpg)
void list_head_insert(node*& head_ptr, const node::value_type& entry);
Inserting a node at the HeadInserting a node at the Head
We want to add a new entry, 13, to the head of the linked list shown here.
Note that head_ptr is a reference node pointer
10
1
7
nullhead_ptr
entry13
![Page 35: CSC212 Data Structure - Computer Sciencewolberg/cs212/pdf/CSc212-07-LinkedLists.pdf · CSC212 Data Structure Lecture 7 Linked Lists Instructor: George Wolberg Department of Computer](https://reader031.fdocuments.net/reader031/viewer/2022030410/5a9562747f8b9a8b5d8cfa50/html5/thumbnails/35.jpg)
Inserting a Node at the HeadInserting a Node at the Head
Create a new node, pointed to by a local variable insert_ptr.
10
1
7
nullhead_ptr
entry13
insert_ptr
void list_head_insert(node*& head_ptr, const node::value_type& entry);
![Page 36: CSC212 Data Structure - Computer Sciencewolberg/cs212/pdf/CSc212-07-LinkedLists.pdf · CSC212 Data Structure Lecture 7 Linked Lists Instructor: George Wolberg Department of Computer](https://reader031.fdocuments.net/reader031/viewer/2022030410/5a9562747f8b9a8b5d8cfa50/html5/thumbnails/36.jpg)
Inserting a Node at the HeadInserting a Node at the Head
insert_ptr = new node;
10
1
7
nullhead_ptr
entry13
insert_ptr
void list_head_insert(node*& head_ptr, const node::value_type& entry);
![Page 37: CSC212 Data Structure - Computer Sciencewolberg/cs212/pdf/CSc212-07-LinkedLists.pdf · CSC212 Data Structure Lecture 7 Linked Lists Instructor: George Wolberg Department of Computer](https://reader031.fdocuments.net/reader031/viewer/2022030410/5a9562747f8b9a8b5d8cfa50/html5/thumbnails/37.jpg)
Inserting a Node at the HeadInserting a Node at the Head
insert_ptr = new node; Place the data in the new
node's data field.
10
1
7
nullhead_ptr
entry13
insert_ptr13
void list_head_insert(node*& head_ptr, const node::value_type& entry);
![Page 38: CSC212 Data Structure - Computer Sciencewolberg/cs212/pdf/CSc212-07-LinkedLists.pdf · CSC212 Data Structure Lecture 7 Linked Lists Instructor: George Wolberg Department of Computer](https://reader031.fdocuments.net/reader031/viewer/2022030410/5a9562747f8b9a8b5d8cfa50/html5/thumbnails/38.jpg)
Inserting a Node at the HeadInserting a Node at the Head
insert_ptr = new node; insert_ptr->data = entry;
10
1
7
nullhead_ptr
entry13
insert_ptr13?
What expression appears on the left side of the assignment statement ?
void list_head_insert(node*& head_ptr, const node::value_type& entry);
![Page 39: CSC212 Data Structure - Computer Sciencewolberg/cs212/pdf/CSc212-07-LinkedLists.pdf · CSC212 Data Structure Lecture 7 Linked Lists Instructor: George Wolberg Department of Computer](https://reader031.fdocuments.net/reader031/viewer/2022030410/5a9562747f8b9a8b5d8cfa50/html5/thumbnails/39.jpg)
Inserting a Node at the HeadInserting a Node at the Head
insert_ptr = new node; insert_ptr->data = entry;
10
1
7
nullhead_ptr
entry13
insert_ptr13
But data is a private variable, so cannot be accessed by a non-member function
void list_head_insert(node*& head_ptr, const node::value_type& entry);
![Page 40: CSC212 Data Structure - Computer Sciencewolberg/cs212/pdf/CSc212-07-LinkedLists.pdf · CSC212 Data Structure Lecture 7 Linked Lists Instructor: George Wolberg Department of Computer](https://reader031.fdocuments.net/reader031/viewer/2022030410/5a9562747f8b9a8b5d8cfa50/html5/thumbnails/40.jpg)
Inserting a Node at the HeadInserting a Node at the Head
insert_ptr = new node; insert_ptr->data = entry;
10
1
7
nullhead_ptr
entry13
insert_ptr13
But data is a private variable, so cannot be accessed by a non-member function
void list_head_insert(node*& head_ptr, const node::value_type& entry);
X
![Page 41: CSC212 Data Structure - Computer Sciencewolberg/cs212/pdf/CSc212-07-LinkedLists.pdf · CSC212 Data Structure Lecture 7 Linked Lists Instructor: George Wolberg Department of Computer](https://reader031.fdocuments.net/reader031/viewer/2022030410/5a9562747f8b9a8b5d8cfa50/html5/thumbnails/41.jpg)
Inserting a Node at the HeadInserting a Node at the Head
insert_ptr = new node; insert_ptr->set_data(entry);
10
1
7
nullhead_ptr
entry13
insert_ptr13
Instead, Set_data function is used since data_field is a private variable of the node class
void list_head_insert(node*& head_ptr, const node::value_type& entry);
![Page 42: CSC212 Data Structure - Computer Sciencewolberg/cs212/pdf/CSc212-07-LinkedLists.pdf · CSC212 Data Structure Lecture 7 Linked Lists Instructor: George Wolberg Department of Computer](https://reader031.fdocuments.net/reader031/viewer/2022030410/5a9562747f8b9a8b5d8cfa50/html5/thumbnails/42.jpg)
Inserting a Node at the HeadInserting a Node at the Head
10
1
7
nullhead_ptr
entry13
insert_ptr13
insert_ptr = new node; insert_ptr->set_data(entry); Connect the new node to the
front of the list.
void list_head_insert(node*& head_ptr, const node::value_type& entry);
![Page 43: CSC212 Data Structure - Computer Sciencewolberg/cs212/pdf/CSc212-07-LinkedLists.pdf · CSC212 Data Structure Lecture 7 Linked Lists Instructor: George Wolberg Department of Computer](https://reader031.fdocuments.net/reader031/viewer/2022030410/5a9562747f8b9a8b5d8cfa50/html5/thumbnails/43.jpg)
Inserting a Node at the HeadInserting a Node at the Head
10
1
7
nullhead_ptr
entry13
insert_ptr13
What will be the parameter ?
insert_ptr = new node; insert_ptr->set_data(entry); insert_ptr->set_link(head_ptr);?
void list_head_insert(node*& head_ptr, const node::value_type& entry);
![Page 44: CSC212 Data Structure - Computer Sciencewolberg/cs212/pdf/CSc212-07-LinkedLists.pdf · CSC212 Data Structure Lecture 7 Linked Lists Instructor: George Wolberg Department of Computer](https://reader031.fdocuments.net/reader031/viewer/2022030410/5a9562747f8b9a8b5d8cfa50/html5/thumbnails/44.jpg)
Inserting a Node at the HeadInserting a Node at the Head
10
1
7
nullhead_ptr
entry13
insert_ptr13
The new node is linked to the node that head_ptr is pointing to.
insert_ptr = new node; insert_ptr->set_data(entry); insert_ptr->set_link(head_ptr);
void list_head_insert(node*& head_ptr, const node::value_type& entry);
![Page 45: CSC212 Data Structure - Computer Sciencewolberg/cs212/pdf/CSc212-07-LinkedLists.pdf · CSC212 Data Structure Lecture 7 Linked Lists Instructor: George Wolberg Department of Computer](https://reader031.fdocuments.net/reader031/viewer/2022030410/5a9562747f8b9a8b5d8cfa50/html5/thumbnails/45.jpg)
Inserting a Node at the HeadInserting a Node at the Head
10
1
7
nullhead_ptr
entry13
insert_ptr13
insert_ptr = new node; insert_ptr->set_data(entry); insert_ptr->set_link(head_ptr);Make the head_ptr point to the new
head of the linked list.
void list_head_insert(node*& head_ptr, const node::value_type& entry);
![Page 46: CSC212 Data Structure - Computer Sciencewolberg/cs212/pdf/CSc212-07-LinkedLists.pdf · CSC212 Data Structure Lecture 7 Linked Lists Instructor: George Wolberg Department of Computer](https://reader031.fdocuments.net/reader031/viewer/2022030410/5a9562747f8b9a8b5d8cfa50/html5/thumbnails/46.jpg)
Inserting a Node at the HeadInserting a Node at the Head
10
1
7
nullhead_ptr
entry13
insert_ptr13
insert_ptr = new node; insert_ptr->set_data(entry); insert_ptr->set_link(head_ptr);head_ptr = insert_ptr;
void list_head_insert(node*& head_ptr, const node::value_type& entry);
![Page 47: CSC212 Data Structure - Computer Sciencewolberg/cs212/pdf/CSc212-07-LinkedLists.pdf · CSC212 Data Structure Lecture 7 Linked Lists Instructor: George Wolberg Department of Computer](https://reader031.fdocuments.net/reader031/viewer/2022030410/5a9562747f8b9a8b5d8cfa50/html5/thumbnails/47.jpg)
Inserting a Node at the HeadInserting a Node at the Head
insert_ptr = new node; insert_ptr->set_data(entry); insert_ptr->set_link(head_ptr); head_ptr = insert_ptr;
10
1
7
nullhead_ptr
13
When the function returns, thelinked list has a new node at thehead, containing 13.
void list_head_insert(node*& head_ptr, const node::value_type& entry);
![Page 48: CSC212 Data Structure - Computer Sciencewolberg/cs212/pdf/CSc212-07-LinkedLists.pdf · CSC212 Data Structure Lecture 7 Linked Lists Instructor: George Wolberg Department of Computer](https://reader031.fdocuments.net/reader031/viewer/2022030410/5a9562747f8b9a8b5d8cfa50/html5/thumbnails/48.jpg)
void list_head_insert(node*& head_ptr, const node::value_type& entry){
node *insert_ptr;
insert_ptr = new node;insert_ptr->set_data(entry);insert_ptr->set_link(head_ptr);head_ptr = insert_ptr;
}
Inserting a Node at the HeadInserting a Node at the Head
Linked List: O(1)
- cmp: Array: O(n)
What is the Big-O of
the head_insert function?
![Page 49: CSC212 Data Structure - Computer Sciencewolberg/cs212/pdf/CSc212-07-LinkedLists.pdf · CSC212 Data Structure Lecture 7 Linked Lists Instructor: George Wolberg Department of Computer](https://reader031.fdocuments.net/reader031/viewer/2022030410/5a9562747f8b9a8b5d8cfa50/html5/thumbnails/49.jpg)
void list_head_insert(node*& head_ptr, const node::value_type& entry){
node *insert_ptr;
insert_ptr = new node;insert_ptr->set_data(entry);insert_ptr->set_link(head_ptr);head_ptr = insert_ptr;
}
Inserting a Node at the HeadInserting a Node at the Head
Does the function workcorrectly for the empty
list ?
![Page 50: CSC212 Data Structure - Computer Sciencewolberg/cs212/pdf/CSc212-07-LinkedLists.pdf · CSC212 Data Structure Lecture 7 Linked Lists Instructor: George Wolberg Department of Computer](https://reader031.fdocuments.net/reader031/viewer/2022030410/5a9562747f8b9a8b5d8cfa50/html5/thumbnails/50.jpg)
void list_head_insert(node*& head_ptr, const node::value_type& entry){
node *insert_ptr;
insert_ptr = new node;insert_ptr->set_data(entry);insert_ptr->set_link(head_ptr);head_ptr = insert_ptr;
}
Inserting a Node at the HeadInserting a Node at the Head
head_ptrentry
13 null
Does the function workcorrectly for the empty
list ?
![Page 51: CSC212 Data Structure - Computer Sciencewolberg/cs212/pdf/CSc212-07-LinkedLists.pdf · CSC212 Data Structure Lecture 7 Linked Lists Instructor: George Wolberg Department of Computer](https://reader031.fdocuments.net/reader031/viewer/2022030410/5a9562747f8b9a8b5d8cfa50/html5/thumbnails/51.jpg)
void list_head_insert(node*& head_ptr, const node::value_type& entry){
node *insert_ptr;
insert_ptr = new node;insert_ptr->set_data(entry);insert_ptr->set_link(head_ptr);head_ptr = insert_ptr;
}
Inserting a Node at the FrontInserting a Node at the Front
head_ptrentry
13 nullinsert_ptr
13
![Page 52: CSC212 Data Structure - Computer Sciencewolberg/cs212/pdf/CSc212-07-LinkedLists.pdf · CSC212 Data Structure Lecture 7 Linked Lists Instructor: George Wolberg Department of Computer](https://reader031.fdocuments.net/reader031/viewer/2022030410/5a9562747f8b9a8b5d8cfa50/html5/thumbnails/52.jpg)
void list_head_insert(node*& head_ptr, const node::value_type& entry){
node *insert_ptr;
insert_ptr = new node;insert_ptr->set_data(entry);insert_ptr->set_link(head_ptr);head_ptr = insert_ptr;
}
Inserting a Node at the HeadInserting a Node at the Head
head_ptrentry
13 nullinsert_ptr
13
null
![Page 53: CSC212 Data Structure - Computer Sciencewolberg/cs212/pdf/CSc212-07-LinkedLists.pdf · CSC212 Data Structure Lecture 7 Linked Lists Instructor: George Wolberg Department of Computer](https://reader031.fdocuments.net/reader031/viewer/2022030410/5a9562747f8b9a8b5d8cfa50/html5/thumbnails/53.jpg)
void list_head_insert(node*& head_ptr, const node::value_type& entry){
node *insert_ptr;
insert_ptr = new node;insert_ptr->set_data(entry);insert_ptr->set_link(head_ptr);head_ptr = insert_ptr;
}
Inserting a Node at the HeadInserting a Node at the Head
head_ptrentry
13insert_ptr
13
null
![Page 54: CSC212 Data Structure - Computer Sciencewolberg/cs212/pdf/CSc212-07-LinkedLists.pdf · CSC212 Data Structure Lecture 7 Linked Lists Instructor: George Wolberg Department of Computer](https://reader031.fdocuments.net/reader031/viewer/2022030410/5a9562747f8b9a8b5d8cfa50/html5/thumbnails/54.jpg)
void list_head_insert(node*& head_ptr, const node::value_type& entry){
node *insert_ptr;
insert_ptr = new node;insert_ptr->set_data(entry);insert_ptr->set_link(head_ptr);head_ptr = insert_ptr;
}
Inserting a Node at the HeadInserting a Node at the Head
head_ptr
13
null
When the functionreturns, the linked list
has one node,containing 13.
![Page 55: CSC212 Data Structure - Computer Sciencewolberg/cs212/pdf/CSc212-07-LinkedLists.pdf · CSC212 Data Structure Lecture 7 Linked Lists Instructor: George Wolberg Department of Computer](https://reader031.fdocuments.net/reader031/viewer/2022030410/5a9562747f8b9a8b5d8cfa50/html5/thumbnails/55.jpg)
Caution!Caution!
Always make sure that your linked list functions work correctly with an empty list.
EMPTY LIST
![Page 56: CSC212 Data Structure - Computer Sciencewolberg/cs212/pdf/CSc212-07-LinkedLists.pdf · CSC212 Data Structure Lecture 7 Linked Lists Instructor: George Wolberg Department of Computer](https://reader031.fdocuments.net/reader031/viewer/2022030410/5a9562747f8b9a8b5d8cfa50/html5/thumbnails/56.jpg)
void list_head_insert(node*& head_ptr, const node::value_type& entry){
node *insert_ptr;
insert_ptr = new node;insert_ptr->set_data(entry);insert_ptr->set_link(head_ptr);head_ptr = insert_ptr;
}
Inserting a Node at the HeadInserting a Node at the Head
Q: Can you give an implementation with ONLY a single statement?
![Page 57: CSC212 Data Structure - Computer Sciencewolberg/cs212/pdf/CSc212-07-LinkedLists.pdf · CSC212 Data Structure Lecture 7 Linked Lists Instructor: George Wolberg Department of Computer](https://reader031.fdocuments.net/reader031/viewer/2022030410/5a9562747f8b9a8b5d8cfa50/html5/thumbnails/57.jpg)
void list_head_insert(node*& head_ptr, const node::value_type& entry){
node *insert_ptr;
insert_ptr = new node(entry, head_ptr);
head_ptr = insert_ptr;}
Inserting a Node at the HeadInserting a Node at the Head
YES, we can use the constructor with parameters!
![Page 58: CSC212 Data Structure - Computer Sciencewolberg/cs212/pdf/CSc212-07-LinkedLists.pdf · CSC212 Data Structure Lecture 7 Linked Lists Instructor: George Wolberg Department of Computer](https://reader031.fdocuments.net/reader031/viewer/2022030410/5a9562747f8b9a8b5d8cfa50/html5/thumbnails/58.jpg)
void list_head_insert(node*& head_ptr, const node::value_type& entry){
head_ptr = new node(entry, head_ptr);
}
Inserting a Node at the HeadInserting a Node at the Head
and assign the return pointer of new directly to the head pointer !
![Page 59: CSC212 Data Structure - Computer Sciencewolberg/cs212/pdf/CSc212-07-LinkedLists.pdf · CSC212 Data Structure Lecture 7 Linked Lists Instructor: George Wolberg Department of Computer](https://reader031.fdocuments.net/reader031/viewer/2022030410/5a9562747f8b9a8b5d8cfa50/html5/thumbnails/59.jpg)
Each node also contains a link field which is a pointer to another node.
data15
data7
Declarations for Linked ListsDeclarations for Linked Lists
data10
link
linknull
link
class node{public:
typedef int value_type;...
private:value_type data;node *link;
};
![Page 60: CSC212 Data Structure - Computer Sciencewolberg/cs212/pdf/CSc212-07-LinkedLists.pdf · CSC212 Data Structure Lecture 7 Linked Lists Instructor: George Wolberg Department of Computer](https://reader031.fdocuments.net/reader031/viewer/2022030410/5a9562747f8b9a8b5d8cfa50/html5/thumbnails/60.jpg)
The Complete node Class DefinitionThe Complete node Class Definition
The node class is fundamental to linked listsThe private member variablesdata_field link_field
The member functions include:A constructorSet data and set linkRetrieve data and retrieve link
class node{public:
// TYPEDEFtypedef double value_type;
// CONSTRUCTORnode(
const value_type& init_data = value_type( ),node* init_link = NULL
){ data = init_data; link = init_link; }
// Member functions to set the data and link fields:void set_data(const value_type& new_data) { data = new_data; }void set_link(node* new_link) { link = new_link; }
// Constant member function to retrieve the current data:value_type data( ) const { return data; }
// Two slightly different member functions to retrieve// the current link:const node* link( ) const { return link; }node* link( ) { return link;}
private:value_type data;node* link;
};
default argument given by the value_type default constructor
Why TWO? p. 213-4
![Page 61: CSC212 Data Structure - Computer Sciencewolberg/cs212/pdf/CSc212-07-LinkedLists.pdf · CSC212 Data Structure Lecture 7 Linked Lists Instructor: George Wolberg Department of Computer](https://reader031.fdocuments.net/reader031/viewer/2022030410/5a9562747f8b9a8b5d8cfa50/html5/thumbnails/61.jpg)
size_t list_length(const node* head_ptr){
const node *cursor;size_t count = 0;for (cursor = head_ptr; cursor != NULL; cursor = cursor->link())
count++;return count; // step 3
}
Big-O of list_lengthBig-O of list_length
Big-O: O (n) if length is n 10
15
7
nullhead_ptrcount
3
cursor
![Page 62: CSC212 Data Structure - Computer Sciencewolberg/cs212/pdf/CSc212-07-LinkedLists.pdf · CSC212 Data Structure Lecture 7 Linked Lists Instructor: George Wolberg Department of Computer](https://reader031.fdocuments.net/reader031/viewer/2022030410/5a9562747f8b9a8b5d8cfa50/html5/thumbnails/62.jpg)
The Workings of four functionsThe Workings of four functions
This lecture will show four functions: Compute the length of a linked list (code) Insert a new node at the head (code) Insert a node at any location (pseudo-code) Delete a node from the head (pseudo-code)
Read Section 5.2 for other functions in the Toolbox will be used in container classes bag and sequence
![Page 63: CSC212 Data Structure - Computer Sciencewolberg/cs212/pdf/CSc212-07-LinkedLists.pdf · CSC212 Data Structure Lecture 7 Linked Lists Instructor: George Wolberg Department of Computer](https://reader031.fdocuments.net/reader031/viewer/2022030410/5a9562747f8b9a8b5d8cfa50/html5/thumbnails/63.jpg)
Pseudocode for Inserting NodesPseudocode for Inserting Nodes
Nodes are often inserted at places other than the front of a linked list.
There is a general pseudocode that you can follow for any insertion function. . .
![Page 64: CSC212 Data Structure - Computer Sciencewolberg/cs212/pdf/CSc212-07-LinkedLists.pdf · CSC212 Data Structure Lecture 7 Linked Lists Instructor: George Wolberg Department of Computer](https://reader031.fdocuments.net/reader031/viewer/2022030410/5a9562747f8b9a8b5d8cfa50/html5/thumbnails/64.jpg)
Pseudocode for Inserting NodesPseudocode for Inserting Nodes
Determine whether the new node will be the first node in the linked list. If so, then there is only one step:
list_head_insert(head_ptr, entry);
![Page 65: CSC212 Data Structure - Computer Sciencewolberg/cs212/pdf/CSc212-07-LinkedLists.pdf · CSC212 Data Structure Lecture 7 Linked Lists Instructor: George Wolberg Department of Computer](https://reader031.fdocuments.net/reader031/viewer/2022030410/5a9562747f8b9a8b5d8cfa50/html5/thumbnails/65.jpg)
Pseudocode for Inserting NodesPseudocode for Inserting Nodes
Determine whether the new node will be the first node in the linked list. If so, then there is only one step:
list_head_insert(head_ptr, entry);
![Page 66: CSC212 Data Structure - Computer Sciencewolberg/cs212/pdf/CSc212-07-LinkedLists.pdf · CSC212 Data Structure Lecture 7 Linked Lists Instructor: George Wolberg Department of Computer](https://reader031.fdocuments.net/reader031/viewer/2022030410/5a9562747f8b9a8b5d8cfa50/html5/thumbnails/66.jpg)
Pseudocode for Inserting NodesPseudocode for Inserting Nodes
Determine whether the new node will be the first node in the linked list. If so, then there is only one step:
list_head_insert(head_ptr, entry);
A pointerto the
head ofthe list
![Page 67: CSC212 Data Structure - Computer Sciencewolberg/cs212/pdf/CSc212-07-LinkedLists.pdf · CSC212 Data Structure Lecture 7 Linked Lists Instructor: George Wolberg Department of Computer](https://reader031.fdocuments.net/reader031/viewer/2022030410/5a9562747f8b9a8b5d8cfa50/html5/thumbnails/67.jpg)
Pseudocode for Inserting NodesPseudocode for Inserting Nodes
Determine whether the new node will be the first node in the linked list. If so, then there is only one step:
list_head_insert(head_ptr, entry);
![Page 68: CSC212 Data Structure - Computer Sciencewolberg/cs212/pdf/CSc212-07-LinkedLists.pdf · CSC212 Data Structure Lecture 7 Linked Lists Instructor: George Wolberg Department of Computer](https://reader031.fdocuments.net/reader031/viewer/2022030410/5a9562747f8b9a8b5d8cfa50/html5/thumbnails/68.jpg)
Pseudocode for Inserting NodesPseudocode for Inserting Nodes
Otherwise (if the new node will not be first): Start by setting a pointer named previous_ptr to point to the
node which is just before the new node's position.
![Page 69: CSC212 Data Structure - Computer Sciencewolberg/cs212/pdf/CSc212-07-LinkedLists.pdf · CSC212 Data Structure Lecture 7 Linked Lists Instructor: George Wolberg Department of Computer](https://reader031.fdocuments.net/reader031/viewer/2022030410/5a9562747f8b9a8b5d8cfa50/html5/thumbnails/69.jpg)
Pseudocode for Inserting NodesPseudocode for Inserting Nodes
15
10
7
nullhead_ptr
Otherwise (if the new node will not be first): Start by setting a pointer named previous_ptr to point to the
node which is just before the new node's position.
In this example, thenew node will bethe second node
previous_ptr
![Page 70: CSC212 Data Structure - Computer Sciencewolberg/cs212/pdf/CSc212-07-LinkedLists.pdf · CSC212 Data Structure Lecture 7 Linked Lists Instructor: George Wolberg Department of Computer](https://reader031.fdocuments.net/reader031/viewer/2022030410/5a9562747f8b9a8b5d8cfa50/html5/thumbnails/70.jpg)
Pseudocode for Inserting NodesPseudocode for Inserting Nodes
15
10
7
nullhead_ptr
Otherwise (if the new node will not be first): Start by setting a pointer named previous_ptr to point to the
node which is just before the new node's position
What is the name of this pointer ?
Look at the pointerwhich is in the node
*previous_ptrprevious_ptr
![Page 71: CSC212 Data Structure - Computer Sciencewolberg/cs212/pdf/CSc212-07-LinkedLists.pdf · CSC212 Data Structure Lecture 7 Linked Lists Instructor: George Wolberg Department of Computer](https://reader031.fdocuments.net/reader031/viewer/2022030410/5a9562747f8b9a8b5d8cfa50/html5/thumbnails/71.jpg)
Pseudocode for Inserting NodesPseudocode for Inserting Nodes
15
10
7
nullhead_ptr
Otherwise (if the new node will not be first): Start by setting a pointer named previous_ptr to point to the
node which is just before the new node's position
This pointer is calledprevious_ptr->link
Always remember how can you access link
previous_ptr
![Page 72: CSC212 Data Structure - Computer Sciencewolberg/cs212/pdf/CSc212-07-LinkedLists.pdf · CSC212 Data Structure Lecture 7 Linked Lists Instructor: George Wolberg Department of Computer](https://reader031.fdocuments.net/reader031/viewer/2022030410/5a9562747f8b9a8b5d8cfa50/html5/thumbnails/72.jpg)
Pseudocode for Inserting NodesPseudocode for Inserting Nodes
15
10
7
nullhead_ptr
Otherwise (if the new node will not be first): Start by setting a pointer named previous_ptr to point to the
node which is just before the new node's position
previous_ptr->linkpoints to the headof a smaller linkedlist, with 10 and 7
previous_ptr
![Page 73: CSC212 Data Structure - Computer Sciencewolberg/cs212/pdf/CSc212-07-LinkedLists.pdf · CSC212 Data Structure Lecture 7 Linked Lists Instructor: George Wolberg Department of Computer](https://reader031.fdocuments.net/reader031/viewer/2022030410/5a9562747f8b9a8b5d8cfa50/html5/thumbnails/73.jpg)
Pseudocode for Inserting NodesPseudocode for Inserting Nodes
15
10
7
nullhead_ptr
Otherwise (if the new node will not be first): Start by setting a pointer named previous_ptr to point to the
node which is just before the new node's position.
The new node mustbe inserted at thehead of this small
linked list.
13
Write one C++ statement which will do the insertion.
previous_ptr
![Page 74: CSC212 Data Structure - Computer Sciencewolberg/cs212/pdf/CSc212-07-LinkedLists.pdf · CSC212 Data Structure Lecture 7 Linked Lists Instructor: George Wolberg Department of Computer](https://reader031.fdocuments.net/reader031/viewer/2022030410/5a9562747f8b9a8b5d8cfa50/html5/thumbnails/74.jpg)
Pseudocode for Inserting NodesPseudocode for Inserting Nodes
15
10
7
nullhead_ptr
Otherwise (if the new node will not be first): Start by setting a pointer named previous_ptr to point to the
node which is just before the new node's position. 13
Write one C++ statement which will do the insertion.
previous_ptrlist_head_insert(previous_ptr->link, entry);
X
![Page 75: CSC212 Data Structure - Computer Sciencewolberg/cs212/pdf/CSc212-07-LinkedLists.pdf · CSC212 Data Structure Lecture 7 Linked Lists Instructor: George Wolberg Department of Computer](https://reader031.fdocuments.net/reader031/viewer/2022030410/5a9562747f8b9a8b5d8cfa50/html5/thumbnails/75.jpg)
Pseudocode for Inserting NodesPseudocode for Inserting Nodes
15
10
7
nullhead_ptr
Otherwise (if the new node will not be first): Start by setting a pointer named previous_ptr to point to the
node which is just before the new node's position.13
More precisely, you need to use member function link() , and have three lines of code
previous_ptr
node *sl_head_ptr;sl_head_ptr = previous_ptr->link();list_head_insert(sl_head_ptr, entry);previous_ptr->set_link(sl_head_ptr);
sl_head_ptr
![Page 76: CSC212 Data Structure - Computer Sciencewolberg/cs212/pdf/CSc212-07-LinkedLists.pdf · CSC212 Data Structure Lecture 7 Linked Lists Instructor: George Wolberg Department of Computer](https://reader031.fdocuments.net/reader031/viewer/2022030410/5a9562747f8b9a8b5d8cfa50/html5/thumbnails/76.jpg)
Pseudocode for Inserting NodesPseudocode for Inserting Nodes
15
10
7
nullhead_ptr
Otherwise (if the new node will not be first): Start by setting a pointer named previous_ptr to point to the
node which is just before the new node's position. 13
More precisely, you need to use member function link() , and have three lines of code
previous_ptr
node *sl_head_ptr;sl_head_ptr = previous_ptr->link();list_head_insert(sl_head_ptr, entry);previous_ptr->set_link(sl_head_ptr);
sl_head_ptr
![Page 77: CSC212 Data Structure - Computer Sciencewolberg/cs212/pdf/CSc212-07-LinkedLists.pdf · CSC212 Data Structure Lecture 7 Linked Lists Instructor: George Wolberg Department of Computer](https://reader031.fdocuments.net/reader031/viewer/2022030410/5a9562747f8b9a8b5d8cfa50/html5/thumbnails/77.jpg)
Pseudocode for Inserting NodesPseudocode for Inserting Nodes
15
10
7
nullhead_ptr
Otherwise (if the new node will not be first): Start by setting a pointer named previous_ptr to point to the
node which is just before the new node's position. 13
More precisely, you need to use member function link() , and have three lines of code
previous_ptr
node *sl_head_ptr;sl_head_ptr = previous_ptr->link();list_head_insert(sl_head_ptr, entry);previous_ptr->set_link(sl_head_ptr);
sl_head_ptr
![Page 78: CSC212 Data Structure - Computer Sciencewolberg/cs212/pdf/CSc212-07-LinkedLists.pdf · CSC212 Data Structure Lecture 7 Linked Lists Instructor: George Wolberg Department of Computer](https://reader031.fdocuments.net/reader031/viewer/2022030410/5a9562747f8b9a8b5d8cfa50/html5/thumbnails/78.jpg)
Pseudocode for Inserting NodesPseudocode for Inserting Nodes
Determine whether the new node will be the first node in the linked list. If so, then there is only one step:
list_head_insert(head_ptr, entry);
Otherwise (if the new node will not be first): Set a pointer named previous_ptr to point to the node
which is just before the new node's position. Do the following :
node *sl_head_ptr;sl_head_ptr = previous_ptr->link(); list_head_insert(sl_head_ptr, entry);previous_ptr->set_link(sl_head_ptr);
![Page 79: CSC212 Data Structure - Computer Sciencewolberg/cs212/pdf/CSc212-07-LinkedLists.pdf · CSC212 Data Structure Lecture 7 Linked Lists Instructor: George Wolberg Department of Computer](https://reader031.fdocuments.net/reader031/viewer/2022030410/5a9562747f8b9a8b5d8cfa50/html5/thumbnails/79.jpg)
Pseudocode for Inserting NodesPseudocode for Inserting Nodes
The process of adding a new node in the middle of a list (only the step after previous_ptr has been set) can also be incorporated as a separate function. This function is called list_insert in the linked list toolkit of Section 5.2.
Challenge yourself: The textbook actually gives you a different implementation (p 235, 4
lines of code) Can you implement list_insert with just one line of code?
Don’t use list_head_insert See Self-Test Ex 16
![Page 80: CSC212 Data Structure - Computer Sciencewolberg/cs212/pdf/CSc212-07-LinkedLists.pdf · CSC212 Data Structure Lecture 7 Linked Lists Instructor: George Wolberg Department of Computer](https://reader031.fdocuments.net/reader031/viewer/2022030410/5a9562747f8b9a8b5d8cfa50/html5/thumbnails/80.jpg)
The Workings of four functionsThe Workings of four functions
This lecture will show four functions: Compute the length of a linked list (code) Insert a new node at the head (code) Insert a node at any location (pseudo-code) Delete a node from the head (pseudo-code)
Read Section 5.2 for other functions in the Toolbox will be used in container classes bag and sequence
![Page 81: CSC212 Data Structure - Computer Sciencewolberg/cs212/pdf/CSc212-07-LinkedLists.pdf · CSC212 Data Structure Lecture 7 Linked Lists Instructor: George Wolberg Department of Computer](https://reader031.fdocuments.net/reader031/viewer/2022030410/5a9562747f8b9a8b5d8cfa50/html5/thumbnails/81.jpg)
Pseudocode for Removing NodesPseudocode for Removing Nodes
Nodes often need to be removed from a linked list. As with insertion, there is a technique for removing
a node from the front of a list, and a technique for removing a node from elsewhere.
We’ll look at the pseudocode for removing a node from the head of a linked list.
![Page 82: CSC212 Data Structure - Computer Sciencewolberg/cs212/pdf/CSc212-07-LinkedLists.pdf · CSC212 Data Structure Lecture 7 Linked Lists Instructor: George Wolberg Department of Computer](https://reader031.fdocuments.net/reader031/viewer/2022030410/5a9562747f8b9a8b5d8cfa50/html5/thumbnails/82.jpg)
Removing the Head NodeRemoving the Head Node
10 15 7
nullhead_ptr
13
Start by setting up a temporary pointer named remove_ptrto the head node.
remove_ptr
![Page 83: CSC212 Data Structure - Computer Sciencewolberg/cs212/pdf/CSc212-07-LinkedLists.pdf · CSC212 Data Structure Lecture 7 Linked Lists Instructor: George Wolberg Department of Computer](https://reader031.fdocuments.net/reader031/viewer/2022030410/5a9562747f8b9a8b5d8cfa50/html5/thumbnails/83.jpg)
Removing the Head NodeRemoving the Head Node
10 15 7
nullhead_ptr
13
Set up remove_ptr. head_ptr = remove_ptr->link();
remove_ptr
Draw the change that this statement will make to the linked list.
![Page 84: CSC212 Data Structure - Computer Sciencewolberg/cs212/pdf/CSc212-07-LinkedLists.pdf · CSC212 Data Structure Lecture 7 Linked Lists Instructor: George Wolberg Department of Computer](https://reader031.fdocuments.net/reader031/viewer/2022030410/5a9562747f8b9a8b5d8cfa50/html5/thumbnails/84.jpg)
Removing the Head NodeRemoving the Head Node
10 15 7
nullhead_ptr
13
Set up remove_ptr. head_ptr = remove_ptr->link();
remove_ptr
![Page 85: CSC212 Data Structure - Computer Sciencewolberg/cs212/pdf/CSc212-07-LinkedLists.pdf · CSC212 Data Structure Lecture 7 Linked Lists Instructor: George Wolberg Department of Computer](https://reader031.fdocuments.net/reader031/viewer/2022030410/5a9562747f8b9a8b5d8cfa50/html5/thumbnails/85.jpg)
Removing the Head NodeRemoving the Head Node
Set up remove_ptr. head_ptr = remove_ptr->link; delete remove_ptr; // Return the node's memory to heap.
10 15 7
nullhead_ptr
13
remove_ptr
![Page 86: CSC212 Data Structure - Computer Sciencewolberg/cs212/pdf/CSc212-07-LinkedLists.pdf · CSC212 Data Structure Lecture 7 Linked Lists Instructor: George Wolberg Department of Computer](https://reader031.fdocuments.net/reader031/viewer/2022030410/5a9562747f8b9a8b5d8cfa50/html5/thumbnails/86.jpg)
Removing the Head NodeRemoving the Head Node
Here’s what the linked list looks like after the removal finishes.
10 15 7
nullhead_ptr
![Page 87: CSC212 Data Structure - Computer Sciencewolberg/cs212/pdf/CSc212-07-LinkedLists.pdf · CSC212 Data Structure Lecture 7 Linked Lists Instructor: George Wolberg Department of Computer](https://reader031.fdocuments.net/reader031/viewer/2022030410/5a9562747f8b9a8b5d8cfa50/html5/thumbnails/87.jpg)
It is easy to insert a node at the front of a list. The linked list toolkit also provides a function for
inserting a new node elsewhere It is easy to remove a node at the front of a list. The linked list toolkit also provides a function for
removing a node elsewhere--you should read about this function and the other functions of the toolkit.
SummarySummary
![Page 88: CSC212 Data Structure - Computer Sciencewolberg/cs212/pdf/CSc212-07-LinkedLists.pdf · CSC212 Data Structure Lecture 7 Linked Lists Instructor: George Wolberg Department of Computer](https://reader031.fdocuments.net/reader031/viewer/2022030410/5a9562747f8b9a8b5d8cfa50/html5/thumbnails/88.jpg)
Key points you need to knowKey points you need to know
Linked List Toolkit uses the node class which has set and retrieve functions
The functions in the Toolkit are not member functions of the node class length, insert(2), remove(2), search, locate, copy,... compare their Big-Os with similar functions for an
array
They can be used in various container classes, such as bag, sequence, etc.
Toolkit Code
![Page 89: CSC212 Data Structure - Computer Sciencewolberg/cs212/pdf/CSc212-07-LinkedLists.pdf · CSC212 Data Structure Lecture 7 Linked Lists Instructor: George Wolberg Department of Computer](https://reader031.fdocuments.net/reader031/viewer/2022030410/5a9562747f8b9a8b5d8cfa50/html5/thumbnails/89.jpg)
Homework...Homework...
Self-Test Exercises (node) 1-12
Read after class Linked List ToolKit (Section 5.2) Do Self-Test Ex 13 -25
Read before the next lecture Section 5.3- 5.4
Programming Assignment 4 Detailed guidelines online!
![Page 90: CSC212 Data Structure - Computer Sciencewolberg/cs212/pdf/CSc212-07-LinkedLists.pdf · CSC212 Data Structure Lecture 7 Linked Lists Instructor: George Wolberg Department of Computer](https://reader031.fdocuments.net/reader031/viewer/2022030410/5a9562747f8b9a8b5d8cfa50/html5/thumbnails/90.jpg)
THE ENDTHE END
Presentation copyright 1997, Addison Wesley Longman,For use with Data Structures and Other Objects Using C++by Michael Main and Walter Savitch.
Some artwork in the presentation is used with permission from Presentation Task Force(copyright New Vision Technologies Inc) and Corel Gallery Clipart Catalog (copyrightCorel Corporation, 3G Graphics Inc, Archive Arts, Cartesia Software, Image ClubGraphics Inc, One Mile Up Inc, TechPool Studios, Totem Graphics Inc).
Students and instructors who use Data Structures and Other Objects Using C++ are welcometo use this presentation however they see fit, so long as this copyright notice remainsintact.