Presentation is loading. Please wait.

Presentation is loading. Please wait.

Copyright © 2008 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Starting Out with C++ Early Objects Sixth Edition Chapter 17: Linked Lists.

Similar presentations


Presentation on theme: "Copyright © 2008 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Starting Out with C++ Early Objects Sixth Edition Chapter 17: Linked Lists."— Presentation transcript:

1 Copyright © 2008 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Starting Out with C++ Early Objects Sixth Edition Chapter 17: Linked Lists by Tony Gaddis, Judy Walters, and Godfrey Muganda

2 Copyright © 2008 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 17-2 Topics 17.1 Introduction to the Linked List ADT 17.2 Linked List Operations 17.3 A Linked List Template 17.4 Recursive Linked List Operations 17.5 Variations of the Linked List 17.6 The STL list Container

3 Copyright © 2008 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 17-3 17.1 Introduction to the Linked List ADT Linked list: a sequence of data structures (nodes) with each node containing a pointer to its successor The last node in the list has its successor pointer set to NULL NULL list head

4 Copyright © 2008 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 17-4 Linked List Terminology The node at the beginning is called the head of the list The entire list is identified by the pointer to the head node, this pointer is called the list head.

5 Copyright © 2008 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 17-5 Linked Lists Nodes can be added or removed from the linked list during execution Addition or removal of nodes can take place at beginning, end, or middle of the list NULL list head Add or delete node

6 Copyright © 2008 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 17-6 Linked Lists vs. Arrays and Vectors Linked lists can grow and shrink as needed, unlike arrays, which have a fixed size Unlike vectors, insertion or removal in the middle of the list is very efficient NULL list head

7 Copyright © 2008 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 17-7 Node Organization A node contains: –data: one or more data fields – may be organized as structure, object, etc. –a pointer that can point to another node data pointer

8 Copyright © 2008 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 17-8 Linked List Organization Linked list contains 0 or more nodes: Has a list head to point to first node Successor pointer for the last node is set to NULL NULL list head

9 Copyright © 2008 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 17-9 Empty List A list with no nodes is called the empty list In this case the list head is set to NULL NULL list head

10 Copyright © 2008 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 17-10 C++ Implementation Implementation of nodes requires a structure containing a pointer to a structure of the same type: struct ListNode { int data; ListNode *next; };

11 Copyright © 2008 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 17-11 C++ Implementation Nodes can be equipped with constructors: struct ListNode { int data; ListNode *next; ListNode(int d, ListNode* p=0) {data = d; next = p;} };

12 Copyright © 2008 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 17-12 Creating an Empty List Define a pointer for the head of the list: ListNode *head = NULL; Head pointer initialized to NULL to indicate an empty list NULL head

13 Copyright © 2008 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 17-13 17.2 Linked List Operations Basic operations: –append a node to the end of the list –insert a node within the list –traverse the linked list –delete a node –delete/destroy the list

14 Copyright © 2008 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 17-14 Creating a Node ListNode *p; int num = 23; p = new ListNode(num); NULL 23 p

15 Copyright © 2008 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 17-15 Appending an Item To add an item to the end of the list: –If the list is empty, set head to a new node containing the item head = new ListNode(num); –If the list is not empty, move a pointer p to the last node, then add a new node containing the item p->next = new ListNode(num);

16 Copyright © 2008 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 17-16 Appending an Item list head 51323 p NULL List originally has 5, 13. p locates the last node, then a node with a new item, 23, is added

17 Copyright © 2008 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 17-17 Inserting a Node Used to insert an item into a sorted list, keeping the list sorted. Requires two pointers to traverse the list: –pointer to locate the node with data value greater than that of node to be inserted –pointer to 'trail behind' one node, to point to node before point of insertion New node is inserted between the nodes pointed at by these pointers

18 Copyright © 2008 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 17-18 Inserting a Node into a Linked List NULL list head 51319 17 nodePtrpreviousNode Correct position located Item to insert num

19 Copyright © 2008 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 17-19 Inserting a Node into a Linked List NULL list head 51319 17 nodePtrpreviousNode New node created and inserted in order in the linked list

20 Copyright © 2008 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 17-20 Traversing a Linked List List traversals visit each node in a linked list to display contents, validate data, etc. Basic process of traversal: set a pointer to the head pointer while pointer is not NULL process data set pointer to the successor of the current node end while

21 Copyright © 2008 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 17-21 Traversing a Linked List NULL list head 51319 nodePtr nodePtr points to the node containing 5, then the node containing 13, then the node containing 19, then points to NULL, and the list traversal stops

22 Copyright © 2008 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 17-22 Deleting a Node Used to remove a node from a linked list Requires two pointers: one to locate the node to be deleted, one to point to the node before the node to be deleted

23 Copyright © 2008 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 17-23 Deleting a Node NULL list head 51319 nodePtrpreviousNode Locating the node containing 13

24 Copyright © 2008 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 17-24 Deleting a Node NULL list head 51319 nodePtrpreviousNode Adjusting pointer around the node to be deleted

25 Copyright © 2008 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 17-25 Deleting a Node NULL list head 519 nodePtrpreviousNode Linked list after deleting the node containing 13

26 Copyright © 2008 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 17-26 Destroying a Linked List Must remove all nodes used in the list To do this, use list traversal to visit each node For each node, –Unlink the node from the list –Free the node’s memory Set the list head to NULL

27 Copyright © 2008 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 17-27 17.3 A Linked List Template A linked list template can be written by replacing the type of the data in the node with a type parameter, say T. If defining the linked list as a class template, then all member functions must be function templates

28 Copyright © 2008 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 17-28 17.4 Recursive Linked List Operations A non-empty linked list consists of a head node followed by the rest of the nodes The rest of the nodes form a linked list that is called the tail of the original list

29 Copyright © 2008 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 17-29 Recursive Linked List Operations Many linked list operations can be broken down into the smaller problems of processing the head of the list and then recursively operating on the tail of the list

30 Copyright © 2008 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 17-30 Recursive Linked List Operations To find the length of a list –If the list is empty, the length is 0 (base case) –If the list is not empty, find the length of the tail and then add 1 to obtain length of original list

31 Copyright © 2008 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 17-31 Recursive Linked List Operations To find the length of a list int length(ListNode *myList) { if (myList == NULL) return 0; else return 1 + length(myList->next); }

32 Copyright © 2008 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 17-32 17.5 Variations of the Linked List Other linked list organizations: –doubly-linked list: each node contains two pointers: one to the next node in the list, one to the previous node in the list NULL list head 51319 NULL

33 Copyright © 2008 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 17-33 Variations of the Linked List Other linked list organizations: –circular linked list: the last node in the list points back to the first node in the list, not to NULL list head 51319

34 Copyright © 2008 Pearson Education, Inc. Publishing as Pearson Addison-Wesley 17-34 17.6 The STL list Container Template for a doubly linked list Member functions for –locating beginning, end of list: front, back, end –adding elements to the list: insert, merge, push_back, push_front –removing elements from the list: erase, pop_back, pop_front, unique

35 Copyright © 2008 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Starting Out with C++ Early Objects Sixth Edition Chapter 17: Linked Lists by Tony Gaddis, Judy Walters, and Godfrey Muganda


Download ppt "Copyright © 2008 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Starting Out with C++ Early Objects Sixth Edition Chapter 17: Linked Lists."

Similar presentations


Ads by Google