Instant download Data Structure and Algorithms Using C++: A Practical Implementation 1st Edition Sachi Nandan Mohanty pdf all chapter
Instant download Data Structure and Algorithms Using C++: A Practical Implementation 1st Edition Sachi Nandan Mohanty pdf all chapter
Instant download Data Structure and Algorithms Using C++: A Practical Implementation 1st Edition Sachi Nandan Mohanty pdf all chapter
com
https://textbookfull.com/product/data-structure-and-
algorithms-using-c-a-practical-implementation-1st-edition-
sachi-nandan-mohanty/
OR CLICK BUTTON
DOWNLOAD NOW
https://textbookfull.com/product/primary-mathematics-
textbook-2b-jennifer-hoerst/
textboxfull.com
https://textbookfull.com/product/handbook-of-macroeconomics-
volume-2a-2b-set-1st-edition-john-b-taylor/
textboxfull.com
https://textbookfull.com/product/essential-algorithms-a-practical-
approach-to-computer-algorithms-using-python-and-c-second-edition-rod-
stephens/
textboxfull.com
Problem Solving in Data Structures & Algorithms Using C
First Edition Jain
https://textbookfull.com/product/problem-solving-in-data-structures-
algorithms-using-c-first-edition-jain/
textboxfull.com
https://textbookfull.com/product/problem-solving-in-data-structures-
algorithms-using-c-programming-interview-guide-1st-edition-hemant-
jain/
textboxfull.com
https://textbookfull.com/product/problem-solving-in-data-structures-
algorithms-using-c-programming-interview-guide-first-edition-hemant-
jain/
textboxfull.com
Publishers at Scrivener
Martin Scrivener (martin@scrivenerpublishing.com)
Phillip Carmical (pcarmical@scrivenerpublishing.com)
Data Structure
and Algorithms Using C++
A Practical Implementation
Edited by
Sachi Nandan Mohanty
ICFAI Foundation For Higher Education, Hyderabad, India
and
Pabitra Kumar Tripathy
Kalam Institute of Technology, Berhampur, India
This edition first published 2021 by John Wiley & Sons, Inc., 111 River Street, Hoboken, NJ 07030, USA
and Scrivener Publishing LLC, 100 Cummings Center, Suite 541J, Beverly, MA 01915, USA
© 2021 Scrivener Publishing LLC
For more information about Scrivener publications please visit www.scrivenerpublishing.com.
All rights reserved. No part of this publication may be reproduced, stored in a retrieval system, or
transmitted, in any form or by any means, electronic, mechanical, photocopying, recording, or other-
wise, except as permitted by law. Advice on how to obtain permission to reuse material from this title
is available at http://www.wiley.com/go/permissions.
For details of our global editorial offices, customer services, and more information about Wiley prod-
ucts visit us at www.wiley.com.
ISBN 978-1-119-75054-3
Set in size of 11pt and Minion Pro by Manila Typesetting Company, Makati, Philippines
10 9 8 7 6 5 4 3 2 1
Contents
Preface xi
1 Introduction to Data Structure 1
1.1 Definition and Use of Data Structure 1
1.2 Types of Data Structure 2
1.3 Algorithm 3
1.4 Complexity of an Algorithm 6
1.5 Efficiency of an Algorithm 7
1.6 Asymptotic Notations 8
1.7 How to Determine Complexities 9
1.8 Questions 13
2 Review of Concepts of ‘C++’ 15
2.1 Array 15
2.1.1 One-Dimensional Array 16
2.1.2 Multi-Dimensional Array 17
2.1.3 String Handling 20
2.2 Function 26
2.2.1 User Defined Functions 26
2.2.2 Construction of a Function 27
2.2.3 Actual Argument and Formal Argument 31
2.2.4 Call by Value and Call by Reference 32
2.2.5 Default Values for Parameters 34
2.2.6 Storage Class Specifiers 35
2.3 Pointer 37
2.3.1 Declaration of a Pointer 37
2.3.2 Initialization of a Pointer 37
2.3.3 Arithmetic With Pointer 38
2.3.4 Passing of a Pointer to Function 39
2.3.5 Returning of a Pointer by Function 40
2.3.6 C++ Null Pointer 41
v
vi Contents
2.4 Structure 42
2.4.1 The typedef Keyword 46
2.5 Questions 47
3 Sparse Matrix 49
3.1 What is Sparse Matrix 49
3.2 Sparse Matrix Representations 49
3.3 Algorithm to Represent the Sparse Matrix 51
3.4 Programs Related to Sparse Matrix 52
3.5 Why to Use Sparse Matrix Instead of Simple Matrix? 56
3.6 Drawbacks of Sparse Matrix 57
3.7 Sparse Matrix and Machine Learning 57
3.8 Questions 58
4 Concepts of Class 59
4.1 Introduction to CLASS 59
4.2 Access Specifiers in C++ 60
4.3 Declaration of Class 60
4.4 Some Manipulator Used In C++ 62
4.5 Defining the Member Functions Outside of the Class 64
4.6 Array of Objects 64
4.7 Pointer to Object 66
4.8 Inline Member Function 67
4.9 Friend Function 69
4.9.1 Simple Friend Function 69
4.9.2 Friend With Inline Substitution 70
4.9.3 Granting Friendship to Another Class
(Friend Class) 71
4.9.4 More Than One Class Having the Same
Friend Function 73
4.10 Static Data Member and Member Functions 75
4.11 Constructor and Destructor 78
4.11.1 Constructor 78
4.11.1.1 Empty Constructor 79
4.11.1.2 Default Constructor 79
4.11.1.3 Parameterized Constructors 80
4.11.1.4 Copy Constructor 81
4.11.2 Destructor 83
4.12 Dynamic Memory Allocation 84
4.13 This Pointer 86
4.14 Class Within Class 87
4.15 Questions 89
Contents vii
5 Stack 91
5.1 STACK 91
5.2 Operations Performed With STACK 91
5.3 ALGORITHMS 93
5.4 Applications of STACK 96
5.5 Programming Implementations of STACK 106
5.6 Questions 126
6 Queue 129
6.1 Queue 129
6.2 Types of Queue 129
6.3 Linear Queue 129
6.4 Circular Queue 134
6.5 Double Ended Queue 138
6.6 Priority Queue 139
6.7 Programs 142
6.8 Questions 165
7 Linked List 167
7.1 Why Use Linked List? 167
7.2 Types of Link List 167
7.3 Single Link List 168
7.4 Programs Related to Single Linked List 177
7.4.1 /* Creation of a Linked List */ 177
7.4.2 /* Insert a Node Into a Simple Linked List at
the Beginning */ 178
7.4.3 /* Insert a Node Into a Simple Linked List at
the End of the List */ 180
7.4.4 /* Insert a Node Into a Simple Linked List
When the Node Is Known */ 182
7.4.5 /* Insert a Node Into a Simple Linked List
Information Is Known and Put After Some
Specified Node */ 184
7.4.6 /* Deleting the First Node From a Simple
Linked List */ 187
7.4.7 /* Deleting the Last Node From a Simple
Linked List */ 189
7.4.8 /* Deleting a Node From a Simple Linked
List When Node Number Is Known */ 191
7.4.9 Deleting a Node From a Simple Linked List
When Information of a Node Is Given 193
viii Contents
11 Hashing 391
11.1 Hash Functions 391
11.2 Collisions 393
11.3 Collision Resolution Methods 393
11.4 Clustering 394
11.5 Questions 395
Index 397
Preface
Welcome to the first edition of Data Structures and Algorithms Using C++.
A data structure is the logical or mathematical arrangement of data in
memory. To be effective, data has to be organized in a manner that adds to
the efficiency of an algorithm and also describe the relationships between
these data items and the operations that can be performed on these items.
The choice of appropriate data structures and algorithms forms the funda-
mental step in the design of an efficient program. Thus, a deep understand-
ing of data structure concepts is essential for students who wish to work
on the design and implementation of system software written in C++, an
object-oriented programming language that has gained popularity in both
academia and industry. Therefore, this book was developed to provide
comprehensive and logical coverage of data structures like stacks, queues,
linked lists, trees and graphs, which makes it an excellent choice for learn-
ing data structures. The objective of the book is to introduce the concepts
of data structures and apply these concepts in real-life problem solving.
Most of the examples presented resulted from student interaction in the
classroom. This book utilizes a systematic approach wherein the design of
each of the data structures is followed by algorithms of different operations
that can be performed on them and the analysis of these algorithms in
terms of their running times.
This book was designed to serve as a textbook for undergraduate engi-
neering students across all disciplines and postgraduate level courses in
computer applications. Young researchers working on efficient data storage
and related applications will also find it to be a helpful reference source to
guide them in the newly established techniques of this rapidly growing
research field.
xi
1
Introduction to Data Structure
• Organization of data
• Accessing methods
• Degree of associativity
• Processing alternatives for information
The data structures are the building blocks of a program and hence the
selection of a particular data structure stresses on
Sachi Nandan Mohanty and Pabitra Kumar Tripathy. Data Structure and Algorithms Using C++:
A Practical Implementation, (1–14) © 2021 Scrivener Publishing LLC
1
2 Data Structure and Algorithms Using C++
DATA STRUCTURE
• Traversing
• Insertion
• Deletion
• Merging
• Sorting
• Searching
Introduction to Data Structure 3
1.3 Algorithm
The step by step procedure to solve a problem is known as the ALGORITHM.
An algorithm is a well-organized, pre-arranged, and defined computational
module that receives some values or set of values as input and provides a
single or set of values as out put. These well-defined computational steps
are arranged in sequence, which processes the given input into output.
An algorithm is said to be accurate and truthful only when it provides
the exact wanted output.
The efficiency of an algorithm depends on the time and space complex-
ities. The complexity of an algorithm is the function which gives the run-
ning time and/or space in terms of the input size.
Ex :
5.23 = 5 5.23 =6
4 Data Structure and Algorithms Using C++
Remainder Function
To find the remainder “mod” function is being used as
A mod B
Summation Symbol
To add a series of number as a1+ a2 + a3 +…………+ an the
symbol Σ is used
n
Σ ai
i=1
Factorial of a Number
The product of the positive integers from 1 to n is known as
the factorial of n and it is denoted as n!.
0! = 1
Algorithemic Notations
While writing the algorithm the comments are provided with in [ ].
The assignment should use the symbol “: =” instead of “=”
For Input use Read : variable name
For output use write : message/variable name
The control structures can also be allowed to use inside an algorithm but
their way of approaching will be some what different as
Simple If
If condition, then:
Statements
[end of if structure]
Introduction to Data Structure 5
If…else
If condition, then:
Statements
Else :
Statements
[end of if structure]
If…else ladder
If condition1, then:
Statements
Else If condition2, then:
Statements
Else If condition3, then:
Statements
…………………………………………
…………………………………………
…………………………………………
Else If conditionN, then:
Statements
Else:
Statements
[end of if structure]
LOOPING CONSTRUCT
Repeat for var = start_value to end_value by
step_value
Statements
[end of loop]
OUTPUT
1 3 5 7 9
6 Data Structure and Algorithms Using C++
Space Complexity
The space complexity of a program is the amount of memory it needs to
run to completion. The space needed by a program is the sum of the fol-
lowing components:
• A fixed part that includes space for the code, space for sim-
ple variables and fixed size component variables, space for
constants, etc.
• A variable part that consists of the space needed by com-
ponent variables whose size is dependent on the particular
problem instance being solved, and the stack space used by
recursive procedures.
Time Complexity
The time complexity of a program is the amount of computer time it needs
to run to completion. The time complexity is of two types such as
• Compilation time
• Runtime
Suppose space is fixed for one algorithm then only run time will be con-
sidered for obtaining the complexity of algorithm, these are
• Best case
• Worst case
• Average case
Best Case
Generally, most of the algorithms behave sometimes in best case. In this
case, algorithm searches the element for the first time by itself.
For example: In linear search, if it finds the element for the first time by
itself, then it behaves as the best case. Best case takes shortest time to exe-
cute, as it causes the algorithms to do the least amount of work.
Worst Case
In worst case, we find the element at the end or when searching of elements
fails. This could involve comparing the key to each list value for a total of
N comparisons.
For example in linear search suppose the element for which algorithm
is searching is the last element of array or it is not available in array then
algorithm behaves as worst case.
Average Case
Analyzing the average case behavior algorithm is a little bit complex than
the best case and worst case. Here, we take the probability with a list of
data. Average case of algorithm should be the average number of steps but
since data can be at any place, so finding exact behavior of algorithm is
difficult. As the volume of data increases, the average case of algorithm
behaves like the worst case of algorithm.
Introduction
An important question is: How efficient is an algorithm or piece of code?
Efficiency covers lots of resources, including:
CPU (time) usage
Memory usage
Disk usage
Network usage
Introduction to Data Structure 9
All are important but we will mostly talk about CPU time
Be careful to differentiate between:
Note: As an example,
O(1) refers to constant time.
O(n) indicates linear time;
O(nk) (k fixed) refers to polynomial time;
O(log n) is called logarithmic time;
O(2n) refers to exponential time, etc.
n² + 3n + 4 is O(n²), since n² + 3n + 4 < 2n² for all n > 10. Strictly speaking,
3n + 4 is O(n²), too, but big-O notation is often misused to mean equal to
rather than less than.
1. Sequence of statements
statement 1;
statement 2;
...
statement k;
10 Data Structure and Algorithms Using C++
The outer loop executes N times. Every time the outer loop
executes, the inner loop executes M times. As a result, the
statements in the inner loop execute a total of N * M times.
Thus, the complexity is O(N * M). In a common special case
Introduction to Data Structure 11
Examples
Q1. What is the worst-case complexity of the each of the following code
fragments?
Answer: Th
e first loop is O(N) and the second loop is O(M). Since you
do not know which is bigger, you say this is O(N+M). This can
also be written as O(max(N,M)). In the case where the second
loop goes to N instead of M the complexity is O(N). You can
see this from either expression above. O(N+M) becomes O(2N)
and when you drop the constant it is O(N). O(max(N,M))
becomes O(max(N,N)) which is O(N).
12 Data Structure and Algorithms Using C++
Q2. How would the complexity change if the second loop went to N
instead of M?
A nested loop followed by a non-nested loop:
for (i = 0; i < N; i++) {
for (j = 0; j < N; j++) {
sequence of statements
}
}
for (k = 0; k < N; k++) {
sequence of statements
}
Answer: Th
e first set of nested loops is O(N2) and the second loop is
O(N). This is O(max(N2,N)) which is O(N2).
Q3. A nested loop in which the number of times the inner loop executes
depends on the value of the outer loop index:
for (i = 0; i < N; i++) {
for (j = i; j < N; j++) {
sequence of statements
}
}
Answer: W
hen i is 0 the inner loop executes N times. When i is 1 the
inner loop executes N-1 times. In the last iteration of the outer
loop when i is N-1 the inner loop executes 1 time. The number
of times the inner loop statements execute is N + N-1 + ... + 2 +
1. This sum is N(N+1)/2 and gives O(N2).
Q4. For each of the following loops with a method call, determine the
overall complexity. As above, assume that method f takes constant time,
and that method g takes time linear in the value of its parameter.
Answer: a. E
ach call to f(j) is O(1). The loop executes N times so it is N x
O(1) or O(N).
b. The first time the loop executes j is 0 and g(0) takes “no oper-
ations.” The next time j is 1 and g(1) takes 1 operations. The
last time the loop executes j is N-1 and g(N-1) takes N-1 oper-
ations. The total work is the sum of the first N-1 numbers and
is O(N2).
Introduction to Data Structure 13
c. Each time through the loop g(k) takes k operations and the
loop executes N times. Since you do not know the relative size
of k and N, the overall complexity is O(N x k).
1.8 Questions
1. What is data structure?
2. What are the types of operations that can be performed with
data structure?
3. What is asymptotic notation and why is this used?
4. What is complexity and its type?
5. Find the complexity of 3n2 + 5n.
6. Distinguish between linear and non-linear data structure.
7. Is it necessary is use data structure in every field? Justify
your answer.
2
Review of Concepts of ‘C++’
2.1 Array
Whenever we want to store some values then we have to take the help of a
variable, and for this we must have to declare it before its use. If we want
to store the details of a student so for this purpose we have to declare the
variables as
char name [20], add[30] ;
int roll, age, regdno ;
float total, avg ;
etc……
for a individual student.
If we want to store the details of more than one student than we have to
declare a huge amount of variables and which are too much difficult to access
it. I.e/ the programs length will increased too faster. So it will be better to
declare the variables in a group. I.e/ name variable will be used for more than
one student, roll variable will be used for more than one student, etc.
So to declare the variable of same kind in a group is known as the Array
and the concept of array is used for this purpose only.
Types of Array:
The arrays can be further classified into two broad categories such as:
Sachi Nandan Mohanty and Pabitra Kumar Tripathy. Data Structure and Algorithms Using C++:
A Practical Implementation, (15–48) © 2021 Scrivener Publishing LLC
15
16 Data Structure and Algorithms Using C++
Syntax :
Data type variable_name[bound] ;
The data type may be one of the data types that we are studied. The
variable name is also same as the normal variable_name but the bound is
the number which will further specify that how much variables you want
to combine into a single unit.
Ex : int roll[15];
In the above example roll is an array 15 variables whose capacity is to
store the roll_number of 15 students.
And the individual variables are
roll[0] , roll[1], roll[2], roll[3] ,……………..,roll[14]
Initialization:
The array is also initialized just like other normal variable except that
we have to pass a group of elements with in a chain bracket separated by
commas.
Ex : int x[5]= { 24,23,5,67,897 } ;
In the above statement x[0] = 24, x[1] = 23, x[2]=5, x[3]=67,x[4]=897
Review of Concepts of ‘C++’ 17
#include<iostream.h>
void main()
{
int x[10],i;
;
cout<<“\nEnter 10 elements into the array”;
for(i=0 ; i<10; i++)
cin>>x[i];
cout<<“\n THE ENTERED ARRAY ELEMENTS ARE :”;
for(i=0 ; i<10; i++)
cout<<” “<<x[i];
}
OUTPUT
Enter 10 elements into the array
12
36
89
54
6
125
35
87
49
6
THE ENTERED ARRAY ELEMENTS ARE : 12 36
89 54 6 125 35 87 49 6
But we do use the two dimensional array to handle the matrix opera-
tions. The two dimensional array having two boundary specifications.
SYNTAX
data_type variable_name[boundary1][boundary2];
Ex : int x[3][4];
In the above example x is the two dimensional array which has the capacity
to store (3x4) 12 elements. The individual number of elements are
x[0][0] x[0][1] x[0][2] x[0][3]
x[1][0] x[1][1] x[1][2] x[1][3]
x[2][0] x[2][1] x[2][2] x[2][3]
INITIALIZATION
The array can also be initialized as like one dimensional array.
Ex: int x[3][4] = {{3,5,7,8}, {45,12,34,3}, {56,89,56,23}};
OR
int x[3][4] = {3,5,7,8,45,12,34,3,56,89,56,23};
After the above initialization
x[0][0]=3 x[0][1]=5 x[0][2]=7 x[0][3]=8
x[1][0]=45 x[1][1]=12 x[1][2]=34 x[1][3]=3
x[2][0]=56 x[2][1]=89 x[2][2]=56 x[2][3]=23
Our website is not just a platform for buying books, but a bridge
connecting readers to the timeless values of culture and wisdom. With
an elegant, user-friendly interface and an intelligent search system,
we are committed to providing a quick and convenient shopping
experience. Additionally, our special promotions and home delivery
services ensure that you save time and fully enjoy the joy of reading.
textbookfull.com