30
1 CSE 2341 Object Oriented Programming with C++ Note Set #18

CSE 2341 Object Oriented Programming with C++ Note Set #18

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

Page 1: CSE 2341 Object Oriented Programming  with C++ Note Set #18

1

CSE 2341Object Oriented Programming

with C++

Note Set #18

Page 2: CSE 2341 Object Oriented Programming  with C++ Note Set #18

2

Overview

• Dynamic Data structures with linked lists

Page 3: CSE 2341 Object Oriented Programming  with C++ Note Set #18

3

Linked List

• Series of connected nodes• Can grow/shrink at runtime

– dynamic allocation of nodes allows for this

Data

Null

Head

Page 4: CSE 2341 Object Oriented Programming  with C++ Note Set #18

4

Linked List Node

Data

struct ListNode{

double data;ListNode* next;

};

ListNode is a self referential data structure.

Page 5: CSE 2341 Object Oriented Programming  with C++ Note Set #18

5

Basic Linked List Operations

• Basic Operations of LL– appending a node– traversing the list– inserting a node– deleting a node– destroying the list

Page 6: CSE 2341 Object Oriented Programming  with C++ Note Set #18

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();};

Page 7: CSE 2341 Object Oriented Programming  with C++ Note Set #18

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;

}}

Page 8: CSE 2341 Object Oriented Programming  with C++ Note Set #18

8

Append

5

3 4 Null

Null

Head

newNode

NodePtr

Page 9: CSE 2341 Object Oriented Programming  with C++ Note Set #18

9

Append

5

3 4 Null

Null

Head

newNode

NodePtr

Page 10: CSE 2341 Object Oriented Programming  with C++ Note Set #18

10

Append

5

3 4

Null

Head

newNode

NodePtr

Page 11: CSE 2341 Object Oriented Programming  with C++ Note Set #18

11

Display List

void NumberList::DisplayList(){ ListNode* nodePtr; nodePtr = head; while(nodePtr) {

cout << nodePtr->value << endl;nodePtr = nodePtr->next;

}}

Page 12: CSE 2341 Object Oriented Programming  with C++ Note Set #18

12

Display

53 4 Null

Head

NodePtr

3

Page 13: CSE 2341 Object Oriented Programming  with C++ Note Set #18

13

Display

53 4 Null

Head

NodePtr

34

Page 14: CSE 2341 Object Oriented Programming  with C++ Note Set #18

14

Display

53 4 Null

Head

NodePtr

345

Page 15: CSE 2341 Object Oriented Programming  with C++ Note Set #18

15

Display

53 4 Null

Head

NodePtr

345

Page 16: CSE 2341 Object Oriented Programming  with C++ Note Set #18

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;

Page 17: CSE 2341 Object Oriented Programming  with C++ Note Set #18

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;}

}}

Page 18: CSE 2341 Object Oriented Programming  with C++ Note Set #18

18

Insert

53 4 NullHead

NodePtr

4.5

newNode

PreviousNode

Null

Page 19: CSE 2341 Object Oriented Programming  with C++ Note Set #18

19

Insert

53 4 NullHead

NodePtr

4.5

newNode

PreviousNode

Page 20: CSE 2341 Object Oriented Programming  with C++ Note Set #18

20

Insert

53 4 NullHead

NodePtr

4.5

newNode

PreviousNode

Page 21: CSE 2341 Object Oriented Programming  with C++ Note Set #18

21

Insert

53 4 NullHead

NodePtr

4.5

newNode

PreviousNode

Page 22: CSE 2341 Object Oriented Programming  with C++ Note Set #18

22

Insert

53 4 NullHead

NodePtr

4.5

newNode

PreviousNode

Page 23: CSE 2341 Object Oriented Programming  with C++ Note Set #18

23

Insert

53 4 NullHead

NodePtr

4.5

newNode

PreviousNode

Page 24: CSE 2341 Object Oriented Programming  with C++ Note Set #18

24

Insert

53 4 NullHead

NodePtr

4.5

newNode

PreviousNode

Page 25: CSE 2341 Object Oriented Programming  with C++ Note Set #18

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;

} }}

Page 26: CSE 2341 Object Oriented Programming  with C++ Note Set #18

26

Delete

53 4 NullHead

NodePtr

PreviousNode

Null

num4

Page 27: CSE 2341 Object Oriented Programming  with C++ Note Set #18

27

Delete

53 4 NullHead

NodePtr

num4

PreviousNode

Page 28: CSE 2341 Object Oriented Programming  with C++ Note Set #18

28

Delete

53 4 NullHead

NodePtr

num4

PreviousNode

Page 29: CSE 2341 Object Oriented Programming  with C++ Note Set #18

29

Delete

53 4 NullHead

NodePtr

num4

PreviousNode

Page 30: CSE 2341 Object Oriented Programming  with C++ Note Set #18

30

Fini

?