0% found this document useful (0 votes)
104 views58 pages

Data Structures Using C++ 2E: Linked Lists

The document summarizes key points about linked lists from Chapter 5 of the book Data Structures Using C++ 2E. It discusses the objectives of learning about linked lists, the basic properties of linked lists including nodes and links, traversing linked lists, inserting and deleting items from linked lists, building linked lists, implementing linked lists as an abstract data type (ADT) with operations like search and copy, and derived classes for ordered and unordered linked lists.

Uploaded by

sethi
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
104 views58 pages

Data Structures Using C++ 2E: Linked Lists

The document summarizes key points about linked lists from Chapter 5 of the book Data Structures Using C++ 2E. It discusses the objectives of learning about linked lists, the basic properties of linked lists including nodes and links, traversing linked lists, inserting and deleting items from linked lists, building linked lists, implementing linked lists as an abstract data type (ADT) with operations like search and copy, and derived classes for ordered and unordered linked lists.

Uploaded by

sethi
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
You are on page 1/ 58

Data Structures Using C++ 2E

Chapter 5
Linked Lists
Objectives

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

Data Structures Using C++ 2E 2


Objectives (contd.)

Learn how to construct a doubly linked list


Discover how to use the STL container list
Learn about linked lists with header and trailer
nodes
Become aware of circular linked lists

Data Structures Using C++ 2E 3


Linked Lists

Collection of components (nodes)


Every node (except last)
Contains address of the next node
Node components
Data: stores relevant information
Link: stores address

FIGURE 5-1 Structure of a node

Data Structures Using C++ 2E 4


Linked Lists (contd.)
Head (first)
Address of the first node in the list
Arrow points to node address
Stored in node
Down arrow in last node indicates NULL link field

FIGURE 5-2 Linked list

FIGURE 5-3 Linked list and values of the links


Data Structures Using C++ 2E 5
Linked Lists (contd.)

Two node components


Declared as a class or struct
Data type depends on specific application
Link component: pointer
Data type of pointer variable: node type itself

Data Structures Using C++ 2E 6


Linked Lists: Some Properties

Head stores address of first node


Info stores information
Link stores address of next node
Assume info type int
TABLE 5-1 Values of head and some of
the nodes of the linked list in Figure 5-4
FIGURE 5-4 Linked list with four
nodes

Data Structures Using C++ 2E 7


Linked Lists: Some Properties (contd.)

Pointer current: same type as pointer head


current = head;
Copies value of head into current
current = current->link;
Copies value of current->link (2800) into
current

FIGURE 5-5 List after the statement


current = current->link; executes

Data Structures Using C++ 2E 8


Linked Lists: Some Properties (contd.)
TABLE 5-2 Values of current, head, and some of the nodes
of the linked list in Figure 5-5

Data Structures Using C++ 2E 9


Traversing a Linked List

Basic linked list operations


Search list to determine if particular item is in the list
Insert item in list
Delete item from list
These operations require list traversal
Given pointer to list first node, we must step through
list nodes

Data Structures Using C++ 2E 10


Traversing a Linked List (contd.)

Suppose head points to a linked list of numbers


Code outputting data stored in each node

Data Structures Using C++ 2E 11


Item Insertion and Deletion
Generic definition of a node on page 270

TABLE 5-3 Inserting a node in a linked list

Data Structures Using C++ 2E 12


Item Insertion and Deletion (contd.)

Sequence of statements to insert node


Very important
Use only one pointer (p) to adjust links of the nodes
Using two pointers
Can simplify insertion code somewhat

Data Structures Using C++ 2E 13


Item Insertion and Deletion (contd.)

Memory still occupied by node after deletion


Memory is inaccessible
Deallocate memory using a pointer to this node

FIGURE 5-10 List after the statement


p->link = p->link->link; executes

Data Structures Using C++ 2E 14


Building a Linked List
If linked list data unsorted
Linked list unsorted
Ways to build linked list
Forward
New node always inserted at end of the linked list
See example on page 274
See function buildListForward on page 277
Backward
New node always inserted at the beginning of the list
See example on page 277
See function buildListBackward on page 278

Data Structures Using C++ 2E 15


Linked List as an ADT

11 basic operations
Two types of linked lists: sorted, unsorted
class linkedListType
Implements basic linked list operations as an ADT
Derive two classes using inheritance
unorderedLinkedList and orderedLinkedList
Unordered linked list functions
buildListForward and buildListBackward
Two more functions accommodate both operations
insertFirst and insertLast
Data Structures Using C++ 2E 16
Structure of Linked List Nodes

Node has two instance variables


Simplify operations (insert, delete)
Define class to implement linked list node as a struct
Definition of the struct nodeType

Data Structures Using C++ 2E 17


Member Variables of the class
linkedListType
class linkedListType
Three instance variables

Data Structures Using C++ 2E 18


Linked List Iterators

To process each node


Must traverse list starting at first node
Iterator
Object producing each element of a container
One element at a time
Operations on iterators: ++ and *
See code on pages 280-281
class linkedListType
Functions of class linkedListIterator

Data Structures Using C++ 2E 19


Linked List Iterators (contd.)

Abstract class linkedListType


Defines basic properties of a linked list as an ADT
See code on page 282
Empty list: first is NULL
Definition of function isEmptyList

Data Structures Using C++ 2E 20


Linked List as an ADT (contd.)

Default constructor
Initializes list to an empty state
Destroy the list
Deallocates memory occupied by each node
Initialize the list
Reinitializes list to an empty state
Must delete the nodes (if any) from the list
Default constructor, copy constructor
Initialized list when list object declared

Data Structures Using C++ 2E 21


Linked List as an ADT (contd.)

Print the list


Must traverse the list starting at first node
Length of a list
Number of nodes stored in the variable count
Function length
Returns value of variable count
Retrieve the data of the first node
Function front
Returns the info contained in the first node
If list is empty, assert statement terminates program

Data Structures Using C++ 2E 22


Linked List as an ADT (contd.)

Retrieve the data of the last node


Function back
Returns info contained in the last node
If list is empty, assert statement terminates program
Begin and end
Function begin returns an iterator to the first node in
the linked list
Function end returns an iterator to the last node in the
linked list

Data Structures Using C++ 2E 23


Linked List as an ADT (contd.)

Copy the list


Makes an identical copy of a linked list
Create node called newNode
Copy node info (original list) into newNode
Insert newNode at the end of list being created
See function copyList on page 289

Data Structures Using C++ 2E 24


Linked List as an ADT (contd.)

Destructor
When class object goes out of scope
Deallocates memory occupied by list nodes
Memory allocated dynamically
Resetting pointers first and last
Does not deallocate memory
Must traverse list starting at first node
Delete each node in the list
Calling destroyList destroys list

Data Structures Using C++ 2E 25


Linked List as an ADT (contd.)

Copy constructor
Makes identical copy of the linked list
Function copyListc checks whether original list
empty
Checks value of first
Must initialize first to NULL
Before calling the function copyList
Overloading the assignment operator
Similar to copy constructor definition

Data Structures Using C++ 2E 26


TABLE 5-6 Time-complexity of the operations of the
class linkedListType

Data Structures Using C++ 2E 27


Unordered Linked Lists

Derive class unorderedLinkedList from the


abstract class linkedListType
Implement the operations search, insertFirst,
insertLast, deleteNode
See code on page 292
Defines an unordered linked list as an ADT
class unorderedLinkedList

Data Structures Using C++ 2E 28


Unordered Linked Lists (contd.)

Search the list


Steps
Step one: 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
Step two: Repeat Step one until either the item is found
or no more data is left in the list to compare with the
search item
See function search on page 293

Data Structures Using C++ 2E 29


Unordered Linked Lists (contd.)

Insert the first node


Steps
Create a new node
If unable to create the node, terminate the program
Store the new item in the new node
Insert the node before first
Increment count by one
See function insertFirst on page 294

Data Structures Using C++ 2E 30


Unordered Linked Lists (contd.)

Insert the last node


Similar to definition of member function
insertFirst
Insert new node after last
See function insertLast on page 294

Data Structures Using C++ 2E 31


Unordered Linked Lists (contd.)

Delete a node
Consider the following cases:
The list is empty
The node is nonempty and the node to be deleted is
the first node
The node is nonempty and the node to be deleted is
not the first node, it is somewhere in the list
The node to be deleted is not in the list
See pseudocode on page 295
See definition of function deleteNode on page 297

Data Structures Using C++ 2E 32


Unordered Linked Lists (contd.)
TABLE 5-7 Time-complexity of the operations of the
class unorderedLinkedList

Data Structures Using C++ 2E 33


Header File of the Unordered Linked
List
Create header file defining class
unorderedListType
See class unorderedListType code on page
299
Specifies members to implement basic properties of an
unordered linked list
Derived from class linkedListType

Data Structures Using C++ 2E 34


Ordered Linked Lists

Derive class orderedLinkedList from class


linkedListType
Provide definitions of the abstract functions:
insertFirst, insertLast, search, deleteNode
Ordered linked list elements are arranged using some
ordering criteria
Assume elements of an ordered linked list arranged in
ascending order
See class orderedLinkedList on pages 300-
301

Data Structures Using C++ 2E 35


Ordered Linked Lists (contd.)

Search the list


Steps describing algorithm
Step one: Compare the search item with the current
node in the list. If the info of the current node is greater
than or equal to the search item, stop the search;
otherwise, make the next node the current node
Step two: Repeat Step one until either an item in the list
that is greater than or equal to the search item is found,
or no more data is left in the list to compare with the
search item

Data Structures Using C++ 2E 36


Ordered Linked Lists (contd.)

Insert a node
Find place where new item goes
Insert item in the list
See code on page 304
Definition of the function insert

Data Structures Using C++ 2E 37


Ordered Linked Lists (contd.)

Insert a node (contd.)


Consider the following cases

Data Structures Using C++ 2E 38


Ordered Linked Lists (contd.)

Insert first and insert last


Function insertFirst
Inserts new item at beginning of the list
Must be inserted at the proper place
Function insertLast
Inserts new item at the proper place

Data Structures Using C++ 2E 39


Ordered Linked Lists (contd.)

Delete a node
Several cases to consider
See function deleteNode code on page 306

Data Structures Using C++ 2E 40


Ordered Linked Lists (contd.)

TABLE 5-8 Time-complexity of the operations of


the class orderedLinkedList

Data Structures Using C++ 2E 41


Header File of the Ordered Linked List

See code on page 308


Specifies members to implement the basic properties
of an ordered linked list
Derived from class linkedListType
See test program on page 309
Tests various operations on an ordered linked list

Data Structures Using C++ 2E 42


Doubly Linked Lists
Traversed in either direction
Typical operations
Initialize the list
Destroy the list
Determine if list empty
Search list for a given item
Insert an item
Delete an item, and so on
See code on page 311
Class specifying members to implement properties of
an ordered doubly linked list
Data Structures Using C++ 2E 43
Doubly Linked Lists (contd.)

Linked list in which every node has a next pointer


and a back pointer
Every node contains address of next node
Except last node
Every node contains address of previous node
Except the first node

FIGURE 5-27 Doubly linked list

Data Structures Using C++ 2E 44


Doubly Linked Lists (contd.)

Default constructor
Initializes the doubly linked list to an empty state
isEmptyList
Returns true if the list empty
Otherwise returns false
List empty if pointer first is NULL

Data Structures Using C++ 2E 45


Doubly Linked Lists (contd.)
Destroy the list
Deletes all nodes in the list
Leaves list in an empty state
Traverse list starting at the first node; delete each node
count set to zero
Initialize the list
Reinitializes doubly linked list to an empty state
Can be done using the operation destroy
Length of the list
Length of a linked list stored in variable count
Returns value of this variable

Data Structures Using C++ 2E 46


Doubly Linked Lists (contd.)

Print the list


Outputs info contained in each node
Traverse list starting from the first node
Reverse print the list
Outputs info contained in each node in reverse order
Traverse list starting from the last node
Search the list
Function search returns true if searchItem found
Otherwise, it returns false
Same as ordered linked list search algorithm
Data Structures Using C++ 2E 47
Doubly Linked Lists (contd.)

First and last elements


Function front returns first list element
Function back returns last list element
If list empty
Functions terminate the program

Data Structures Using C++ 2E 48


Doubly Linked Lists (contd.)

Insert a node
Four cases
Case 1: Insertion in an empty list
Case 2: Insertion at the beginning of a nonempty list
Case 3: Insertion at the end of a nonempty list
Case 4: Insertion somewhere in a nonempty list
Cases 1 and 2 requirement: Change value of the
pointer first
Cases 3 and 4: After inserting an item, count
incremented by one

Data Structures Using C++ 2E 49


Doubly Linked Lists (contd.)

Insert a node (contd.)


Figures 5-28 and 5-29 illustrate case 4
See code on page 317
Definition of the function insert

Data Structures Using C++ 2E 50


Doubly Linked Lists (contd.)
Delete a node
Four cases
Case 1: The list is empty
Case 2: The item to be deleted is in the first node of the
list, which would require us to change the value of the
pointer first
Case 3: The item to be deleted is somewhere in the list
Case 4: The item to be deleted is not in the list
See code on page 319
Definition of function deleteNode

Data Structures Using C++ 2E 51


STL Sequence Container: list
TABLE 5-9 Various ways to declare a list object

Data Structures Using C++ 2E 52


TABLE 5-10 Operations specific to a list container

Data Structures Using C++ 2E 53


TABLE 5-10 Operations specific to a list container (contd.)

Data Structures Using C++ 2E 54


Linked Lists with Header and Trailer
Nodes
Simplify insertion and deletion
Never insert item before the first or after the last item
Never delete the first node
Set header node at beginning of the list
Containing a value smaller than the smallest value in
the data set
Set trailer node at end of the list
Containing value larger than the largest value in the
data set

Data Structures Using C++ 2E 55


Linked Lists with Header and Trailer
Nodes (contd.)
Header and trailer nodes
Serve to simplify insertion and deletion algorithms
Not part of the actual list
Actual list located between these two nodes

Data Structures Using C++ 2E 56


Circular Linked Lists

Last node points to the first node


Basic operations
Initialize list (to an empty state), determine if list is
empty, destroy list, print list, find the list length, search
for a given item, insert item, delete item, copy the list

FIGURE 5-34 Circular linked lists


Data Structures Using C++ 2E 57
Summary
Linked list topics
Traversal, searching, inserting, deleting
Building a linked list
Forward, backward
Linked list as an ADT
Ordered linked lists
Doubly linked lists
STL sequence container list
Linked lists with header and trailer nodes
Circular linked lists

Data Structures Using C++ 2E 58

You might also like