Presentation is loading. Please wait.

Presentation is loading. Please wait.

LINKED LISTS Midwestern State University CMPS 1053 Dr. Ranette Halverson 1.

Similar presentations


Presentation on theme: "LINKED LISTS Midwestern State University CMPS 1053 Dr. Ranette Halverson 1."— Presentation transcript:

1 LINKED LISTS Midwestern State University CMPS 1053 Dr. Ranette Halverson 1

2 Basic LL Node struct Node {int Num; Node * Next; } Node *Head, *Temp; Num Next 2

3 Traverse a Linked List (print) // Print each value of the list Temp = Head; while (Temp != NULL) { cout Num; Temp = Temp -> Next; } 3

4 Insert Node to Front of List if (Head == Null) // empty list { Head = new Node; Head -> Num = VAL; Head -> Next = NULL; } else // not empty list {Temp = new Node; Temp -> Num = VAL; Temp -> Next = Head; Head = Temp; } 4

5 Insert Node to Front of List - Revisited Could we eliminate the first case (Head == NULL)? That is, does the second case work with an empty or non-empty list? 5

6 Insert Node to Front of List if (Head == Null) // Can we eliminate this case? { Head = new Node; Head -> Num = VAL; Head -> Next = NULL; } else // Test this for empty list: Head == Null {Temp = new Node; Temp -> Num = VAL; Temp -> Next = Head; Head = Temp; } 6

7 Remove Front Node From List if (Head != NULL) { Temp = Head; Head = Head -> Next; delete Temp; Temp = NULL; } 7

8 Insert Node to End of List Node *P, *C; // for previous & current if (Head == NULL) { } //Use insert to front code; else {P = Head; C=Head -> Next; While (C != NULL) // find end of list { P = C; C = C -> Next; } P -> Next = new Node; P -> Next -> Num = VAL; P -> Next -> Next = Null; } 8

9 Remove Last Node in List if (Head != NULL) // empty list else if (Head -> Next == NULL) //one Node in list { delete Head; Nead = Null; } else // find end of list having at least 2 Nodes { P = Head; C = Head -> Next; While (C -> Next != NULL) // C will point to last Node { P = C; C = C -> Next; } delete C; C = Null; P -> Next = NULL; } 9

10 Insert Node (Val) to Ordered List (ascending) Temp = new Node; Temp -> Num = Val; //Case 1: Empty list – use code to insert to front if (Head == NULL) { } //Case 2: Val is smaller than first Node – insert to front else if (Val Num) { } //Case 3: Find correct location within the list else { // need to write this code } //Considerations: Search list comparing Val to Nodes already in list AND watching for end of list (NULL) 10

11 Insert Node in Ordered List (p.2) //Case 3: Find correct location within the list { P = NULL; C = Head; while (C -> Next != Null && C-> Num < Val) //move down list { P = C; C = C -> Next;} // found location – don’t know which condition stopped the loop if (C -> Num >= Val) // Insert between P & C { Temp -> Next = C; P -> Next = Temp; } else // Insert after C { C -> Next = Temp; Temp->Next = NULL; } 11

12 Remove Node (Val) from Linked List if (Head == Null) { return false; } // empty list else if (Head ->Num == Val) // delete first node { Temp = Head; Head = Head -> Next; delete Temp; Temp = Null; return true; } 12

13 Remove Node (Val) from Linked List else // must find val in list { P=Null; C = Head; while (C -> Next != Null && C-> Num < Val) { P = C; C = C -> Next;} if ( C -> Num == Val) // remove node { P -> Next = C -> Next; delete C; C = Null; return true; } else { return false; } // val not in list } 13

14 Linked List Class struct Node {int Num; Node * Next; } class LinkList { Node *Head; public: // put functions here } 14

15 Constructor LinkList ( ) { Head = NULL;} 15

16 Insert to Front Function void InsertFront (int Val) { Node * Temp; if (Head == Null) // empty list { Head = new Node; Head -> Num = VAL; Head -> Next = NULL; } else // not empty list {Temp = new Node; Temp -> Num = VAL; Temp -> Next = Head; Head = Temp; } } 16

17 Remove From Front of List bool RemoveFront (int &Val) { if (Head == Null) // Empty list return false; else if (Head != NULL) { Val = Head -> Num; Temp = Head; Head = Head -> Next; delete Temp; Temp = NULL; return true; } 17

18 Calls to Insert & Remove int main ( ) { LinkList MyList ( ); int X = 5, Y = 10, Z; bool B; MyList.InsertFront(X); MyList.InsertFront(Y); B = MyList.RemoveFront (Z); if (B) cout << Z; // only print if actually removed MyList.PrintList ( ); } 18

19 NOW, YOU DEVELOP YOUR OWN LINKED LIST CLASS USING WHAT WE HAVE DONE IN CLASS!!! Test with your own data. Test all functions thoroughly!!! 19

20 Linked List Application Consider a linked list consisting of a person’s last & first names & age, ordered by age. Modify the struct Node What function do you call to insert a new person to the list? How does the code in other member functions change? 20

21 New struct struct Node {string Lname; string Fname; int Age; // Num Node * Next; } Does the order of the attributes matter? If we use Num (instead of Age) will have less code changes. 21

22 Code Changes??? Every place that Num in a node is assigned, also need to assign last name & first name. 22

23 Constructor – any changes needed? LinkList ( ) { Head = NULL;} 23

24 Traverse to Print //Print each value of the list Temp = Head; while (Temp != NULL) { cout Lname Fname Num << endl; Temp = Temp -> Next; } 24

25 Insert Ordered – (Val, LN, FN) Temp = new Node; Temp -> Num = Val; Temp -> Lname = LN; Temp -> Fname = FN; if (Head == NULL) { // insert to front code here } else if (Val Num) { // insert to front code here } else { P = NULL; C = Head; while (C -> Next != Null && C-> Num < Val) //move down list { P = C; C = C -> Next;} if (C -> Num >= Val) //insert between P & C { Temp -> Next = C; P -> Next = Temp; } else // Insert after C { C -> Next = Temp; Temp->Next = NULL } } 25

26 Question? What happens if there is a “Tie” in the ages? That is, if 2 people have the same age which one is first in the list? 26


Download ppt "LINKED LISTS Midwestern State University CMPS 1053 Dr. Ranette Halverson 1."

Similar presentations


Ads by Google