Md. Rafiqul Islam, Ph.D
M. A. Mottalib, Ph.DSecond Edition
Data Structures Fundamentals
Md. Rafiqul Islam
Dept. of Computer
Science & Engineering
Khulna University
Khulna
Email:
[email protected]
Website: www.cseku.ac.bd
M. A. Mottalib
Dept. of Computer Science &
Information Technology (CIT)
Islamic University of Technology (IUT)
Gazipur
Email;
[email protected]
Website: www-iutoic-dhaka.edu
Islamic University of Technology (IUT)
Board Bazar, Gazipur-1704, Bangladeshsion, Advisory Services and Publications (REASP)
Islamic U, sity of Technology (IUT)
‘A subsidiary organ of Organisation of Islamic Cooperation (0Ic)
Board Bazar, Gazipur 1704, Bangladesh
Telephone; +8802-9291254~59 Ext. 3215, Fax: +8802- 9291260
E-mail: reaspy dhakacdu,
[email protected]
Website: www.iutoic-dhaka.edu
Year of Publication (Ist Edition) : 2009
Year of Publication (2nd Edition) : 2011
© All rights are reserved by the authors and publisher. No part of
this book may be reproduced in any form by mimeograph or any
other means without permission in writing from the publisher and
authors.
ISBN: 978-984-33-0384-4
Price; Tk. 300
US$ 12
Contact for Ordering:
Librarian
Islamic University of Technology (IUT)
Board Bazar, Gazipur 1704, Bangladesh
Telephone; +8802-9291254~59 Ext 3235, Fax: +8802- 9291260
Esmail —:
[email protected], cit(@iut-dhaks.cdu
Cover page & Graphies : A. K. M. Shahidur Rahman
Sr. Assistant Secretary
CIT Department, UT
Printed by : Mis Nishan Computer & Printing
38, Bangla Bazar (2™ Floor)
Sadar Ghat, Dhaka
Dedicated to my father and father-in-law who died while I was
doing my PhD.
--- Md. Rafiqul Islam
Dedicated to my beloved eldest son Zisan Mashroor Hrid, my
father and father-in-law who have left this world for good,
-—- Md, Abdul Moitalibee
Message
[am pleased to note that the first edition of the text book Data Structures
Fundamentals has already been exhausted. It proves that the book had good
demand among the students. | appreciate that realizing the demand of the
book the authors have revised it, updated it and steps have been taken for
bringing out a second edition. I congratulate the authors for their meaningful
initiative.
At this point, it is worth mentioning that TUT is very conscious about quality
and it gives particular importance on the quality of education. Our efforts
are always directed towards continuous updating of syllabi by including, new
topics to familiarize the students with the contemporary knowledge. T am
confident that the authors given due consideration to this idea,
Although the book was reviewed before the publication of the first edition,
there would always remain some scope for improving its quality both in
terms of its contents and manner of expression. In my view, the best way to
address such problems is to get comments from the users of the book. As
such I hope that the authors have tried to get the comments of the users from.
all possible sources and all constructive suggestions have been incorporated
in this edition. Still there might be some points left, which could be: further
developed. T would therefore, invite the future users to come up with their
views and contribute for further improvement of the future editions.
Finally, I sincerely hope that this edition will be more acceptable to the users
than the last edition; it will be more useful to them and meet most of their
demands. Under the situation, I will also feel that the cooperation extended
by IUT in publishing the book has been worthwhile.
BoP
Prof. Dr. M, Imtiaz Hossain
Vice-Chancellor, UTwe
been described! and written in The alporidums writen hore are very easy and these wat he
That means,
students will get introductory idea on analysis oF algorithms from here, At the end of each
‘chapter the book is provides with questions,
In this second sition we have done nccessury corrections of the first edition anu
modifications have been done in chapeer 4 (linked fist), chapter 7 (tree) arsd chapter 10
Cashing Each chapter except one is provided with the problem seq for the practical (1ab)
classes
{a book is suitable forthe undergraduate student, who need to sindy data structures as a
foundation course. The book is required {or the curricula of Bachelor of Computer Selence
god Engineering (CSE). Diploma, Higher Diplomas arc Postgraduate Diploma. in
Computer Science/Informiation Technology related courses The book in very useful to the
Students who have the foundation on CAC
The authors are indebeed to Mr. H. M, Meliedi Hasan and Pritish Kumar Ray, who help us
lot to write and prepare some part of the guanuseript of this book, We wish to thank Mr.
Md. Jahidul Islam, Kasif Nizana Khan and $. M. Mohidu! Islam (who were the students of
Ne Science & I (CI) Dept, TUT for thele help ta Preparing the
e 6 ard Appsndix B an CH respectively. We an alo teeny ©
rare fewer of the manuscript ofthe book, for their sopaestnna ct fanproving the
‘material and organization of the hook,
Dr. Md. Rafiqui stam
Dr. M.A. Mortality
TABLE OF CONTENTS
CHAPTER ONE: BACKGROUND
LI Data Structure
1.2 Operations on Data Structure
13 Algorithm
14 Program
15 Importance of Data Structure
1.6 Complexity of Algorithm
‘CHAPTER TWO: ARRAY
2.1 Definition
2.2 One Dimensional Array ©
2.2.1 Definition
2.2.2 Store an element into an array
2.2.3 Read (retrieve) a value (element) from an
array
2.24 Code in C/C++ for storing data in an array
2.3 Two Dimensional Array J
23.1 Definition
2.3.2 Store and retrieve values in and from array
233° Two dimensional array representation in
memory
23.4 Location of an clement of a two-
dimensional array
CHAPTER THREE: RECORD
3.1 Definition
3.2 Difference between an array and a record
‘CHAPTER FOUR: LINKED LIST
4.1 Definition
4.1 Node declaration and stare data in a node
(in C/C++)
4.1.2 Create a new node
Rune wee
Sea
al
31
3242
43
44
45
46
41.6
Doubly Linked List
4.21
4.22
4.23
424
4.25
42.6
‘Create a linked list
Locate or search a node of a linked list
Insert a node into a list
Deletion of a particular node
Definition
Declare a node of a doubly linked list
Create a node
Create a doubly linked list
Insertion of a node into a doubly linked list
Deletion of a node from a doubly link list
XOR link list
Circular linked list
441
Create a cireular linked list
Difference between array and linked list
Comparison of operations using array and linked
list
CHAPTER FIVE: STACK
Definition
Array based stack
Sa
42
33
54
S21
5.22
Push Operation
Pop Operation
Link based stack
S31
53.2
5.33
‘Create a link based stack
Add an clement (o the stack (Push
‘aperation)
Deletion of an item (Pop operation)
Applications of Stack
5.4.1
5.4.2
54.3
Checking the validity of an arithmetic
expression
Converting an infix arithmetic expression
ta its postfix form
Evaluating a postfix expression
S&888e88
a7
47
49
S2eeanu
65
69
dag
74
CHAPTER SIX: QUEUE
61
62
Array based queue
6.1.1 Addition of an clement in an array based
queue
6.1.2 Deletion of an clement from a queue
6.13 Draw back of array implementation of
queue
‘Link based queue
6.2.1 Create a link based queue
6.2.2 Add anew nade to linked queue
62.3 Delete a node from a linked queue
CHAPTER SEVEN: TREE.
Wd
W2
Binary Tree
7.11 Parent-Child Relationship
7.12 Traversal technique of a binary tree
7.1.2.1 Pre-order traversal method
7.12.2 In-order traversal method.
7.12.3 Pest-order traversal method
Binary Search Tree (BST)
7.2.1 Searching a particular node value of BST
7.2.2 Add a node toa BST
7.2.3 Delete a node from BST
Heap
7.3.1 Heap Creation
7.3.2 Deletion of maximum from a max-heap
73.3 Heap sort
7.3.4 Priority Queue
81
82
8s
228
iiiCHAPTER EIGHT: GRAPH
B1
82
8.3
ae
Basics of Graph
Graph Traversal (Search) Methods
8.2.1 Breadth First Search (BFS)
8.2.2 Depth First Search (DFS)
8.23 Implementation of DFS & BFS using
different data structure of graph
Minimum cost spanning tree
8.3.1 Prim’s Algorithm
8.3.2 Kruskal’s Algorithm
Single source shortest paths prablem
CHAPTER NINE: SEARCHING AND SORTING
On
92
93
Searching
9.1.1 Linear Searching
9.1.1.1 Complexity for linear searching
9.1.2 Binary Searching
9.1.2.1 Process
9.1.2.2 Number of comparison to search
the target clement
Sorting,
9.2.1 Internal sorting
9.2.2 External sorting
9.2.3 Classes of internal sorting
9.24 Selection sort
9.2.4.1 Complexity af seleetion sort
9.2.5 Insertion sort
9.2.5.1 Complexity of insertion sart
9.2.6 Bubble sort
9.2.6.1 Complexity of bubble sort
9.2.7 Merge Sort
9.2.7.1 Analysis of merge sort
9.2.8 Quick Sort
9.2.8.1 Analysis of quick sort
External Sorting
145
145
146
147
147
148
150
150
150
150
151
152
CHAPTER TEN: HASHING
10.1 Hashing
10.2 Hash function
10.3
10.2.1 Division method
10.2.2 Mid-square method
10.23 Folding methods
Hash collision
10.3.1 Linear probing method
10.3.2 Quadratic probing method
10.3.3. Random probing method
10.3.4 Double hashing method
10.3.5 Rehashing method
10.3.6 Chaining method
APPENDIX-A: DATA STRUCTURES IN JAVA
Id
11,2
3
4
115
11.6
Array
ALLL Creating an array
11.1.2 Accessing array elements
Stacks
11.2.1 Java code for a stack
‘Queues
11.3.1 Acircnlar queue
11.3.2. Wrapping around
11.3.3 Java code for a queue
A Simple linked list
11.4.1 The Link class
114.2 The LinkList class
Recursion: Finding factorials
Binary trees
11.6.1 The Node class
11.6.2 The TreeApp class
11.6.3 Searching for a node
11.64 Inserting a node
11.6.5 Traversing the tree
11.6.6 Deleting a node
172
172
1733
173
174
174
175
181
189APPENDIX-B: DATY
121 Arrays
12.1.1 One dimensional array
12.1.2 Two dimensional array
12.1.3 Multi dimensional array
12.14 Jagged Array
12.15 BitArray
12.1.6: ArrayList
12.2 Pointers
12.3 Linked list
124 Stacks
125 Queue
12.6 Hashing
12.7 Sorting
12.7.1 Bubble sort
12.7.2, Quick sort
12.7.3. Merge sort
12.7.4 Insertion sort
12.7.8 Sorted list
12.8 Searching
12.8.1 Binary searching
12.9 Ser
1240 Trees
1201 Graph
STRUCTURE IN C SHARP (Ca)
AEPPSDIX-C; PRACTICAL ISSUES
Mt ARRAY
142 WINKED LIST
IMAI Creation of linked list
W422 Search a node from a linked list
124 Delete a particular node from a linked list
1924 Arrange data of a linked list
tea oi
ian
| LINKED LIST
ion of a double tinked list
222
245
249
252
256
267
273
273
276
278
282
285
239
289
13.4 STACK
13.4.1 Creation of a linked based stack
13.5 QUEUE
13.5.1 Creation of a linked based queue
13.6 TREE
13.6.1 Creation of a trec (Binary Search Tree)
13.7 GRAPH
13.8 SORTING
13.9 SEARCHING
13.10 HASHING
BIBLIOGRAPHY
INDEX
294
3CHAPTER ONE
BACKGROUND
OBJECTIVES: |
Identify data structure
Identify algorithm:
Idemify program:
Deseribe the importance of data structure
Identify complexity of algorithm
V¥¥¥Y¥
1.1 Data Structure
Jn "Data Structure" there are two words, one is data and another is structure,
Data means raw facts or information that can be processed to get results or
products.
Elementary items constitute @ unit and that unit may be considered as a
structure. As for example, some clementary items like hand, leg, eye, ear,
nose, bone and some others constitute a human body. So, human body is a
structure. Similarly some elementary items like pieces of wood, iron, raxine
ete may constitute a chair, which is also a structure, A structure may be
‘treated as a frame or proforma where we organize some clementary items in
different ways. Like structures in our environment, data structure is also
‘constituted with some elementary data items.
Data structure is a structure or unit where we organize elementary data items
in different ways and there exists structural relationship among the items.
‘That means, a data structure is a mtcans of structural relationships of
elementary data items for storing and retrieving data in computer's memory.
‘Usually elementary data items are the efemencs of a data structure. However,
a data structure may be an element of another data structure. In other
words a data stricture may contain another data structure.
Example of Data Structures: Array, Linked List, Stack, Queue, Tree, Graph,
Hash Table etc. 5
‘Types of elementary data item: Character, Integer, Floating point numbers
etc.Data Structires Fundamentals
Expressions of
below:
mentary data in C/C++ programming language are shown
Elementary data item sion in C/C++
Character char
Integer int
Floating paint number float
1.2 Operations on Data Structure
We can also perform some operations on data structure such as insertion
{addition}, deletion (access), searching (locate), sorting, merging ete.
1.3 Algorithm
It is a set or sequence of instructions (steps) that can be followed to perform
a task (problem), To write an algorithm we do not strictly follow grammar of
any particular programming language. However its language may be near to
a programming language. Each and every algorithm can be divided into
three sections, First section is input section, where we show which data
elements arc to be given. The second section is very important one, which is
operational or processing section. Here we have to do all necessary
operations, such as computation, taking decision, calling other procedure
(algorithm) etc. The third section is ouput, where we display the result
found from the second section.
1.4 Program
A program is a set or sequence of instructions of any programming language
that can be followed to perform a particular task. For a particular problem, at
first we may write an algorithm then the algorithm may be converted into a
program, In a program usually we use a lange amount of data, Most of the
cascs these data are not elementary items, where exists structural relationship
between elementary data items. So, the program uses data structure(s). Lil
an algorithm, a program can be divided into three sections such as input
section, processing section and output section,
Chap.-1 Background 3
1.5 Importance of Data Structure
‘Computer science and computer engineering deal with two jargons which are
software and hardware. Without software, hardware (electrical, mechanical,
electronic parts of computer that we sce and touch) is useless. So, study of
software is very important in computer science, and software consists of
programs, which use different types of data. In a program we not only use
elementary data items but also use different types of organized data. In other
words we use data structure in a program. As we know we write programs to
solve problems. That means to solve problems we have to use data
structures. The different data structures give us different types of facilities. If
we need to store data in such a way that we have to retrieve data directly
irrespective of their storage location, we can get this facility using one type
of data structure such as array gives us such facility. In some cases, instead
of direct access, we may need efficient use of memory and this can be
performed using /inked list. In our daily life we handle list of data such as list
of students, list of customers, list of employees etc. However cach of these
entities (student, customer, employec etc.) may have different attributes. As
for example, a student has roll number, name, marks attributes and these are
different in types. But, how to organize them so that we can handle different
types of data as a unit. We can get this facility from record or structure,
Thus importance of data structures is many folds in storing, accessing,
arranging data. By achieving the knowledge of data structure we can use
different types of data in programs that are used to solve various problems
required in our life. Without knowledge of data structures we are not be able
to solve problems where we must use them. In programming language there
are provisions to use different types of data structures, so that we can
organize data in different ways and solve the problem properly, In fact, we
can optimize the amount of memory by using proper data types. In other
words, without knowledge of data structures we will not be able to write
program properly, hence we will not be able to solve problem. Therefore, for
the students and teachers of computer science and enginecring the
knowledge of data structure is very much essential.
Forma-2Data Structures Fundamentals 4
1.6 Complexity of Algorithm
There are (wo types of complexities: One is time complexity and another is
space complexity.
Time complexity: This complexity is related to execution time of the
algorithm or a program. It depends on the number of element (item)
comparisons and number of element movement (movement of data from one
place to another). However, the complexity of the most of the algorithms
described here related to the number of element comparisons, So, the
complexity of the algorithm is computed with respect to the total number of
clement (item) comparisons needed for the algorithm.
Space complexity: This complexity is related to space (memory) needs in
the main memory for the data used to implement the algorithm for solving
any problem. If there m data items used in an algorithm, the space complexity
of the algorithm will be proportional to n.
The complexity of an algorithm (either time complexity or space
complexity) is represented using asymptotic notations, One of the asymptotic
notations is O (big-oh) notation. In general we write ‘T(n) = O(g(n)) if there
are positive constants C and n. Such that T(n) Scg(n) for all nn 2 ng. In
words the value of T(n) always lies on or below eg(n) forn > ne, In this
book we have represented the complexity using O notation. Big-oh (O)
notation is also called upper bound of the complexity. If we get the total
number of element comparisons is 4° — ‘4 n, then we can write it as O
(7), Since (M4 n° - 4 n) < ni, Similarly 10n? + 4n + 2 = © (n?). Since
10n?+ 4n+2 <1 In’,
Table-1: Shows the advantages and disadvantages of the various data
structures:
|___Advantages__ [Disadvantages
Quick insertion, very fast [Slow search, slow
access if index known deletion, fixed size
‘Slow search
Provides last-in, first-out | Slow access to other
LIFO) access items:
Provides first-in, —_first- | Slow access to other
oul(FIFO) access items
Chap.-1 Back,
Data Structure
Quick search, insertion, | Deletion
deletion (if tree remains | complex
balanced)
slow if key not known,
inefficient memory
Fast insertion, deletion Slow access to other
eae models real-world situations | Some algorithms are
slow and complex
Summary:
Data structure is a structure or unit where we organize date items
in different ways and there exists structural relationships of them (data
items). ;
Algorithm is a set. or sequence of instructions (steps) that can be
followed to perform a particular task (problem). ;
Program is a set or sequence of instructions of a particular
programming language that can be followed to perform a particular task.
Data structure is the most important building block of a program. It
facilitates organized storage and easy retrieval of data.
There are two types of complexity-the time complexity and the
Space complexity. Time complexity is related with the number of clement
comparisons and element movement. Space complexity is used to determine
the memory space usage and requirements for a particular problem.
known, Fast insertionET
Data Structures Fundamentals ‘ CHAPTER TWO
os ARRAY
‘What do you mean by data structure?
L
2. What are the objectives of learning data structure?
AX What are elementary data types? BIECTI
4. What do you mean by space complexity? oy Re
3” Define data structure. Give examples, year ds
6. State two complementary goals of the study of data structure. » — ee nee — ies
7. Data structure is & structure that may contain another data structure. : Rae in
Explain the statement with example, ; Sao aac
® Show data storing and accessing processes using two-
Define elementary data type and data structure.
‘What do you mean by a data structure? Explain the basic operations that
arc normally performed ona particular data structure,
10. Differentiate between atomic data type and structured data type.
IL. "What is the difference between an algorithm and a program?
y=
dimensional array
Describe the process of representation of two-dimensional array
in computer's memory
» Write algorithms using two-dimensional array
¥
ARRAY
2.1 Definition
An array is a finite set of same type of data items. In other words, it is a
collection of homogencous data items (elements). The elements of an array
are stored in successive memory locations. Any clement of an array is
referred by array name and index number (subscript). There may have many
dimensional arrays. But usually two types of array are widely used; such as
one dimensional (linear) array and two dimensional array.
2.2 One Dimensional Array
2.2.1 Definition
An array that can be represented by only one dimension such as row or
column and that holds finite number of same type of data items is called one
dimensional (linear) array.
diesieeS'- Ee ao: ie
i
aco] 9 | w [| ofl ales
* Figure-2.1: Graphical representation of one dimensional array.Data Structures Fundamentals &
Here 1, 2,3, ........., 10 are index number, and 0, 10, 12,... ... .... 39 are
data items or elements of the array and B is the array name. Symbolically an
element of the array is expressed as B, or B[i], which denotes ith element of
the array, B.
‘Thus B[4], B[9] denotes respectively the 4" element and the 9” clement of
the array, B.
The name of the array usually is a name constituted by one or more
characters. Thus array name may be A, 5, Stock, Array! cic. The clement of
an array may be number (integer or floating point number) or character.
Expression of one dimensional array in C/C™:
For integer array: int a[10)};
For character array: char b[30};
For floating point array: float c[10];
Figure-2.2: Declaration of Array in C/C™.
2.2.2 Store an clement into an array
5[4)= 19; it means 19 will be stored in the cell number 4 of the array of B in
the Figure-2.1. If there is any (previous) value that will be overwritten.
2.2.3 Read (retrieve) a value (element) from an array
x= B[6), it means the value of x will be 20, since the cell number 6 of the
aray, # contains 20 (see Figure-2.1).
The above expressions are as like as C/C++,
9
Chap-2 Array
2.2.4 Code in C/C++ for storing data in an array
int s[10];
for (= 0;8<10; ++2)
scanf (“%d", &x[i]);
‘We can store integer type of data to the array, x using above segment of
codes.
Code in C/C++ for reading data from an array and the data will be displayed
‘on the monitor's screen:
for (f=0; 1 <20; ++/)
printf (“%d", x{f));
ZA:
a ‘of elements, write an algorithm to store the list of elements
(qumbers) in an array and find out the largest element of the list.
Algorithm 2.1: Algorithm to search the largest clement of a list
1. Input: af 1...)
2. for(@é= 1,1 sn; i=i +1)
store data to x[/);
3, large = x{1);
4. for (i= 2; sn; i= 7 +1)
if [i] > large), large = xf]; that means if any element larger
than the previous upgrade large
5, Output: the largest number (print the value of large)
‘Comments: x is the array to store data and a is the size of the list. The above
code is as like as C/C++, but not exactly writen in C/C++. We shall follow
this style for other algorithms.Data Structures Fundamentals
Problem 2.2:
Given a linear array with data, find out a particular (specific) element of x
from the array. We do not know the index (cell) number where the element
has been stored.
Algorithm 2.2: Algorithm to search a particular element from a list
|. Input: A set of data in amay a, and variable x ie, the tanget
clement
ee
2. found =0
3. for (i= 1; 4 Sa;
(
if(@f] ==)
location = i, found = 1, break;
t
4. Output: if (found = = 1), print *FOUND" ‘message and location,
else print “NOT FOUND” message.
=i+1)
Problem 2.3;
Given a list of integers stored in a linear array. Find out the summations of
odd numbers and even numbers separately,
Solution: Given a list of integers, we have to find cut the odd numbers and
then we shall add those odd numbers, Similarly, we shall find out the even
numbers in the list and adding those numbers we shall get the summation of
even.
To store the results, we require two variables; sui_even and sum_odd.
Initially, values of these variables will be zero (0) and every time we find an
even number we shall add it to the swm_even and we find an odd number, we
shall add it to the sun 1_odd. If a number is divisible by 2 it is even, otherwise
odd.
‘
Chop.-2 Array ud
We have to start from the first number of the list. If it is even, it will be
added with the sum_even and if it is odd, it will be added with the sum_odd.
Similarly, we shall access whole list one by one and add them with either
sum_even (if'a number is even) or sum_odd (if'a number is odd).
Algorithm 2.3: Algorithm to find the: summations of even and odd muumbers
1. Input: An array and variables (to store the results of summations)
All .ati}, sum_odd = 0, sum_even = 0;
2, for(i= Ii suizitl)
{ ‘
if (4[J%2 == 0), sum_even = sum_even + A[i);
else sum_odd = sum_odd + A{i);
3. ae Summation of odd numbers (print sum_odd) and
summation of even nunibers (print sum_evert}
Comments: Here A is an array that holds a list of integers and w is the size
of the list. swm_odd, sum_even are two variables to store the summation of
‘odd numbers and the summation of even numbers respectively.
Problem 2.4:
Given a list of integers stored in a linear array, find out the summations of
numbers in odd indices and even indices separately.
Solution: This problem is similar to the problem 2.3, Here the difference is
that, we have to check whether the index is odd or even.
Algorithm 2.4: Algorithm to find the summations of even and odd indexed
numbers: :
1. Input: An array and variables (to store the results of summations)
Afl..n}, sum_odd = 0, sum_even = 0;
2 for (i= 1;i Sayi=i +1)
t
if (%2 = = 0), sum_even = sum_even + Ali];Data Structures Fundamentals 12
a
else sum_odd = sum_odd + Ui},
} ‘
3. Output: Summation of numbers in odd indices (print sum_odd)
and summation of numbers in even indices (print
suim_even)
‘Comments: Here A is an array that holds a list of integers and a is the size
of the list, swm_odd, sum_even are two variables to store the summation of
fumbers at odd positions and the summation of humbers at even positions
respectively,
Problem 2.5:
Given a list of integers stored ina linear array and a data element, insert the
element into the array at a given position.
Algorithm 2.5: Algorithm to insert an element into an array,
1 Input: An array 4{1...n), the position of insertion m and the data x.
2. Increase the size of the array, A[1... + 1]
3. for(i =m, 12m; i= 1-1) 3
Afi + 1) = Afi);
4. Alm] = x;
5. Output: The array, A with size w+ 1,
Comments: Here it is assumed that all the cells of the array, A contains data.
So the data from the positions m to n of A are copied (transferred) to the
Positions m+! to m+/ of the amay A. Now the Position m of the array A is
empty and the element to be inserted in placed at the position.
Problem 2.6:
Given a list of integers stored in a linear array, delete a data from a given
position of the array.
Algorithm 2.6: Algorithm to delete an element from an array.
1. Input: An array Af 1...0], and the position of deletion, m.
2. for (i= m; i< nz i= i+ 1)
4l)=aliriy
3. Output: The updated array, A,
Chop.-2 Array 3
Comments: Here the data of the positions m to n-f are overwritten by the
data of the positions m + J to n of the array, 4, Now the position n of the
array is empty.
Problem 2.7: ’
Given twa lincar arrays of integers, merge the two arrays into a single array.
Algorithm 2.7; Algorithm to merge two arrays.
1, Input: Two arrays A (1...) and A[1...n]
2. Take an array Mf[1... m +7] :
3. for (i= 1; i <= m;}= i +1)
Mii) = Ali)
4. for(i = 1, i<=n,0=i+ 1)
Mli+m) = B[i);
5. Output: The merged array, Af
‘Comments: Here the output array is M. For merging the data of the array, 4
are copicd to the positions J to m of Mf and the data of the array, # are copied
to the positions m + / tom +m of M,
2.3 Two Dimensional Array
23.1 Definition
Two dimensional array is an array that has two dimensions, such as row and
column, Total number of clements in a two dimensional array can be
calculated by multiplication of the number of rows and the number of
columns. If there are m rows and # columns, then the total number of
elements is m * », and m Xn is called the size of the array. Of course, the
data clements of the array will be same (ype. In mathematics, the two
dimensional array is called a matrix and in business it is called table. A two
dimensional array can be expressed as follows:
Ay or Ai, f] for 1 Si Sm and 1
marks{i){j]), min_mrk = marks{i,j};
} # end of the second loop
4. Compute the average marks of best three class tests.
avg_mirk{i}= (sum —min_mrk)/3;
} - lend of the first loop
5. Qutput: Average of best three class test marks, avg_mri{40];
‘Comments: Here marks{40, 4] is a two-dimensional aay that holds four
olass test marks for each of the 40 students-and avg_mrk{40) is an array to
‘store the computed average marks of best three class tests. sum is 1 variable
{0 store the summation of all (4) class test marks and min_mrk is a variable
{10 store the lowest mark of four class tests for each student.
44 first loop startsData Structures Fundamentals 18
Solution: First, we have to identify the boundary elements. In a two
dimensional array, elements of first column and the last column and the first
row and last row are the boundary elements as shown in the Figure-2.8,
Here the index, / represents the row number and represents the column:
number. When # is 1, the row is the first row and when # is m (where m
fepresents the number of rows in the array), the row is the last row.
Similarly, when j= 1, the column is the first column and the index of the last
column is j =». So, a number in a two-dimensional array is @ boundary
element if #= 1, i= m,j=lorj=n.
We shall start from the first number of the array. If it isa boundary element,
the number will be added to the sum (which is a variable to store the result
and initially it is set zero). We shall check every number whether it is a
boundary element or not, if the number is a boundary clement it will be
added to sum. Otherwise, we shall proceed with the next number of the list
(array) and continue the process to the end of the list.
Algorithm 2.8: Algorithm to find the summation of boundary elements .
1. Input: a two-dimensional array
ACL om, Lesa]
sum = 0;
2. Find cach boundary element
for (f= 1; i Sm; #=i +1)
for = 1yj sm; f= f+)
if G@= 1) F= 1 f= m [f= n), sum = sum + AGI)
(Boundary elements are those elements whose index /= 1 or j = 1, and those
whose index / = mi orj =) and add it with sum (previous result)]
3. Output: Print sum as the result of summation of boundary elements.
.
19
Chap.-2 Array
Array B[m][o] Index, i= 1
n=6
m=5
Index, j= 0
t Index, {= 1 ladex, i=
_ Boundary elements of ¢ two-dimensional array in a pictorial
view
‘Problem 2.9:
Given a two-dimensional array find out the summation of the diagonal
its of the array.
joluion: First, we have to identify the diagonal elements, A diagonal
¢lement is one, whose either row index and column index are equal or the
‘summation of row index and column index is equal to m-+/ where n is the
‘qumber of rows or columns (here, number of columns and number of rows
“are equal).
In the Figure-2.9, shaded elements are diagonal clements. The column
indices of all clements of the first diagonal (from the upper left comer to the
right comer) are equal to their corresponding row indices. On the other
in second diagonal (from the upper right comer to the lower left
ner} the summation of the row index and the column index ism + f forall
elements.
‘We shall start from the first number of the array and check, whether it is a
nal element or not. If it is a diagonal element, it will be added to the
‘gum, which is a variable initially set zero to store the result of summation of
diagonal elements. We shall advance to the next element and one by onc
‘we shall go through the whole list.
Af the value of n is an odd number, then the middle number of each of the
two diagonals will be common to both diagonals. So, this number will be
"added twice. So, this number should be subtracted from final summation
Forma-3
, 7Data Structures Fundamentals n
Faint atc i)
Note: For each time, to calculate the summation of all class test marks and to
identify the lowest class test mark of a particular student the variables sum.
and mtin_oirk are initialized within the loops,
Summary:
Array is a collection of homogeneous data items, The amay, which is
represented by only one dimension (row or column) called one
dimensional array, whereas an array represented by two dimensions such as
row and column is known as twe dimensional array,
Questions:
1, What is linear array? Explain with example,
2. Write an algorithm to find out a particular item from a given list of items
stored in a linear array.
3. Write an algorithm to insert an item in a particular position of an array,
4. Given a list of elements stored in an array, write an algorithm to find out
the largest clement from the array.
5. You are given an array of sorted data in ascending order. Write an
algorithm to rearrange the elements of the array in descending order
without using any sorting algorithm and extra data structure.
6. What is a linear array? Write an algorithm to delete an item from a
linear array. :
7. Define two-dimensional array.
8. Describe how a two-dimensional array can be stored in computer
memory. -
9. How address of a particular element of a two dimensional array can be
computed? Explain, ”
10. Write an algorithm to find out the summation of the diagonal elements
‘of a two dimensional array.
11. Given an array of size 35 x 40. The base’ address of the array is 1000.
Find the address of A[18)(32]. Write down the formula first, then
calculate,
12. Suppose there is an array A of size 40*30) The base address of the array
is 100. Calculate the address of A[23][15).
(Chap.-2 Array:
B
13. Given a two dimensional array with m * n size. Write an algorithm to
find out summation of the boundary elements, where no clement will be
added twice.
apa Dewcsib, wlseg 26 tw-liemetelona)-ereny a ~ceequiced to ago
programming or Algorithm.
15. Write an Algorithm to print out the following triangle.
1
id
45 6
7 8 3 Q
he tad 3 4 5
16. What is string? Write a procedure to count the number of a given
substring occurs in a given string.
Problems for Practical (Lab) Class
Array related problems . . ,
Problem 2-1: Write 2 program to enter 10 integers in a one dimensional
array and display (print) the data on the screen.
i i i find
Problem 2-2: Write a program to store 10 integers using an array and fire
‘out the summation and average of the numbers. Display the numbers, their
sum and average (with points) separatcly.
fa given
Problem 2-3: Write a program to find out the largest and smallest o!
list of numbers in an array. Display the oumbers, their largest and smallest
separately.
it mbers
Problem 2-4: Write @ program to find out the summation of even nu
and edd numbers from a given list of numbers in an array. Display the
numbers, the summation of even numbers and odd numbers separately,
_ ‘
Problem 2-5; Write a program to find out the summations of the numbers
stored in even indices and odd indices of an array. Display the numbers, the
two summations separately.Data Structurcs Fundamentals eT
— qe
Problem 2-6: Write a program to merge two arrays (merge two arrays and
make single one), Display the data of the three arrays.
Problem 2-7; Given an array with data in all positions. Write a Program to
insert an item in a pai lar position of an array in such a way that no data
will be lost and data will be in previous order. Hints: insert an element, x in
tth position where i Differentiate the array and the record
RECORD
1 Definition
It isa collection of non-homogenous (different types of) related data items.
“Each item of a rccord is called a field of attribute. Related data items of
person may constitute a record. The following data items may constitute a
Data Tiems [ Types poe
Peson'sID | Numeric igits
Person's Name Character string 40 ghpencness
‘Telephone No. Numeric aage
Due Numeric 6 digits
in C/C++ is called structure. A structure can be defined as follows:
struct
{
int roll_no;
char “name;
int marks;
}Student;
“name” is a pointer variable that points a character type variable (data
tem), If the length of “name” field is 40, memory requirement forte above
re (record) = 2 +40 + 2 = 44 bytes; as each integer occupies 2 bytes
‘And cach character is of 1 byte.Data Structures Fundamentals 2
An array may be a member (field) of a structure (record). A structure
(record) may be an element (data item) of an array.
Example:
Nh
struct
{
int roll_no;
char Name[40);
int marks;
Stud; // Here, Name[40] is an array which is a
member of the structure, Stud.
2.
struct
t
int roll_no;
char Name[40);
int marks;
Student [30];
Here, Student is an array of structures where members are rall_no, Name{ ]
and marks, and Namef ] is an array.
‘We can assign value to the members of the structure (Stud) as follows:
Stud.roll_no = 5011;
Stud.name[ ] = “HM. Mehedi Hasan”;
Stud.marks = 50;
If there is an array of structures, we can assign values to the members of the
structure (Stvden/) as follows:
Student [2].roll_no = S011;
Student [2].name[ }=“H.M. Mehedi Hasan”;
Student (2).marks = 50;
Chap.-3 Record 2
Memory requirement for the structure, Student (in example 2):
(2 +40 + 2) * 30 bytes
= 44 * 3 bytes
= 1320 bytes
If we want to store data to a record (structure) SE ee ei
student or customer, then we have to declare (define) array of structures.
disadvantage is that, for these types of array a huge amount of memory space
may be misused or wasted.
Problem 3.1: Define a record (structure) with three ficlds for a student and
store data for 30 students.
Solution:
struct
t-
int roll_no;
char name[40];
int marks;
} stud[30};
for (i= 0, i< 30; ++i)
{
store data in stud{i].roll_no;
for (j= 0; 5 <40; +)
store data in stud{i).name[j);
store data in stud[i].marks, :
} For storing data we can use scanf () function of C/C++
A data structure may be the member of another data structure also.
Code for problem 3.1 in C/C++ is as follows:
struct
{
int roll_no;scant ("ad", &estud [i].roll_no;
fflash(stdin);
Bets(stud[i).name);
scanf("ad", &stud[i]-marks);
1
To display data we can write code using printi{);
Pointer to the structure:
We can store data using pointer 0 @ structure (record). An example using
C+ code is as follows: 4
struct stud
t
int roll;
int marks;
! P sper
struct stud * spir;
Ssptr = new(stud);
vin>> sptr —>roll;
‘coul>>spir —> marks:
vout< roll;
Cout<< sptr—> marks;
In the above code sptr is the pointer to the stricter named stud and mew is a
keyword for allocation memory (space) for the structure,
roll marks
3.2 Difference between an array and a record
1. Am array is a finite set of same type of data elements. In other ‘words, it
is a collection of homogeneous data items (elements). Whereas a record
is a collection of non-homogenous (different types of) related data
items.
FJ
~ Chap-3 Record
s
2 ‘The data items of an array are of same type, But in a record, data
elements are usually of different types.
i mei is a collection of non-homogencous related data items, It
e* Then bee aad i a.
‘get of same types of data but a record is a set of different types of data, i
Defing record (structure) with example: ;
‘What is the difference between array and record!
‘Define array and record. ; u
‘Assume an integer needs four byte, a real number needs cight byte
struct Ku {
r
Se
char name[10];
int rell;
} eve[30]; :
If the starting address of ece is 100, what is the address of eco[ 15]?
Consider the following C program segment:
struct x{
int sub (3);
char name [10];
long int roll;
b
struct y{
struct x person;
char addres[20],
} m[20);
If the address of the m[0].person.subf2] is 500, then what willl be the
address. of m|10].person.sub[2]?Data Structures Fundamentals 30
——_—_——
Problems for Pi
Structure or record related problems
Problem 3-1; Given three attributes of student record such as roll, name and
marks, Write a program using structure to store data for five students and
display the data on the screen,
Problem 3-2: use the program for the problem 3-1 and modify it to
calculate grade for each student and display roll, name, marks ang grade
using one row for each student. Use grade calculation rules of your
university,
Sample output:
Roll Name Marks
l Abdur Rahim 86 A-
2 Shameem Rahman 9s At
Problem 3-3: Given three attributes ‘of employee record such as 1D, name
and basic pay. Write a Program using structure to store data for 5 Persons
(employees), calculate some benefits as follows:
i) House rent:
1) House rent = 45 % of basic pay (for basi¢ pay equals to 10000 or
less)
b) House rent = 40 % of basic pay (for basic pay more than 10000 or
less than equals to 20000)
¢) House rent = 35 % of basic pay (for basic pay more than 20000)
ii) Transport allowance = 5 % of basic pay
iii) Medical allowance = 2000/- (fixed)
iv) PF deduction = 10% of basic pay.
¥) Gross pay = Basic pay + house rent + Transport allowance + Medical
allowance
vi) Net pay = Gross pay — basic pay
Display the data as follaws:
1D Name Basic pay Gross pay Deduction Net pay
0908 =M Karim 12000 190400 1200 18200
0910 A Mazid 23000 435350 2300 33080
Problem 3-4: Declare a structure with two attributes (fields) such as roll,
name and marks. Declare a pointer variable of structure type (pointer to the
structure) and store and display the data using the pointer and attributes,
‘Hints: see pointer to the structure (page 28).
CHAPTER FOUR
LINKED LIST
OBJECTIVES: ae
> Identify Linked listand Doubly Linked List
> Describe the creation process of a linear linked List and Doubly
linked list sankey:
> Write an algorithm to create a linked list and Doubly linked list
> Write an algorithm to locate a node of linked list and Doubly
linked list ;
} Describe the insertion process of a node into a linked list and
Doubly linked list ;
> Write an algorithm to insert a node into a linked list and Doubly
linked list aa
> Describe the deletion process of node from @ linked list and
Doubly linked list , :
% Write an algorithm to delete a node from a linked list and
Doubly linked list /
> Write an algorithm to arrange data of linked list and Doubly
linked list
> Differentiate the array and the linked list
date,
LINKED LIST
wohem,
Sr Sp eer
Definition al
made. A
isa list or collection of data Kaper Gratate be ored Seicpnared locations
{positions) in memory: To store data in scattered locations in memory we
to make link between one data item to another. So, a =< or
t must have two parts: one is data part and another is link (pointer)
‘purt. Each data item of a linked list is called a node, ee
(holds) actual data A ame ase a le te
the lis. To locate the list an external pointer is used that points the _
cer ee ek et ole be ae lee
be mull, This type of list is called linear (one way) linked list or simply li
list.| Pigure- 4.1(6): Graphical represeotation of a linear linked bist
4.1.1 Node declaration and store data in a node (in C/C++)
1. Node Declaration:
sruetGote
int data;
Thode *next;
h
2. Data store:
node *nptr; declare nptr as node type:
npt—datz = 20; — //store 20 in data part
nptr—*next = NULL; //void the pointer part
Chap. Linked List 33
eee
ao
4.1.2 Create a new node
1. Node declaration:
struct node
{
int data;
node *next;
Ki
2. Declare variables (pointer type) that point to the node:
node "np,
3. Allocate memory for new node:
nptr= new (node);
4, Insert node value:
nptr—-data = 55;
nptir—next = NULL;
4.1.3 Create a linked list
ees linked ba ee RL we heed ws eas a la i me,
“the extemal pointer to the list will point no node or the extemal pointer will
“be null. After that, we have to create a new node. The data part of the new
‘node will contain data (information) and the pointer par will contain mull,
“This temporary pointer will help us to include the next new node to the list.
‘Now we shall include this new node to the existing linked list. A temporary
pointer will be used to point (trace) the new node, Thus we establish a link
between the existing linked list and the new node. At this point there is only
node in the linked list. We shall create another new node and include the
to the linked list. We shall repeat the process to include any other nade.
we can create a linked list, 1
We can create a linked list according to the following process given in
points.
1. Create an empty linked list.
(The extemal pointer will be mul).
2. Create a new node with necessary data.Data Structures Fundamentals 4
(The data part of the new node will contain data (information and the
pointer part will contain muff). ay
3. The extemal pointer will point the new node.
{At this moment there is only one node in the list)
4, Create another new node and include the node to the linked list.
5. Repeat and process to include any other node.
Linked list creation process using pseudo code:
1, Create an empty list, the pointer list will poimt to mull:
list=Null; ila
2) Create a new node with data:
npt = new (node);
| nptr-> data = item; f
nptr->next = NULL; |
(Here the value of item is 40). "P™
Figure-4.2: Addition of nodes toa linked list (pictorial view),
3) Include the first node to the list i
list Algorithm 4.1: Algorithm (pseudo code) to create « linked list
©) Declare node and pointers (list; tpt, nptr): r
list = mptr me Ye at i. struct node
(pr = apr, {
sl intdata; ‘
node “next,
‘Here tptr is temporary pointer used to make link between existing list and
new node.
4) Create another node with data and include the node to thelist:
“ETH
list
nptr—next = NULL;
4, Make link between the linked list and the new node:
if (ist= = NULL) oe er attr
{
ao
tptr > next = nptr;
‘tpo=nptr,Data Structures Fundamentals. 36
i
list= npt;
tptr= np;
}
ele
tptr—next = nptr,
(ptr = nptr;
}
5. Output linked list
Nate: Step 3 and 4 will be repeated again and again if two or more nodes are
to be added in the list.
Comments; Here, nptr is a pointer that points to anew node. The tptr is the
- Pointer that points the last node, which has been already added. item is a
variable using which we shall enter data to the new node.
Program to create a linked list:
Although we have written linked list creation process in detail, however,
there are some students they face problem to write a program to create a
linked list. So, here we write a program to create a linked list (header files
are not included). After creating a lined list we have to read the data of the
linked list and display them on the monitor. Otherwise we cannot understand
whether the list is created properly. At the end of the program we include
code to display data of the list.
void main{)
struct node
1
int data;
node “next;
EH
int i,n,item;
node *nptr, *tptr, *list; // Necessary pointers
list= NULL; // Create an empty list
cout<<"Enter number of nodes:";
Af (list==NULL) //List is empty
{
list = nptr; //Include first node
tptr= mpi;
}
There is/are mode(s)Data Structures Fundamentals 38
4.1.4 Locate or search a node of a linked list
Here, we have to find out a node whose value is known,
Lint
ind out the item $1 from above linked list, All items in the
in ascending order.
Problem 4.
list were stored
Solution: To locate the node we have to traverse the list using « pointer.
Here, we shall use a temporary pointer using which we shall find the node.
Weccan write in points:
8) We have to use a temporary pointer to traverse the list
'b) At cach node we compare and check whether we have found the node or
not,
list. .
-Chap.4 Linked List 39
Algorithm 4.2: Algorithm (pseudo code) to search a node from a linked list
1, Declare node and tptr
2. Input the value to be located:
item = 51;
3. Search the item:
tptr = list;
while (tptr—data != item or tptr! = NULL) p
ie
tpir= tptr—next;
} ;
Y
bn:
4. Output: r
if ((pt—+data= item)
print “FOUND”
else print “NOT FOUND”
“Note: Here, list is an extemal pointer that points to the first node of the
"fist and tptr is a temporary pointer and item is a variable that contains the
node value to be located.
"4.1.5 Insert a node into a list
Be ae ts Lemon ets aia ten iagcinaiees iste
the last node and the data of the list are arranged in ascending order.
To insert a (new) node into 2 linked list, we have to find out (locate) the
position of the node after which the new node will be inserted. To find out
the position ié'shall use a temporary pointer. As we know there is an
extemal poinier to the linked list, which points the first node of the list. So,
‘we shall assign the value of the external pointer to the temporary pointer. At
the first stage temporary pointer will point the first node of the linked list.
‘Now we shall compare the data of the second node of the list with the data of
the new node. If the data of the second node of the list is greater than the
data of the mew node, then we have found the pésition for insertion. So, the
new node will be inserted after the first node (before the second node). If the
data of the second node is smaller than the data ofthe new node, then we
GT CTData Structures Fundamentals 40
advance the temporary pointer. That is, at this stage tie temporary pointer
will point the second node of the list. Then we shall compare the data of the
new node with the date of third node, If the data of the new node is smaller
than the data of the third node, the new node will be inserted after the second
node or before the third node, If mot, we have to advance further.
Lint
[Tele Hf [pls A [=n
() An existing Linked Hat
(©) Finding owt sppropeate position fo the sew node
To insert a node in between two nodes we have to perform nwo major tasks:
i) To locate (find out) the node after which the new node will be inserted.
ii) To perform insertion of making necessary link.
To locale the position for insertion we have to perform the following
operations:
i) Use a temporary pointer (tptr) to the first node of the list (tptr = list).
ii) Compare the value of the next node with value of the new node
iii) Traverse the temporary pointer until we find a greater node value than the
value of the new node. (tptr = tptr> next),
To insert the node by making link the steps are:
4) Point the next node by pointer of the mew mode (nptr > next = tptr->next)
ii) Point the new mode by previous node of the new node.
tptr--next= npir
apt! O) Ance Nowe
Chap -4 Linked List 4l
Figure-4.3 gives a clear pictorial view of insertion of a new node in an
existing linked list.
(@) Updated Lis
Figure-4.3: New node insertion in an existing list (pictorial view)Data Structures Fundamentals a
ener
Algorithm 4.3: Algorithm (pseudo code) to insert a node into a linked list
(Here, we shall consider insertion after the first node or before the last node
inan ascending list]
1. Declare node and pointers (list, tptr, nptr)
2. Input linked list (we have to use an existing list)
3. Create a new node;
aptr = new (node);
nptr—+data = item;
nptr—next = NULL;
4. Locate the appropriate position for the new node:
[for making link between linked list and the new node]
tptr= list; d
while (tptr—next—+dats < nptr—rdata)
i +
Ipir = tptr—next;
J
5. Insert new node at appropriate position (by linking previous and
next node):
Nptr—next = tptr—rnext;
tptr—next = nptr;
6. Updated linked list
Comments; Here, fist is an external pointer that points to the first node of
the list and mtr is a temporary pointer. nptr is the pointer to the new node.
Addition of a node before the first node of a linked list is very easy. At first
create a new node, Make link between the new node and the first node of the
list. Now remove the external pointer and set it to the new node (the extemal
pointer will point the new node).
Similarly we can add a node at the end of a linked list. To perform this task
we have to use a temporary point and traverse it to the last node (whose
pointer part is null) of the list. Now make link between the last node of the
list and the new node.
‘Chap.-4 Linked List a
tye) aoe all ee
Ou
Bee] (a 7 Ls [Loe N
if 7
(new node)
ptr :
A, nptr-> mextlist;
2. list'= nptr;
i) Addition of a new before the first node (pictorial view).
“fe
(new node)
ii) Addition of a new after the last node (pictorial view),
4.1.6 Deletion of a particular node
To delete a particular node from a linked list, first we have to find out the
node to be deleted. Then we shall delete the node by making link:between
the previous nodes and the next nodes of the node (that will be deleted). To
find out the node to be deleted, we start searching from the first node, Here
‘we need a temporary pointer (tptr) to point the current node. At the starting
‘of the searching, the temporary pointer will point the first'node (i.¢,, (ptr =
list). "
If the first node is the node we want to delete, then the searching process is
completed. If we are not looking for the first node, we have to advance to the
second node of the list and Compare it with the node value to be deleted,
‘Again if this node is our target node, then searching ‘will be terminated.
‘Otherwise, we have to advance more. In this way, we have to continue
searching through the whole list until we find the target node. If the target
node is not present in the list, we shall simply close our mission.Data Structures Fundamentals 44
am Sue mien
In the second. phase, when we have already found the target node and the
node is indicated by the temporary painter (tptr), we have to delete the node.
But deleting this node we shall loose the rest part of the list (if there is any
node after the node to be deleted). So we have to confirm that. The next
nodes of the list will not be lost, if we make link between the previous node
of the target node and the next node of the target node. To make this we
require a second temporary pointer (pptr) that will point the previous node
of target node.
Now, we shall make link between the previous node and the next node of the
target node (the node to be deleted). That is we have to assign the value of
next pointer of the previous node to the value of the next pointer of the node
to be deleted. Now the link is established and we are free to delete the target
say *
If the target node is the first node of the list, we have to advance the external
pointer of the list to the next node (second node). Then we delete the tanget
node (i.e., the first node).
If the target node is the last node of the list, we have to assign NULL to the
next pointer of the previous node of the target node. Then we delete the
node.
une,
Le Tele Ges Th Tee 8
(0) Am existing Linked le .
‘Nove that isco be delete!
List,
Le Le els The Thee
we od
(4 Update Line
Figure-4.4: Deletion of an item from a linked list (pictorial view)
Chap. Linked List 45
ce eee
Problem 4.2: Delete a particular node from a given linked list.
Algorithm 4.4: Algorithm (pseudo code) to delete a node from a linked list
(Here we shall not consider the deletion process of the first node and the last
node of the list).
1. Declare node and pointers (list, tptr, pptr)
2. Input linked list and the item (that is to be deleted)
3. Search the item ta be deleted in the list:
torr list;
while (tptr—+data != item)
{pptr=tptr,
tptr = tptr—snext; }
4. Delete the node:
[Make link between previous and next node of the node
that is to be deleted and delete the target node)
pptr—next = tpir—next;
delete (tptr);
§. Output: updated linked lists
Comments: Here, list is a pointer to the linked list and tptr is a pointer that
will point the node to be deleted. And pptr is a pointer that will point the
previous node of the target node (the node is to be deleted) and item is the
node value to be deleted.
Problem 4.3: Given a linked list, where the data of the nodes are not
arranged in an order. Arrange the data of the linked list in ascending order.
Algorithm 4,5: Algorithm (pseudo code) to arrange data of linked list
t 1. Input linked list.
2. Take extra pointers pptr, fptr.
3. pptr= list;
4, while (pptr = NULL)
{
: fpr = pptr—next;Data Structures Fundamentals 46
5. while (fptr != NULL) +
{
if (pptr—vdata > fptr—data)
{
interchange (pptr—+data, fptr—rdaia);
}
fptr= fpt-—next;
} Mend of while of step-5
ptr = pptr—snext; :
} Hend of while of step-4
6, Output: The amanged (sorted) list.
Comments: /ist is the pointer to the first of the linked list. ppir and jptr are
the pointers to first, and second nodes, and three pointers will be used to
arrange (sort) data,
4.2 Doubly linked list
4.2.1 Definition
A doubly or two way linked list is a list silat als has Kage pao
‘One is link or pointer to the previous (backward) node and one is data part to
held the data and another is link or pointer to the following (forward) node.
There is an external pointer to the first node of the list. Doubly linked list is
also called two-way linked list.
list,
Ns [i EL Tet [4
Figure-4.5: Graphical representation of a doubly linked list
‘Chap.-4 Linked List a”
4.2.2 Declare a node of a doubly linked list
struct node
{
node *back;
“int data; 3 Tht
» mode "next; i
kK
4.23 Create a node
nptr = new (node);
mptr—rback = NULL; to a
npu—-data = item;
aptr—»next = NULL;
42.4 Create a doubly linked list
To create a doubly linked list, we have to create an empty linked list first.
io ‘we shall create a new node with data and include the node to the list.
“After that, ‘we shall create another new node with data and include this node
the list. To include a new node we have to make link between the last
node of the list and the new node. To make link, the mext pointer of the last
will point the new node and the back pointer of the new node will point
last node of the list. Thus we can create a doubly linked list. The pictorial
view of this creation process is shown in Figure 4.6.i A:
iumbauc ee eer:
> Dell = Teil = 0
(©) Doubly linked list after making ink
Figure-4.6: Creation of doubly linked list (pictorial view)
Algorithm 4.6: Algorithm (pseudo code) to create a doubly linked list
L. Declare node and pointers:
a, struct node
{
node *back;
int data;
node “next;
,
b. node *list, *tptr;
4 . Make link between the last node of the list and the new node:
rt node, searching ends. Now we have to insert the node before the first
if (list = NULL)
{
list = nptr,
‘pir = mptr,
}
ee [
tptr—next = nptr;
nptr—-back = tptr;
(pir = nptr,
}
§, Output a doubly linked list.
ete ee eee
5 Insertion of a node into a doubly inked list
To insert a (new) node into a doubly linked list, we have to find out the
on in the list where the new node will be inserted. To point this node
ve need a temporary pointer (tptr). We have to start searching from the first .
of the list. To performing searching we set the temporary pointer to
the first: node. Let us consider that the data will be placed in an
ding order, If the node value is smaller than or equal to the value of theData Structures Fundamentals isp
If the new node value is greater than the first node, we. have to advance the
temporary pointer (tptr) to the next node. Now, if the new node value is
smaller than the current (second) node, the new node will be inserted before
the current node. If new node value is still greater, advance the temporary
pointer to the next mode. This process will continue until either we find the
node after which we shall insert the new node or we reach the last node of
the list.
Now, when we have completed searching the position, we shall make link
among the node after which the new node will be positioned (inseried), the
nade before which the node will be inserted and the new node itself. That
means, as the list is a two way linked list, generally insertion takes place
between two nodes; previous node and the next node (of the new node to be
added). First, we have to make link between the nolle after which the new
node will be inserted and the mew node. Then we shall make link between
the new node and the node before which the node will be inserted. After
making links, insertion process terminates.
If the node is to be inserted before the first node, we have to make link
between the new node and the first node. New node will be placed at the
very first of the list and then link has to be made between the new node and
the first node of the list. Afler that, we have to set list painter (list) to point
the new node. If the node is to be added at the end of the list, we have'to
make link between the last node and new node in such 2 manner that the new
node will be added at the end of the last node (after the last node).
r list “
#0 @
es ‘hoe » Lnpu->next = (pir;
2. tptr->back = nptr;
3. list = aptr;
i) Adattional of a new node before the first node (pictorial view)
tptr,
“CED
1.nptr->next = tptr;
2.tptr>back = optr; npr
i) Addition of a new node after the last node (pictorial view).
AL TL Teton Tet] Tet N
(0) A dol nk i and anew non age
PTs [pet] oe Tet] oe [et] N
ea
) a link
ReDeaD a
(©) Doubly linked tit and new mode after making link
Figure-4.7: Insertion of a node into a doubly linked list (pictorial view)
Mist,
Ns |
Pornia-5Data Structures Fundamentals <
2
alist - Algorithm (pseudo code) to add a new node before the first
1. Input a doubly linked list *
2. Declare necessary pointer (list
3 Chaban se ere
nptr = new(node);
nptr->data = x;
nptr->next = NULL;
nptr->back = NULL;
4. tpir= list;
5, Make Necessary link:
ptr->next = tptr;
tptr->back = nptr;
6. Mave pointer (list) to the new node:
list = nptr;
7. output updated linked list
gorithm 4.8; Algorithm (pseudo cod: it
b stioth (p' ic) to insert a node in between two
1. Input a doubly linked list.
2. Declare necessary pointers (list, ‘ptr, nptr)
3. Create a new node: :
ptr = new (node);
nptr->data = x;
nptr->next = NULL;
nptr->back = NULL;
4. Locate (search) the position the new node:
tptr = list;
while (Iptr->next->data < nptr->data)
i .
iptr= tptr->next
}
5, Make necessary links:
nptr->next = tptr->next;
nptr->back = tptr;
tpt->next = nptr;
7, Output updated linked list.
—_
Chap. Linked List 3
———eeeEeEEeE
(Comments: to check whether the doubly linked list hes been updated
properly or not. We have to print the data of the list in input order as well as
Feverse order,
Algorithm 4.9: Algorithm (pseudo code) to add a node at the end (afier the
Jast node) of the list. ;
1, Input a doubly linked list
2. Declare necessary pointer (list, nptr, tptr)
3. Create a new node:
nptr= new (node)
nptr->data = x;
nptr->next = NULL;
__ nptr->back = NULL;
4, Locate the last node of the list:
tptr= list; .
while (lptr->next f= NULL)
6. Output updated linked list.
After updating the doubly linked list, we have to print the data of the list in
Input order as well as reverse order, if we find correct print out ‘of input
‘order and reverse order, we make sure that updated (addition) has been done
‘properly.
4,2.6 Deletion of a node from a doubly link list,
To delete 2 node from a doubly linked list, at first we have to find out the
node te be deleted. For this, we shall use a temporary pointer to point the
‘node. When the temporary pointer points the nodé to be deleted, before
deleting the node we have to make link between the previous node and theData Structures Fundamentals 34
next node of the node (to be deleted). To do this, the mext pointer of the
previous node will point the next node and the back pointer of the next node
will point the previous node of the node. After establishing the link we shall
delete the target node. The pictorial view of the deletion process is shown in
Figure 4.8.
list
Miss [et] os {Toe Tisef] 0 [Het os
cpu
(2) Doubly tiked et at initial stage
(¢) Boubly inked list after making kink and before deletion of the node
list
Nos [feet] os [ett] oe Tt] os
(0) Updated doubly linked lise after deletion of target node
Figure-4.8: Deletion of a node from a doubly linked list (pictorial view)
Algorithm 4.10: Algorithm (pseudo code) to delete a node from a doubly
linked list
1. Declare node and pointers (list; tptr);
2. Input a doubly link list and item (value of the node to be deleted):
3. Locate the nade to be deleted:
tpte= list;
while (tptr—next != NULL)
{
if (tptr—data = = item) break;
tpir= tptr—snext;
'
Chap.-4 Linked List 5s
4, Make link among rest of the nodes (excluding the node to be deleted):
a. If the nade to be deleted is the first node of the list:
list = tptr—-next;
list—back = NULL;
[if there is only one made in the list then list = NULL]
b. If the node to be deleted is mot the last node:
tptr—back—next = tptr—next;
tptr—snext—rback = tpt—rback;
c. If the node to be deleted is the last node:
tptr—-back—next = NULL;
$. Delete the target node:
; delete (tptr);
6, Output: Updated doubly linked list.
4.3 XOR linked list
An XOR linked list is a linked list that uses the bitwise exclusive disjunction
fo decrease memory requirements. XOR linked lists were quite common in
the early days of computers, when the available memory was quite sparse.
Principle
The principle used by XOR linked list is quite interesting. XOR linked lists
are doubly-tinked lists, but unlike traditional linked list, their nodes use only
one pointer to obtain the predecessor and the successor. In order to do this,
each node contains a pointer that stores the bitwise XOR of the previous and
“next field. Traversing the list from the beginning to the end is casy. For a
given item A (n), XORing the address of A (n-1) and the address of A (n)
will give you the address of A (n+1). The same procedure can be applied for
the other direction. Starting the process of traversing the list is done using
the address of two consecutive nodes, by XORing the addresses they store in
order to obtain the one of the starting point.
An ordinary doubly-linked list stores addresses of the previous and next list
items in each list node, requiring two address fields:Data Structures Fundamentals 56
-A BB © pe
> next > next —> next >
< prev <- prev < prey <_
An XOR linked list compresses the same information into one address field
by Storing the bitwise XOR of the address for previous and the address for
next in one field:
ar B Cc D Es
<> A®C <>BeD
‘When you traverse the list from left to right: Supposing you are at C, you can
take the address of the previous item, B, and XOR it with the value in the
link field (B&D). You will then have the address for D and yeu can continue
tmiversing the list. The same pattem applies in the other direction.
‘To start traversing the list in either direction from some point, you need the
address of two consecutive items, not just one. If the addresses of the two
consecutive items are reversed, you will end Up traversing the list in the
opposite direction,
Features
Given only one fist item, one cannot immediately obtain the addresses
of the other elements of the list.
Two XOR operations suffice w do the traversal from one item to the
next, the same instructions sufficing in both cases, Consider a list with
items {...B C D...} and with RI and R2 being registers containing,
respectively, the address of the current (say C) list item and a work
register containing the XOR of the current address with the previous
address (say C®D), Cast as System/360 instructions:
X R2Link R2< CeDe Bep (i.e. Bec, "Link" being the link field
in the current record, containing B&D)
ARRLR2 RI<-CeBeC (ie, B, thenext record)
p.-4 Linked List a7
End of list is signified by imagining a list item at address zero placed
adjacent to an end point, as in (0A B C...}. The link field at A would
be 08B. An additional instruction is needed in the above sequence
after the two XOR operations to detect a zero result in developing the
address of the current item,
A list end point can be made reflective by making the link pointer be
zero, A zero pointer is a mirror. (The XOR of the left and right
neighbor addresses, being the same, is zero.)
does it work?
fhe key is the first operation, and the properties of XOR:
*Xex—0
* X@0=X
* XeY=vex
* (X8Y)eZ=Ke(vezZ)
he R2 register always contains the XOR of the address of current item C
With the address of the predecessor item P: CeP. The Link fields in the
records contain the XOR of the left and right successor addresses, say LOR.
XOR of R2 (C*P) with the current link field (L®R) yields CePOLeR.
* If the predecessor was L, the P(=L) and L cancel out leaving CeR,
** Ifthe predecessor had been R, the P(=R) and R cancel, leaving CeL.
In each case, the result is the XOR of the current address with the next
ss. XOR of this with the current address in RI leaves the next address.
is left with the requisite XOR pair of the (now) current address and the
edecessor.
Although XOR linked lists were heavily used a few decades ago, their usage
how discouraged unless it is absolutely necessary. It is generally used only
for embedded devices and microcontrollers, because they da have a number
of disadvantages:Data Smuctures Fundamentals i
= Most debuggers cannot follow the structure of such a list, making
Programs very hard to debug. The code required to use XOR lists is
quite complex, too,
* Many high level languages do'not support the XORing of pointers
dizectly or at all.
* The pointers are not available if the list is not actually traversed
* Conservative garbage collection schemics cannot be used), ince they
need literal pointers to work. Implementing a special garbage
collector is not practical on low-memory devices.
* Modem computer architectures have na use for such. lists, since
they do have enough memory. Unrolling is generally a better choice
for programmers looking to decrease the overhead,
* Cireular linked list
A circular linked list is a list where each node has two parts; one is data part
to hold the data and another is link er pointer part that points the next node
and the !ast node's pointer points the first node of the list, Like other linked
list there is an extemal pointer to the list to point the first node,
Figure-4.9.
List
Le es Pe es eT)
Figure-4.10: A circular linked list (linear diagram)
ictorial view of a circular linked list (3 circular diagram)
59
Chap.~# Linked List
4.4.1 Create a circular linked list
Creation process of a circular linked list is similar to the creation process of a
linear link list, which had been discussed in section 4.1.4. Here we have to
do addition thing, that is make link between the last node and the first node
which will create a circle (linked list as a circle).
pa
=
ry
S Ee]
ou tur
* ar inked bt
@Anempry tie (i Anewande —* (iii) Making ink eae
Figure-4.11: Linking process of the first node of a circular linked list
zi fa
(i) Anew nade
mane S Roewaik itt
(id) Making link between list node de
sGrouiar bt with
ON ea new node, sew nade & firs node
fo) Updates! creutar linked ist after
(6 Update il
Figure-4.12: Creation of a circular linked list with more than one node
r Algorithm 4,11: Algorithm to create a circular linked list
1. Declare node and pointers (list, tptr, nptr)
2. Create an empty inked list
list = NULL;Data Structures Fundamentals as
eee es il
3. Create a new node with
nptr= new (node);
nptr—+data = item;
nptr—snext = NULL;
4. Make link between new nade and the link list:
if (list = NULL)
{
list = nptr;
aptr—snext = list; /for circular linking
tptr= nptr;
}
else t
‘tpt—next = nptr;
nptr—next = list for circular linking
tptr= nptr,
}
5. Output a circular linked list,
y
Note: To create a circular linked list with several nodes we have
to repeat
step Jand step 4.
4.5 Difference between array and linked list
1. An array is a finite set of same type of data items (elements). In other
words, it is a collection of homogencous data items. The elements of an
armay are stored in successive memory locations. Any element of an array
is referred by array name and index number (subscript),
Whereas, linked list is a list or collection of data items stored in scattered
Memory locations. Each data item has two pars. One is data part and
another is link (pointer) part. Each data item of a linked list is called
node. Data part holds actual data (information) and the link Part points to
the next node of the list. To locate the list or the 1 node of the list, an
external pointer is used. The link part of the last node ‘will not point any
node. That means it will be null,
‘Aray implementation depends on size and it results in wastage of
memory space. On the other hand, linked list does not depend on size.
‘Types of array are one dimensional, two dimensional etc. and types of
linked list are linear, doubly, circular etc. ame,
‘ ‘An clement of an array can be accessed directly and access time is fix
: 4s well as efficient. On the other hand, a node of linked list can not be
accessed directly and access time is linear and not so efficient. ,
Ary is a static data structure and a linked list is a dynamic data
Comparison of operations using array and linked list.
are fast.
Element search is slow:
Linked list can be defined as a collection of data items thatcan be
orted in scattered memory ‘locations. Here, the data items must be linked
' Seek ne Des sepals Recht a ee eel
create linked lists, search a node of a linked list, insert a mode into a list
aes list is a list where there is only one me fink
een nodes. A doubly linked list is a list where there are links in both
a an extemal pointer to point the first node of the list. aca
, ‘There are some differences between an array and a linked list sue
aay implementation depends on size but linked list tapes :
independent of size. Array is 0 static data structure whereas linked list is
‘dynamic data structure etc.Data Structures Fundamentals
62
he 8
‘Questions: ‘
1. What is linear linked list? Explain with example(s).
Describe the creation process of a linked list,
How a node can be inserted into a linked list? Explain with example,
Write an algorithm io create a linear lined list
‘Write an algorithm to insert a node at the begi of a linked list.
Write an algorithm to insert a node into a linked list. The node will not
be first not or the last node.
7. Write an algorithm to delete a node from a linear linked list
8. Write the algorithm to implement a sorted linked list into which
elements can only be inserted into their proper positions,
9. Write a function, which will destroy a linked list.
10. “Insertion and deletion in linked list is easier than array”, Explain,
Il. What are the relative advantages and disadvantages of fixed length
storage structure and linked-list storage structure ?
12. When is linked-list more convenient than array ?
13. Define doubly linked list with ‘example.
14, Write an algorithm to delete an item from a two-way list,
15. Write down an slgorithm to insert and delete an element into a doubly
sorted linked list.
16. Write a function to swap two nodes for a doubly linked list.
17. Write an algorithm to find (locate) a node of a doubly linked list,
18. When will you use adoubly linked list ? Why ?
19. What is circular linked list? Give example.
20. Write an algorithm to delete a node from a circular linked list,
21. Write an algorithm to insert a node into a circular linked list.
Deke
Eroblems for Practical (Lab) Class
Linked list related problems
oblem 4-1: Write a program to create a linked list of five nodes where
ich node of the list will contain an integer. Display the data of the list on
screen,
roblem 4-2: Convert your program of the problem 4-1 as follows: 5
frite a function for node creation, another for linkage and another function
display the data, Call them to show the result of execution.
i
oblem 4-3: Write a program to insert-a node in between two existing
odes of a linked list. Display the data of the existing (old) linked list and the
Mlated linked list.
oblem 4-4: Write a program for the followings:
i) Add a node before the first node of the list. ,
ii) Inset a node in between two existing nodes of the list.
iii) Add a node at the end of the list.
ition and after addition or insertion of a node.
for nodecreation, a function for addition and
function to display the data.
\ 4-5: Write a program to delete a node from ‘in-between two
aed ‘of a linked list. Display the data before deletion and after
on operation.
pblem 4-6: Write a program for the fallowings:
i) Delete the first node of the linked list.
Delete the node from in-between two existing nodes.
iii) Delete the last node of the list.
the data before and after the deletion,
ditions: write a function for creation, a function for deletion and
ef function to display the data,
foblem 4-7: Given a linked list with data arranged in random order. Write
Ogram to modify the linked list so that it contains data in ascending
, Display the data before and after the modification,