Download presentation
Presentation is loading. Please wait.
Published byFelix Allison Modified over 8 years ago
1
C++ Programming: From Problem Analysis to Program Design, Fourth Edition Chapter 18: Linked Lists
2
C++ Programming: From Problem Analysis to Program Design, Fourth Edition2 Objectives In this chapter, you will: Learn about linked lists Become aware of the basic properties of linked lists Explore the insertion and deletion operations on linked lists Discover how to build and manipulate a linked list Learn how to construct a doubly linked list
3
C++ Programming: From Problem Analysis to Program Design, Fourth Edition3 Introduction Data can be organized and processed sequentially using an array, called a sequential list Problems with an array −Array size is fixed −Unsorted array: searching for an item is slow −Sorted array: insertion and deletion is slow
4
C++ Programming: From Problem Analysis to Program Design, Fourth Edition4 Linked Lists Linked list: A list of items (nodes), in which the order of the nodes is determined by the address, called the link, stored in each node Link field in last node is NULL
5
C++ Programming: From Problem Analysis to Program Design, Fourth Edition5 Linked Lists (continued) Example: −Suppose that the first node is at memory location 1200, and the second node is at memory location 1575
6
C++ Programming: From Problem Analysis to Program Design, Fourth Edition6 Linked Lists (continued) Because each node of a linked list has two components, we need to declare each node as a class or struct −Data type of a node depends on the specific application −The link component of each node is a pointer
7
C++ Programming: From Problem Analysis to Program Design, Fourth Edition7 Linked Lists: Some Properties
8
C++ Programming: From Problem Analysis to Program Design, Fourth Edition8 Linked Lists: Some Properties (continued) current = head; −Copies value of head into current
9
C++ Programming: From Problem Analysis to Program Design, Fourth Edition9 Linked Lists: Some Properties (continued) current = current->link;
10
C++ Programming: From Problem Analysis to Program Design, Fourth Edition10 Linked Lists: Some Properties (continued)
11
C++ Programming: From Problem Analysis to Program Design, Fourth Edition11 Traversing a Linked List The basic operations of a linked list are: −Search to determine if an item is in the list −Insert an item in the list −Delete an item from the list Traversal: given a pointer to the first node of the list, step through the nodes of the list
12
C++ Programming: From Problem Analysis to Program Design, Fourth Edition12 Traversing a Linked List (continued) To traverse a linked list: Example:
13
C++ Programming: From Problem Analysis to Program Design, Fourth Edition13 Item Insertion and Deletion Consider the following definition of a node: We will use the following variable declaration:
14
C++ Programming: From Problem Analysis to Program Design, Fourth Edition14 Insertion Consider the following linked list: A new node with info 50 is to be created and inserted after p
16
The sequence of statements to insert the node is very important. Suppose that we reverse the sequence of the statements and execute the statements in the following order:
17
C++ Programming: From Problem Analysis to Program Design, Fourth Edition17 Insertion (continued) Using two pointers, we can simplify the insertion code somewhat To insert newNode between p and q : The order in which these statements execute does not matter
19
C++ Programming: From Problem Analysis to Program Design, Fourth Edition19 Deletion Node with info 34 is removed from the list, but memory is still occupied; node is dangling
21
C++ Programming: From Problem Analysis to Program Design, Fourth Edition21 Building a Linked List If data is unsorted −The list will be unsorted Can build a linked list forward or backward −Forward: a new node is always inserted at the end of the linked list −Backward: a new node is always inserted at the beginning of the list
22
C++ Programming: From Problem Analysis to Program Design, Fourth Edition22 Building a Linked List Forward You need three pointers to build the list: −One to point to the first node in the list, which cannot be moved −One to point to the last node in the list −One to create the new node
25
C++ Programming: From Problem Analysis to Program Design, Fourth Edition25 Building a Linked List Forward (continued) We now repeat statements 1 through 6b three more times:
27
C++ Programming: From Problem Analysis to Program Design, Fourth Edition27 Building a Linked List Backward The algorithm is: −Initialize first to NULL −For each item in the list Create the new node, newNode Store the item in newNode Insert newNode before first Update the value of the pointer first
29
C++ Programming: From Problem Analysis to Program Design, Fourth Edition29 Linked List as an ADT The basic operations on linked lists are: −Initialize the list −Determine whether the list is empty −Print the list −Find the length of the list −Destroy the list
30
C++ Programming: From Problem Analysis to Program Design, Fourth Edition30 Linked List as an ADT (continued) The basic operations on linked lists are: (continued) −Retrieve the info contained in the first node −Retrieve the info contained in the last node −Search the list for a given item −Insert an item in the list −Delete an item from the list −Make a copy of the linked list
31
C++ Programming: From Problem Analysis to Program Design, Fourth Edition31 Linked List as an ADT (continued) In general, there are two types of linked lists: −Sorted and unsorted lists The algorithms to implement the operations search, insert, and remove slightly differ for sorted and unsorted lists abstract class linkedListType will implement the basic linked list operations −Derived classes: unorderedLinkedList and orderedLinkedList
32
C++ Programming: From Problem Analysis to Program Design, Fourth Edition32 Linked List as an ADT (continued) If a linked list is unordered, we can insert a new item at either the end or the beginning − buildListForward inserts item at the end − buildListBackward inserts new item at the beginning To accommodate both operations, we will write two functions: − insertFirst and insertLast We will use two pointers in the list: − first and last
33
C++ Programming: From Problem Analysis to Program Design, Fourth Edition33 Structure of Linked List Nodes The node has two member variables To simplify operations such as insert and delete, we define the class to implement the node of a linked list as a struct The definition of the struct nodeType is:
34
C++ Programming: From Problem Analysis to Program Design, Fourth Edition34 Member Variables of the class linkedListType We use two pointers: first and last We also keep a count of the number of nodes in the list linkedListType has three member variables:
35
C++ Programming: From Problem Analysis to Program Design, Fourth Edition35 Linked List Iterators One of the basic operations performed on a list is to process each node of the list −List must be traversed, starting at first node −Common technique is to provide an iterator Iterator: object that produces each element of a container, one element at a time −The two most common operations are: ++ (the increment operator) * (the dereferencing operator)
36
C++ Programming: From Problem Analysis to Program Design, Fourth Edition36 Linked List Iterators (continued) Note that an iterator is an object We need to define a class ( linkedListIterator ) to create iterators to objects of the class linkedListType −Would have two member variables: One to refer to (the current) node One to refer to the node just before the (current) node
38
C++ Programming: From Problem Analysis to Program Design, Fourth Edition38 Linked List Iterators (continued)
45
C++ Programming: From Problem Analysis to Program Design, Fourth Edition45 Print the List
46
C++ Programming: From Problem Analysis to Program Design, Fourth Edition46 Length of a List
47
C++ Programming: From Problem Analysis to Program Design, Fourth Edition47 Retrieve the Data of the First Node
48
C++ Programming: From Problem Analysis to Program Design, Fourth Edition48 Retrieve the Data of the Last Node
49
C++ Programming: From Problem Analysis to Program Design, Fourth Edition49 Begin and End
50
C++ Programming: From Problem Analysis to Program Design, Fourth Edition50 Copy the List Steps: −Create a node, and call it newNode −Copy the info of the node (in the original list) into newNode −Insert newNode at the end of the list being created
53
C++ Programming: From Problem Analysis to Program Design, Fourth Edition53 Destructor
54
C++ Programming: From Problem Analysis to Program Design, Fourth Edition54 Copy Constructor
55
C++ Programming: From Problem Analysis to Program Design, Fourth Edition55 Overloading the Assignment Operator
56
C++ Programming: From Problem Analysis to Program Design, Fourth Edition56 Unordered Linked Lists We derive the class unorderedLinkedList from the abstract class linkedListType and implement the operations search, insertFirst, insertLast, and deleteNode
58
C++ Programming: From Problem Analysis to Program Design, Fourth Edition58 Unordered Linked Lists (continued)
59
C++ Programming: From Problem Analysis to Program Design, Fourth Edition59 Search the List Steps: −Compare the search item with the current node in the list If the info of the current node is the same as the search item, stop the search Otherwise, make the next node the current node −Repeat Step 1 until the item is found Or, until no more data is left in the list to compare with the search item
61
C++ Programming: From Problem Analysis to Program Design, Fourth Edition61 Insert the First Node Steps: −Create a new node −Store the new item in the new node −Insert the node before first −Increment count by 1
63
C++ Programming: From Problem Analysis to Program Design, Fourth Edition63 Insert the Last Node
64
C++ Programming: From Problem Analysis to Program Design, Fourth Edition64 Delete a Node Case 1: List is empty −If the list is empty, output an error message Case 2: List is not empty −The node to be deleted is the first node −First scenario: List has only one node
65
C++ Programming: From Problem Analysis to Program Design, Fourth Edition65 Delete a Node (continued) −Second scenario: List of more than one node
66
C++ Programming: From Problem Analysis to Program Design, Fourth Edition66 Delete a Node (continued) Case 3: Node to be deleted is not the first one −Case 3a: Node to be deleted is not last one
67
C++ Programming: From Problem Analysis to Program Design, Fourth Edition67 Delete a Node (continued) −Case 3b: Node to be deleted is the last node
68
C++ Programming: From Problem Analysis to Program Design, Fourth Edition68 Delete a Node (continued) Case 4: Node to be deleted is not in the list −The list requires no adjustment −Simply output an error message
71
C++ Programming: From Problem Analysis to Program Design, Fourth Edition71 Header File of the Unordered Linked List
72
C++ Programming: From Problem Analysis to Program Design, Fourth Edition72 Header File of the Unordered Linked List (continued)
73
C++ Programming: From Problem Analysis to Program Design, Fourth Edition73 Ordered Linked Lists (This topic continues in file 02096_PPT_ch18-2.ppt )
Similar presentations
© 2024 SlidePlayer.com. Inc.
All rights reserved.