Upload
salvador-henson
View
30
Download
0
Embed Size (px)
DESCRIPTION
CSE 2341 Object Oriented Programming with C++ Note Set #18. Overview. Dynamic Data structures with linked lists. Linked List. Series of connected nodes Can grow/shrink at runtime dynamic allocation of nodes allows for this. Data. Head. Null. Linked List Node. Data. struct ListNode { - PowerPoint PPT Presentation
Citation preview
1
CSE 2341Object Oriented Programming
with C++
Note Set #18
2
Overview
• Dynamic Data structures with linked lists
3
Linked List
• Series of connected nodes• Can grow/shrink at runtime
– dynamic allocation of nodes allows for this
Data
Null
Head
4
Linked List Node
Data
struct ListNode{
double data;ListNode* next;
};
ListNode is a self referential data structure.
5
Basic Linked List Operations
• Basic Operations of LL– appending a node– traversing the list– inserting a node– deleting a node– destroying the list
6
Class NumberListclass NumberList{private: struct ListNode { double value; ListNode* next; }; ListNode* head;
private: NumberList() {head = NULL;} ~NumberList(); void appendNode(double); void insertNode(double); void deleteNode(double); void displayList();};
7
AppendNodevoid NumberList::appendNode(double num){ ListNode* newNode, *nodePtr; newNode = new ListNode; newNode -> value = num; newNode -> next = NULL;
if(!head) //If there aren’t any nodes in listhead = newNode;
else {
nodePtr = head;while(nodePtr->next)
nodePtr = nodePtr->next;nodePtr -> next = newNode;
}}
8
Append
5
3 4 Null
Null
Head
newNode
NodePtr
9
Append
5
3 4 Null
Null
Head
newNode
NodePtr
10
Append
5
3 4
Null
Head
newNode
NodePtr
11
Display List
void NumberList::DisplayList(){ ListNode* nodePtr; nodePtr = head; while(nodePtr) {
cout << nodePtr->value << endl;nodePtr = nodePtr->next;
}}
12
Display
53 4 Null
Head
NodePtr
3
13
Display
53 4 Null
Head
NodePtr
34
14
Display
53 4 Null
Head
NodePtr
345
15
Display
53 4 Null
Head
NodePtr
345
16
Insert A Nodevoid NumberList::insertNode(double num){ ListNode *newNode, *nodePtr, *previousNode; newNode = new ListNode; newNode -> value = num;
if(!head) { head = newNode;
newNode->next = NULL; } else { nodePtr = head;
previousNode = NULL;
17
Insert A Node//Continued from previous slidewhile(nodePtr != NULL && nodePtr->value < num){ previousNode = nodePtr; nodePtr = nodePtr->next;}if(previousNode == NULL) //if insert as first{ head = newNode; newNode -> next = nodePtr;}else{ previousNode -> next = newNode; newNode -> next = nodePtr;}
}}
18
Insert
53 4 NullHead
NodePtr
4.5
newNode
PreviousNode
Null
19
Insert
53 4 NullHead
NodePtr
4.5
newNode
PreviousNode
20
Insert
53 4 NullHead
NodePtr
4.5
newNode
PreviousNode
21
Insert
53 4 NullHead
NodePtr
4.5
newNode
PreviousNode
22
Insert
53 4 NullHead
NodePtr
4.5
newNode
PreviousNode
23
Insert
53 4 NullHead
NodePtr
4.5
newNode
PreviousNode
24
Insert
53 4 NullHead
NodePtr
4.5
newNode
PreviousNode
25
Deleting A Nodevoid NumberList::deleteNode(double num){ ListNode *nodePtr, *previousNode; if(!head)
return; if(head->value == num) {
nodePtr = head->next;delete head;head = nodePtr;
} else { nodePtr = head;
while(nodePtr != NULL && nodePtr->value != num) { previousNode = nodePtr; nodePtr = nodePtr->next;}if(nodePtr) { previousNode->next = nodePtr -> next; delete nodePtr;
} }}
26
Delete
53 4 NullHead
NodePtr
PreviousNode
Null
num4
27
Delete
53 4 NullHead
NodePtr
num4
PreviousNode
28
Delete
53 4 NullHead
NodePtr
num4
PreviousNode
29
Delete
53 4 NullHead
NodePtr
num4
PreviousNode
30
Fini
?