DS Module 1
DS Module 1
[Link] Damale
Assistant Professor
Department of Information Science and Engineering
RVITM, Bengaluru - 560076
Email: [Link]@[Link]
®
RV Institute of Technology & Management
MODULE 1
Introduction to Data Structures, Array Operations and Strings
Entities with similar attributes form an entity set. Each attribute of an entity set has a range of values,
the set of all possible values that could be assigned to the particular attribute.
The term “information” is sometimes used for data with given attributes, of, in other words meaningful
or processed data.
Field is a single elementary unit of information representing an attribute of an entity.
Record is the collection of field values of a given entity.
File is the collection of records of the entities in a given entity set.
Each record in a file may contain many field items but the value in a certain field may uniquely
determine the record in the file. Such a field K is called a primary key and the values represent
1|49
Data Structures and Applications – 21CS32
®
RV Institute of Technology & Management
k1, k2, ….. in such a field are called keys or key values.
Records may also be classified according to length. A file can have fixed-length records or variable-
length records.
• In fixed-length records, all the records contain the same data items with the same amount of
space assigned to each data item.
• In variable-length records file records may contain different lengths.
Example: Student records have variable lengths, since different students take different numbers of
courses. Variable-length records have a minimum and a maximum length.
The above organization of data into fields, records and files may not be complex enough to maintain
and efficiently process certain collections of data. For this reason, data are also organized into more
complex types of structures.
The study of complex data structures includes the following three steps:
1. Logical or mathematical description of the structure
2. Implementation of the structure on a computer
3. Quantitative analysis of the structure, which includes determining the amount of memory
needed to store the structure and the time required to process the structure.
2|49
Data Structures and Applications – 21CS32
®
RV Institute of Technology & Management
Linear arrays are called one-dimensional arrays because each element in such an array is referenced
by one subscript. Fig 1.2 illustrates two dimensional array Representation. A two-dimensional array
is a collection of similar data elements where each element is referenced by two subscripts.
Example 2: A chain of 28 stores, each store having 4 departments, may list its weekly sales as in
below fig. Such data can be stored in the computer using a two-dimensional array in which the first
subscript denotes the store and the second subscript the department. If SALES is the name given to the
array, then
SALES [1, 1] = 2872, SALES [1, 2] - 805, SALES [1, 3] = 3211,…., SALES [28, 4] = 982
Data frequently contain a hierarchical relationship between various elements. The data structure which
reflects this relationship is called a rooted tree graph or a tree. Fig 1.3 shows tree Representation.
4|49
Data Structures and Applications – 21CS32
®
RV Institute of Technology & Management
• Stack
A stack, also called a fast-in first-out (LIFO) system, is a linear list in which insertions and
deletions can take place only at one end, called the top. This structure is similar in its operation to a
stack of dishes on a spring system as shown in fig.
Note that new 4 dishes are inserted only at the top of the stack and dishes can be deleted only from
the top of the Stack as shown in fig 1.4.
• Queue:
A queue, also called a first-in first-out (FIFO) system, is a linear list in which deletions can take
place only at one end of the list, the "from'' of the list, and insertions can take place only at the other
end of the list, the “rear” of the list as shown in fig 1.5.
This structure operates in much the same way as a line of people waiting at a bus stop, as pictured in
Fig. the first person in line is the first person to board the bus. Another analogy is with automobiles
waiting to pass through an intersection the first car in line is the first car through.
5|49
Data Structures and Applications – 18CS32
®
RV Institute of Technology & Management
The data appearing in data structures are processed by means of certain operations. The following
four operations play a major role in this text:
1. Traversing: accessing each record/node exactly once so that certain items in the record may
be processed. (This accessing and processing is sometimes called “visiting” the record.)
2. Searching: Finding the location of the desired node with a given key value, or finding the
locations of all such nodes which satisfy one or more conditions.
3. Inserting: Adding a new node/record to the structure.
4. Deleting: Removing a node/record from the structure.
6|49
Data Structures and Applications – 18CS32
®
RV Institute of Technology & Management
1. Sorting: Arranging the records in some logical order (e.g., alphabetically according to some
NAME key, or in numerical order according to some NUMBER key, such as social security
number or account number)
2. Merging: Combining the records in two different sorted files into a single sorted file.
• An Array is defined as, an ordered set of similar data items. All the data items of an array are
stored in consecutive memory locations.
• The data items of an array are of same type and each data items can be accessed using the
same name but different index value.
• An array is a set of pairs, <index, value >, such that each index has a value associated with it. It
can be called as corresponding or amapping
Ex: <index, value>
< 0 , 25 > list[0]=25
< 1 , 15 > list[1]=15
< 2 , 20 > list[2]=20
< 3 , 17 > list[3]=17
< 4 , 35 > list[4]=35
Here, list is the name of array. By using, list [0] to list [4] the data items in list can be accessed.
Array in C
Declaration: A one dimensional array in C is declared by adding brackets to the name of a variable.
Ex: int list[5], *plist[5];
• The array list[5], defines 5 integers and in C array start at index 0, so list[0], list[1],
list[2], list[3], list[4] are the names of five array elements which contains an integer value.
• The array *plist[5], defines an array of 5 pointers to integers. Where, plist[0], plist[1],
plist[2], plist[3], plist[4] are the five array elements which contains a pointer to an integer.
7|49
Data Structures and Applications – 21CS32
®
RV Institute of Technology & Management
Implementation:
• When the complier encounters an array declaration, list[5], it allocates five consecutive
memory locations. Each memory is enough large to hold a single integer.
• The address of first element of an array is called Base Address. Ex: For list[5] the
address of list[0] is called the base address.
• If the memory address of list[i] need to compute by the compiler, then the size of the
int would get by sizeof (int), then memory address of list[i] is as follows:
The variables list1 and list2 are both pointers to an int, but in list2[5] five memory locations are
reserved for holding integers. list2 is a pointer to list2[0] and list2+i is a pointer to list2[i].
Note: In C the offset i do not multiply with the size of the type to get to the appropriate element
of the array. Hence (list2+i) is equal &list2[i] and *(list2+i) is equal to list2[i].
8|49
Data Structures and Applications – 21CS32
®
RV Institute of Technology & Management
main(void)
{
int i;
for( i=0; i<MAX_SIZE; i++)
input[i]= i;
answer = sum(input, MAX_SIZE);
printf(“\n The sum is: %f \n”,answer);
}
When sum is invoked, input=&input[0] is copied into a temporary location and associated with
the formal parameter list
A function that prints out both the address of the ith element of the array and the value found at
that address can written as shown in below program.
Output:
Address Content
12244868 0
12344872 1
12344876 2
12344880 3
12344884 4
9|49
Data Structures and Applications – 21CS32
®
RV Institute of Technology & Management
• Structures
In C, a way to group data that permits the data to vary in type. This mechanism is called the
structure, for short struct.
A structure (a record) is a collection of data items, where each item is identified as to its type and
name.
Syntax: struct
{ data_type member 1;
data_type member 2;
………………………
………………………
data_type member n;
}variable_name;
Ex: struct {
char name[10]; int age;
float salary;
} Person;
The above example creates a structure and variable name is Person and that has three fields: name
= a name that is a characterarray
age = an integer value representing the age of the person salary =
a float value representing the salary of the individual
Type-Defined Structure
The structure definition associated with keyword typedef is called Type-Defined Structure.
Syntax 1: typedef struct
{
data_type member 1;
data_type member 2;
………………………
………………………
data_type member n;
}Type_name;
• typedef is the keyword used at the beginning of the definition and by using typedef user
defined data type can be obtained.
10 | 4 9
Data Structures and Applications – 21CS32
®
RV Institute of Technology & Management
Ex:
typedef struct{
}humanBeing;
In above example, humanBeing is the name of the type and it is a user defined data type.
11 | 4 9
Data Structures and Applications – 21CS32
®
RV Institute of Technology & Management
This statement declares the variable person1 and person2 are of type humanBeing.
Structure Operation
The various operations can be performed on structures and structure members.
1. Structure Equality Check:
Here, the equality or inequality check of two structure variable of same type or dissimilar type is
not allowed
typedef struct{
char name[10];
int age;
float salary;
}humanBeing;
humanBeing person1, person2;
12 | 4 9
Data Structures and Applications – 21CS32
®
RV Institute of Technology & Management
typedef struct {
char name[10];
int age;
float salary;
date dob; }
humanBeing;
humanBeing
Person 1;
13 | 4 9
Data Structures and Applications – 21CS32
®
RV Institute of Technology & Management
A person born on February 11, 1944, would have the values for the date struct set as:
[Link] = 2;
[Link] = 11;
[Link] = 1944;
2. The complete definition of a structure is placed inside the definition of another structure.
Example:
typedef struct {
char name[10];
int age;
float salary;
struct {
int month, year;
} date;
} humanBeing;
Self-Referential Structures
A self-referential structure is one in which one or more of its components is a pointer to itself. Self-
referential structures usually require dynamic storage management routines (malloc and free) to
explicitly obtain and release memory.
Consider as an example:
typedef struct {
char data;
struct list *link ;
} list;
14 | 4 9
Data Structures and Applications – 21CS32
®
RV Institute of Technology & Management
Each instance of the structure list will have two components data and link. Fig 1.8 shows the node
with data.
• Data: is a single character,
• Link: link is a pointer to a list structure. The value of link is either the address in memory of
an instance of list or the null pointer.
Consider these statements, which create three structures and assign values to their respective fields:
list item1, item2, item3;
[Link] = 'a';
[Link] = 'b';
[Link] = 'c';
[Link] = item2.1ink = [Link] = NULL;
Structures item1, item2 and item3 each contain the data item a, b, and c respectively, and the null
pointer. These structures can be attached together by replacing the null link field in item 2 with
one that points to item 3 and by replacing the null link field in item 1 with one that points to item 2.
[Link] = &item2;
item2.1ink = &item3;
Unions
A union is similar to a structure, it is collection of data similar data type or dissimilar.
Syntax: union{
data_type member 1;
data_type member 2;
………………………
………………………
data_type member n;
}variable_name;
15 | 4 9
Data Structures and Applications – 18CS32
®
RV Institute of Technology & Management
Union Declaration:
A union declaration is similar to a structure, but the fields of a union must share their memory space.
This means that only one field of the union is "active" at any given time.
union{
char name;
int age;
float salary;
}u;
The major difference between a union and a structure is that unlike structure members which are
stored in separate memory locations, all the members of union must share the same memory space.
Fig 1.10 shows Memory representation. This means that only one field of the union is "active" at any
given time.
Example: #include
<stdio.h> union job
{
char name[32];
float salary;
int worker_no;
}u;
int main( ){
16 | 4 9
Data Structures and Applications – 18CS32
®
RV Institute of Technology & Management
Output:
Enter name: Albert
Enter salary: 45678.90
Displaying
Name: f%gupad (Garbage Value)
Salary: 45678.90
Pointers
A pointer is a variable which contains the address in memory of another variable.
The two most important operator used with the pointer type are
& - The unary operator & which gives the address of a variable
* - The indirection or dereference operator * gives the content of the object pointed to by a
pointer.
Declaration
int i, *pi;
pi = &i;
Here, &i returns the address of i and assigns it as the value of pi
Null Pointer
The null pointer points to no object or function.
The null pointer is represented by the integer 0.
The null pointer can be used in relational expression, where it is interpreted as false. Ex:
Pointer can be very dangerous if they are misused. The pointers are dangerous in following situations:
1. Pointer can be dangerous when an attempt is made to access an area of memory that is either out of
range of program or that does not contain a pointer reference to a legitimate object.
Ex: main ()
{
int *p;
int pa = 10;
p = &pa;
printf(“%d”, *p); //output = 10;
}
2. It is dangerous when a NULL pointer is de-referenced, because on some computer it may return 0
and permitting execution to continue, or it may return the result stored in location zero, so it may
produce a serious error.
3. Pointer is dangerous when use of explicit type casts in converting between pointer types
Ex: pi = malloc (sizeof (int));
pf = (float*) pi;
4. In some system, pointers have the same size as type int, since int is the default type specifier, some
programmers omit the return type when defining a function. The return type defaults to int which
can later be interpreted as a pointer. This has proven to be a dangerous practice on some computer
and the programmer is made to define explicit types for functions.
Pointers to Pointers
A variable which contains address of a pointer variable is called pointer-to-pointer
2. calloc( ):
The function calloc allocates a user- specified amount of memory and initializes the allocated memory
to 0 and a pointer to the start of the allocated memory is returned.
18 | 4 9
Data Structures and Applications – 18CS32
®
RV Institute of Technology & Management
If there is insufficient memory to make the allocation, the returned value is NULL.
19 | 4 9
Data Structures and Applications – 18CS32
®
RV Institute of Technology & Management
Syntax:
data_type *x;
x= (data_type *) calloc(n,
size);
Ex: int *x
x= calloc (10, sizeof(int));
The above example is used to define a one-dimensional array of integers. The capacity of this
array is n=10 and x [0: n-1] (x [0, 9]) are initially 0
Macro CALLOC
#define CALLOC (p, n, s)\ if
( ! ((p) = calloc (n, s)))\
{\
fprintf(stderr, “Insuffiient memory”);\
exit(EXIT_FAILURE);\
}\
3. realloc( ):
• Before using the realloc( ) function, the memory should have been allocated using malloc( )
or calloc( ) functions.
• The function relloc( ) resizes memory previously allocated by either mallor or calloc, which
means, the size of the memory changes by extending or deleting the allocated memory.
• If the existing allocated memory need to extend, the pointer value will not change.
• If the existing allocated memory cannot be extended, the function allocates a new block and
copies the contents of existing memory block into new memory block and then deletes the old
memory block.
• When realloc is able to do the resizing, it returns a pointer to the start of the new block and
when it is unable to do the resizing, the old block is unchanged and the function returns the
value NULL
Syntax:
data_type *x;
x= (data_type *) realloc(p, s );
20 | 4 9
Data Structures and Applications – 18CS32
®
RV Institute of Technology & Management
The size of the memory block pointed at by p changes to S. When s > p the additional s-p
memory block have been extended and when s < p, then p-s bytes of the old block are freed.
Macro REALLOC
#define REALLOC(p,S)
if (!((p) = realloc(p,s)))
{ printf(stderr, "Insufficient memory");\ exit(EXIT_FAILURE);
}
4. free( )
Dynamically allocated memory with either malloc( ) or calloc ( ) does not return on its own. The
programmer must use free( ) explicitly to release space.
Syntax:
free(ptr);
This statement cause the space in memory pointer by ptr to be deallocated
The number n of elements is called the length or size of the array. The length or the numbers of
elements of the array can be obtained from the index set by the formula
When LB = 0,
Length = UB – LB + 1 Length
When LB = 1,
Where,
21 | 4 9
Data Structures and Applications – 18CS32
®
RV Institute of Technology & Management
1000
1001
1002
1003
1004
Where, w is the number of words per memory cell for the array LA.
While writing computer programs, if finds ourselves in a situation where we cannot determine
how large an array to use, then a good solution to this problem is to defer this decision to run
time and allocate the array when we have a good estimate of the required array size.
Example:
int i, n, *list;
printf(“Enter the number of numbers to generate:”);
scanf(“%d”, &n);
if(n<1)
22 | 4 9
Data Structures and Applications – 18CS32
®
RV Institute of Technology & Management
{
fprintf (stderr, “Improper value of n \n”);
exit(EXIT_FAILURE);
}
MALLOC (list, n*sizeof(int));
The programs fails only when n<1 or insufficient memory to hold the list of numbers that are to
be sorted.
Two DimensionalArrays
C uses array-of-arrays representation to represent a multidimensional array. The two dimensional
arrays is represented as a one-dimensional array in which each element is itself a one-dimensional
array.
Example: int x[3][5];
int **myArray;
myArray = make2dArray(5,10);
myArray[2][4]=6;
23 | 4 9
Data Structures and Applications – 18CS32
®
RV Institute of Technology & Management
The second line allocates memory for a 5 by 10 two-dimensional array of integers and the third
line assigns the value 6 to the [2][4] element of this array.
Array Operations
1. Traversing
• Let A be a collection of data elements stored in the memory of the computer. Suppose if
the contents of the each elements of array A needs to be printed or to count the numbers of
elements of A with a given property can be accomplished by Traversing.
• Traversing is a accessing and processing each element in the array exactly once.
Hear LA is a linear array with the lower bound LB and upper bound UB. This algorithm traverses
LA applying an operation PROCESS to each element of LA using while loop.
1. [Initialize Counter] set K:= LB
2. Repeat step 3 and 4 while K ≤ UB
3. [Visit element] Apply PROCESS to LA [K]
4. [Increase counter] Set K:= K + 1
[End of step 2 loop]
5. Exit
Algorithm 2: (Traversing a Linear Array)
Hear LA is a linear array with the lower bound LB and upper bound UB. This algorithm traverses
LA applying an operation PROCESS to each element of LA using repeat – for loop.
1. Repeat for K = LB to UB
Apply PROCESS to LA [K]
[End of loop]
2. Exit.
Example:
Consider the array AUTO which records the number of automobiles sold each year from 1932 through
1984.
To find the number NUM of years during which more than 300 automobiles were sold, involves
traversing AUTO.
1. [Initialization step.] Set NUM := 0
2. Repeat for K = 1932 to 1984:
24 | 4 9
Data Structures and Applications – 18CS32
®
RV Institute of Technology & Management
2. Inserting
• Let A be a collection of data elements stored in the memory of the computer.
Inserting refers to the operation of adding another element to the collection A.
• Inserting an element at the “end” of the linear array can be easily done provided the memory
space allocated for the array is large enough to accommodate the additional element.
• Inserting an element in the middle of the array, then on average, half of the elements must be
moved downwards to new locations to accommodate the new element and keep the order of the
other elements.
Algorithm:
INSERT (LA, N, K, ITEM)
Here LA is a linear array with N elements and K is a positive integer such that K ≤ N. This algorithm
inserts an element ITEM into the Kth position in LA.
3. Deleting
• Deleting refers to the operation of removing one element to the collection A.
• Deleting an element at the “end” of the linear array can be easily done with difficulties.
• If element at the middle of the array needs to be deleted, then each subsequent
elements be moved one location upward to fill up the array.
Algorithm
DELETE (LA, N, K, ITEM)
Here LA is a linear array with N elements and K is a positive integer such that K ≤ N. this
algorithm deletes the Kth element from LA
4. Exit
Suppose NAME is an 8-element linear array, and suppose five names are in the array, as in Fig.(a).
Observe that the names are listed alphabetically, and suppose we want to keep the array names
alphabetical at all times. Suppose Ford is added to the array. Then Johnson, Smith and Wagner must
each be moved downward one location, as in Fig.(b). Next suppose Taylor is added to the array; then
Wagner must be moved, as in Fig.(c). Last, suppose Davis is removed from the array. Then the five
names Ford, Johnson, Smith, Taylor and Wagner must each be moved upward one location, as in
Fig.(d).
4. Sorting
Sorting refers to the operation of rearranging the elements of a list. Here list be a set of n
elements. The elements are arranged in increasing or decreasing order.
Ex: suppose A is the list of n numbers. Sorting A refers to the operation of rearranging the
elements of A so they are in increasing order, i.e., so that,
A[I] < A[2] < A[3] < ... < A[N]
26 | 4 9
Data Structures and Applications – 18CS32
®
RV Institute of Technology & Management
Bubble Sort
Suppose the list of numbers A[l], A[2], ... , A[N] is in memory. The bubble sort algorithm works
as follows:
Example:
27 | 4 9
Data Structures and Applications – 18CS32
®
RV Institute of Technology & Management
5. Searching
• Let DATA be a collection of data elements in memory, and suppose a specific ITEM of
information is given. Searching refers to the operation of finding the location LOC of ITEM
in DATA, or printing some message that ITEM does not appear there.
• The search is said to be successful if ITEM does appear in DATA and unsuccessful otherwise.
28 | 4 9
Data Structures and Applications – 18CS32
®
RV Institute of Technology & Management
Linear Search
Suppose DATA is a linear array with n elements. Given no other information about DATA, The
way to search for a given ITEM in DATA is to compare ITEM with each element of DATA one by one.
That is, first test whether DATA [l] = ITEM, and then test whether DATA[2] = ITEM, and so on. This
method, which traverses DATA sequentially to locate ITEM, is called linear search or sequential
search.
Average Case: The average number of comparisons required to find the location of ITEM is
approximately equal to half the number of elements in the array.
Binary Search
Suppose DATA is an array which is sorted in increasing numerical order or, equivalently,
alphabetically. Then there is an extremely efficient searching algorithm, called binary search,
which can be used to find the location LOC of a given ITEM of information in DATA.
29 | 4 9
Data Structures and Applications – 18CS32
®
RV Institute of Technology & Management
The complexity is measured by the number f(n) of comparisons to locate ITEM in DATA where
DATA contains n elements. Observe that each comparison reduces the sample size in half. Hence
we require at most f(n) comparisons to locate ITEM where
That is, the running time for the worst case is approximately equal to log2 n. One can also show
that the running time for the average case is approximately equal to the running time for the worst
case.
Multidimensional Array
• Two-Dimensional Arrays
The element of A with first subscript j and second subscript k will be denoted by AJ,K or A[J, K]
Two-dimensional arrays are called matrices in mathematics and tables in business applications.
30 | 4 9
Data Structures and Applications – 18CS32
®
RV Institute of Technology & Management
The computer keeps track of Base(A)-the address of the first element A[1, 1] of A-and
computes the address LOC(A[J, K]) of A[J, K] using the formula
31 | 4 9
Data Structures and Applications – 18CS32
®
RV Institute of Technology & Management
The element of B with subscripts K1 K2 ... , Kn will be denoted by B[K1 K2 ... , Kn]
The programming language will store the array B either in row-major order or in column- major
order.
Let C be such an n-dimensional array. The index set for each dimension of C consists of the
consecutive integers from the lower bound to the upper bound of the dimension. The length Li of
dimension i of C is the number of elements in the index set, and Li can be calculated, as
Li = upper bound - lower bound + 1
For a given subscript Ki, the effective index Ei of Li is the number of indices preceding Ki in the
index set, and Ei can be calculated from
Ei = Ki - lower bound
Then the address LOC(C[K1 K2 ... , Kn] of an arbitrary element of C can be obtained from the formula
Base(C) + w[((( ... (ENLN-1 ] + E N-1])LN-2) + ... + E3))L2 + E2)L1 + E1]
or from the formula
Base(C) + w[( ... ((E1L2 + E2)L3 + E3)L4 + ... + EN-1 )LN + EN]
according to whether C is stored in column-major or row-major order.
POLYNOMIALS
What is a polynomial?
“A polynomial is a sum of terms, where each term has a form axe , where x is the variable, a is the
coefficient and e is the exponent.”
The largest (or leading) exponent of a polynomial is called its degree. Coefficients that are zero
are not displayed. The term with exponent equal to zero does not show the variable since x raised
to a power of zero is 1.
Now if a is a variable and is of type polynomial and n < MAX_DEGREE, the polynomial A(x) =
Σai xi would be represented as:
[Link] = n
[Link][i] = an-i , 0 ≤ i ≤ n
In this representation, the coefficients is stored in order of decreasing exponents, such that [Link]
[i] is the coefficient of xn-i provided a term with exponent n-i exists;
Otherwise, [Link] [i] =0. This representation leads to very simple algorithms for most of the operations,
it wastes a lot of space.
33 | 4 9
Data Structures and Applications – 18CS32
®
RV Institute of Technology & Management
To preserve space an alternate representation that uses only one global array, terms to store all
polynomials.
• The above Fig shows how these polynomials are stored in the array terms. The index of
the first term of A and B is given by startA and startB, while finishA and finishB give the
index of the last term of A and B.
• The index of the next free location in the array is given by avail.
• For above example, startA=0, finishA=1, startB=2, finishB=5, & avail=6.
Polynomial Addition
• C function is written that adds two polynomials, A and B to obtain D =A + B.
• To produce D (x), padd( ) is used to add A (x) and B (x) term by term. Starting at position
avail, attach( ) which places the terms of D into the array, terms.
• If there is not enough space in terms to accommodate D, an error message is printed to the
standard error device & exits the program with an error condition
34 | 4 9
Data Structures and Applications – 18CS32
®
RV Institute of Technology & Management
void padd(int startA, int finishA, int startB, int finishB, int *startD,int *finishD)
{ /* add A(x) and B(x) to obtain D(x) */ float
coefficient;
*startD = avail;
while (startA <= finishA && startB <= finishB) switch(COMPARE(terms[startA].expon,
terms[startB].expon))
{
case -1: /* a expon < b expon */
attach (terms [startB].coef, terms[startB].expon);
startB++;
break;
if (coefficient)
attach (coefficient, terms[startA].expon);
startA++;
startB++;
break;
case 1: /* a expon > b expon */
attach (terms [startA].coef, terms[startA].expon);
startA++;
}
35 | 4 9
Data Structures and Applications – 18CS32
®
RV Institute of Technology & Management
Analysis of padd( ):
The number of non-zero terms in A and B is the most important factors in analyzing the time
complexity.
Let m and n be the number of non-zero terms in A and B, If m >0 and n > 0, the while loop is
entered. Each iteration of the loop requires O(1) time. At each iteration, the value of startA or startB
or both is incremented. The iteration terminates when either startA or startB exceeds finishA or
finishB. The number of iterations is bounded by m + n -1
The time for the remaining two for loops is bounded by O(n + m) because we cannot iterate the
first loop more than m times and the second more than n times. So, the asymptotic computing time
of this algorithm is O(n +m).
SPARSE MATRICES
A matrix contains m rows and n columns of elements as illustrated in below Figs. In this Fig, the
elements are numbers. The first matrix has five rows and three columns and the second has six rows
and six columns. We write m x n (read "m by n") to designate a matrix with m rows and n columns.
The total number of elements in such a matrix is mn. If m equals n, the matrix is square.
36 | 4 9
Data Structures and Applications – 18CS32
®
RV Institute of Technology & Management
Important Note:
A sparse matrix can be represented in 1-Dimension, 2- Dimension and 3- Dimensional array.
When a sparse matrix is represented as a two-dimensional array as shown in
Fig B, more space is wasted.
Example: consider the space requirements necessary to store a 1000 x 1000 matrix that has only
2000 non-zero elements. The corresponding two-dimensional array requires space for 1,000,000
elements. The better choice is by using a representation in which only the nonzero elements are
stored.
• The below Fig shows the representation of matrix in the array “a” a[0].row contains the
number of rows, a[0].col contains the number of columns and a[0].value contains the total
number of nonzero entries.
• Positions 1 through 8 store the triples representing the nonzero entries. The row index is in
the field row, the column index is in the field col, and the value is in the field value. The
triples are ordered by row and within rows bycolumns.
37 | 4 9
Data Structures and Applications – 18CS32
®
RV Institute of Technology & Management
a[0] 6 6 8 b[0] 6 6 8
[1] 0 0 15 [1] 0 0 15
[2] 0 3 22 [2] 0 4 91
[3] 0 5 -15 [3] 1 1 11
[4] 1 1 11 [4] 2 1 3
[5] 1 2 3 [5] 2 5 28
[6] 2 3 -6 [6] 3 0 22
[7] 4 0 91 [7] 3 2 -6
[8] 5 2 28 [8] 5 0 -15
Fig 1.18 Sparse matrix stored as triple Fig 1.19 Transpose matrix stored as triple
Transposing a Matrix
To transpose a matrix, interchange the rows and columns. This means that each element
a[i][j] in the original matrix becomes element a[j][i] in the transpose matrix.
The columns within each row of the transpose matrix will be arranged in ascending order. void
transpose (term a[], termb[])
{ /* b is set to the transpose of a */
int n, i, j, currentb;
n = a[0].value; /* total number of elements */
b[0].row = a[0].col; /* rows in b = columns in a */
b[0].col = a[0].row; /* columns in b = rows in a */
b[0].value = n;
if (n > 0)
38 | 4 9
Data Structures and Applications – 18CS32
®
RV Institute of Technology & Management
{ currentb = 1;
for (i = 0; i < a[O].col; i++)
for (j= 1; j<=n; j++)
if (a[j].col == i)
{
b[currentb].row = a[j].col; b[currentb].col
= a[j].row; b[currentb].value = a[j].value;
currentb++;
}
}
}
Transpose of a sparse matrix
Strings
• Basic Terminology
Each programming languages contains a character set that is used to communicate with the
computer. The character set include the following:
Alphabet: ABCDEFGHIJKLMNOPQRSTUVWXYZ
Digits: 012345678 9
Special characters: + - / * ( ) , . $ = ‘ _ (Blank space)
Concatenation: Let S1 and S2 be the strings. The string consisting of the characters of S1
followed by the character S2 is called Concatenation of S1 and S2.
Ex: ‘THE’ // ‘END’ = ‘THEEND’ ‘THE’
// ‘ ’ // ‘END’ = ‘THE END’
Substring: A string Y is called substring of a string S if there exist string X and Z such that S
= X // Y // Z
If X is an empty string, then Y is called an Initial substring of S, and Z is an empty string then Y
is called a terminal substring of S.
Ex: ‘BE OR NOT’ is a substring of ‘TO BE OR NOT TO BE’
‘THE’ is an initial substring of ‘THE END’
STRINGS IN C
In C, the strings are represented as character arrays terminated with the null character \0.
39 | 4 9
Data Structures and Applications – 18CS32
®
RV Institute of Technology & Management
Declaration 1:
#define MAX_SIZE 100 /* maximum size of string */
char s[MAX_SIZE] = {“dog”};
char t[MAX_SIZE] = {“house”};
s[0] s[1] s[2] s[3] t[0] t[1] t[2] t[3] t[4] t[4]
d o g \0 h O u s e \0
Declaration 2:
char s[ ] = {“dog”};
char t[ ] = {“house”};
Using these declarations, the C compiler will allocate just enough space to hold each word including
the null character.
STORING STRINGS
Example: Suppose the input consists of the program. Using a record oriented, fixed length storage
medium, the input data will appear in memory as pictured below.
40 | 4 9
Data Structures and Applications – 18CS32
®
RV Institute of Technology & Management
Suppose, if new record needs to be inserted, then it requires that all succeeding records be
moved to new memory location. This disadvantages can be easily remedied as shown in below
Fig.
That is, one can use a linear array POINT which gives the address of successive record, so that
the records need not be stored in consecutive locations in memory. Inserting a new record will
require only an updating of the array POINT.
41 | 4 9
Data Structures and Applications – 18CS32
®
RV Institute of Technology & Management
Linked Storage
• Most extensive word processing applications, strings are stored by means of linked lists.
• In a one way linked list, a linearly ordered sequence of memory cells called nodes, where
each node contains an item called a link, which points to the next node in the list, i.e.,
which consists the address of the nextnode.
Each memory cell is assigned one character or a fixed number of characters and a link contained
in the cell gives the address of the cell containing the next character or group of character in the
string.
Ex: TO BE OR NOT TO BE
42 | 4 9
Data Structures and Applications – 18CS32
®
RV Institute of Technology & Management
Constants
Many programming languages denotes string constants by placing the string in either single or
double quotation marks.
Ex: ‘THE END’
“THE BEGINNING”
The string constants of length 7 and 13 characters respectively.
Variables
Each programming languages has its own rules for forming character variables. These variables
fall into one of three categories
1. Static: In static character variable, whose length is defined before the program is
executed and cannot change throughout the program
2. Semi-static: The length of the variable may vary during the execution of the program as
long as the length does not exceed a maximum value determined by the program before the
program is executed.
3. Dynamic: The length of the variable can change during the execution of the program.
String Operations
Substring
Accessing a substring from a given string requires three pieces of information:
(1) The name of the string or the string itself
(2) The position of the first character of the substring in the given string
(3) The length of the substring or the position of the last character of the substring.
The syntax denote the substring of a string S beginning in a position K and having a length L.
Indexing
Indexing also called pattern matching, refers to finding the position where a string pattern P
first appears in a given string text T. This operation is called INDEX
If the pattern P does not appears in the text T, then INDEX is assigned the value 0. The
arguments “text” and “pattern” can be either string constant or string variable.
43 | 4 9
Data Structures and Applications – 18CS32
®
RV Institute of Technology & Management
Concatenation
Let S1 and S2 be string. The concatenation of S1 and S2 which is denoted by S1 // S2, is the string
consisting of the characters of S1 followed by the character of S2.
Ex:
(a) Suppose S1 = 'MARK' and S2= ‘TWAIN' then
S1 // S2 = ‘MARKTWAIN’
44 | 4 9
Data Structures and Applications – 18CS32
®
RV Institute of Technology & Management
Pattern matching is the problem of deciding whether or not a given string pattern P appears in a
string text T. The length of P does not exceed the length of T.
45 | 4 9
Data Structures and Applications – 18CS32
®
RV Institute of Technology & Management
Observation of algorithms
• P is an r-character string and T is an s-character string
• Algorithm contains two loops, one inside the other. The outer loop runs through each
successive R-character substring WK = T[K] T[K + 1] ... T[K+R-l] of T.
• The inner loop compares P with WK, character by character. If any character does not match,
then control transfers to Step 5, which increases K and then leads to the next substring of T.
• If all the R characters of P do match those of some WK then P appears in T and K is the
INDEX of P in T.
• If the outer loop completes all of its cycles, then P does not appear in T and so INDEX
= 0.
Complexity
The complexity of this pattern matching algorithm is equal to O(n2)
This algorithm contains the table that is used for the pattern P = aaba.
The table is obtained as follows.
• Let Qi denote the initial substring of P of length i, hence Q0 = A, Q1 = a, Q2 = a2, Q3
= aab, Q4 = aaba = P (Here Q0 = A is the empty string.)
• The rows of the table are labeled by these initial substrings of P, excluding P itself.
• The columns of the table are labeled a, b and x, where x represents any character that doesn't
appear in the pattern P.
• Let f be the function determined by the table; i.e., let f(Qi, t) denote the entry in the table in
row Qi and column t (where t is any character). This entry f(Qi, t) is defined to be the largest Q
that appears as a terminal substring in the string (Qi t) the concatenation of Qi and t.
For example,
a2 is the largest Q that is a terminal substring of Q2a = a3, so f(Q2, a) = Q2 A is
the largest Q that is a terminal substring of Q1b = ab, so f(Q1, b) = Q0 a is the
largest Q that is a terminal substring of Q0a = a, so f(Q0, a) = Q1
A is the largest Q that is a terminal substring of Q3a = a3bx, so f(Q3, x) = Q0
46 | 4 9
Data Structures and Applications – 18CS32
®
RV Institute of Technology & Management
47 | 4 9
Data Structures and Applications – 18CS32
®
RV Institute of Technology & Management
Algorithm: (PATTERN MATCHING) The pattern matching table F(Q1, T) of a pattern P is in memory,
and the input is an N-character string T = T1 T2 T3 …… TN. The algorithm finds the INDEX of P in T.
48 | 4 9
Data Structures and Applications – 18CS32