SlideShare une entreprise Scribd logo
1  sur  26
© Oxford University Press 2011. All rights reserved.
Data Structures Using C
Reema Thareja, Assistant Professor, Institute of
Information Technology and Management,
New Delhi
© Oxford University Press 2011. All rights reserved.
CHAPTER 5
ARRAYS
© Oxford University Press 2011. All rights reserved.
INTRODUCTION
• An array is a collection of similar data elements.
• These data elements have the same data type.
• The elements of the array are stored in consecutive memory locations and are referenced by an
index (also known as the subscript).
• Declaring an array means specifying three things:
The data type- what kind of values it can store ex, int, char, float
Name- to identify the array
The size- the maximum number of values that the array can hold
• Arrays are declared using the following syntax.
type name[size];
1st
element
2nd
element
3rd
element
4th
element
5th
element
6th
element
7th
element
8th
element
9th
element
10th
element
marks[0] marks[1] marks[2] marks[3] marks[4] marks[5] marks[6] marks[7] marks[8] marks[9]
© Oxford University Press 2011. All rights reserved.
ACCESSING ELEMENTS OF THE ARRAY
To access all the elements of the array, you must use a loop. That is, we can access all the
elements of the array by varying the value of the subscript into the array. But note that the
subscript must be an integral value or an expression that evaluates to an integral value.
int i, marks[10];
for(i=0;i<10;i++)
marks[i] = -1;
CALCULATING THE ADDRESS OF ARRAY
ELEMENTS
Address of data element, A[k] = BA(A) + w( k – lower_bound)
Here, A is the array
k is the index of the element of which we have to calculate the address
BA is the base address of the array A.
w is the word size of one element in memory, for example, size of int is 2.
99 67 78 56 88 90 34 85
Marks[0] marks[1] marks[2] marks[3] marks[4] marks[5] marks[6] marks[7]
marks[7] 1000 1002 1004 1006 1008 1010 1012 1014
Marks[4] = 1000 + 2(4 – 0)
= 1000 + 2(4) = 1008
© Oxford University Press 2011. All rights reserved.
STORING VALES IN ARRAYS
Store values in the array
Initialize the elements
Input values for the elements
Assign values to the elements
Initialization of Arrays
Arrays are initialized by writing,
type array_name[size]={list of values};
int marks[5]={90, 82, 78, 95, 88};
int i, marks[10];
for(i=0;i<10;i++)
scanf(“%d”, &marks[i]);
Assigning Values
int i, arr1[10], arr2[10];
for(i=0;i<10;i++)
arr2[i] = arr1[i];
Inputting Values
CALCULATING THE LENGTH OF THE ARRAY
Length = upper_bound – lower_bound + 1
Where, upper_bound is the index of the last element
and lower_bound is the index of the first element in the array
99 67 78 56 88 90 34 85
Marks[0] marks[1] marks[2] marks[3] marks[4] marks[5] marks[6 marks[7]]
Here, lower_bound = 0, upper_bound = 7
Therefore, length = 7 – 0 + 1 = 8
© Oxford University Press 2011. All rights reserved.
WRITE A PROGRAM TO READ AND DISPLAY N NUMBERS USING
AN ARRAY
#include<stdio.h>
#include<conio.h>
int main()
{
int i=0, n, arr[20];
clrscr();
printf(“n Enter the number of elements : “);
scanf(“%d”, &n);
for(i=0;i<n;i++)
{
printf(“n Arr[%d] = “, i);
scanf(“%d”,&num[i]);
}
printf(“n The array elements are “);
for(i=0;i<n;i++)
printf(“Arr[%d] = %dt”, i, arr[i]);
return 0;
}
© Oxford University Press 2011. All rights reserved.
INSERTING AN ELEMENT IN THE ARRAY
Algorithm to insert a new element to the end of the array.
Step 1: Set upper_bound = upper_bound + 1
Step 2: Set A[upper_bound] = VAL
Step 3; EXIT
The algorithm INSERT will be declared as INSERT( A, N, POS, VAL).
Step 1: [INITIALIZATION] SET I = N
Step 2: Repeat Steps 3 and 4 while I >= POS
Step 3: SET A[I + 1] = A[I]
Step 4: SET I = I – 1
[End of Loop]
Step 5: SET N = N + 1
Step 6: SET A[POS] = VAL
Step 7: EXIT
Calling INSERT (Data, 6, 3, 100) will lead to the following processing in the array
45 23 34 12 56 20 20
Data[0] Data[1] Data[2] Data[3] Data[4] Data[5] Data[6]
45 23 34 12 56 56 20
Data[0] Data[1] Data[2] Data[3] Data[4] Data[5] Data[6]
45 23 34 12 12 56 20
Data[0] Data[1] Data[2] Data[3] Data[4] Data[5] Data[6]
45 23 34 100 12 56 20
Data[0] Data[1] Data[2] Data[3] Data[4] Data[5] Data[6]
© Oxford University Press 2011. All rights reserved.
DELETING AN ELEMENT FROM THE ARRAY
Algorithm to delete an element from the end of the array
Step 1: Set upper_bound = upper_bound - 1
Step 2: EXIT
Step 1: [INITIALIZATION] SET I = POS
Step 2: Repeat Steps 3 and 4 while I <= N - 1
Step 3: SET A[I] = A[I + 1]
Step 4: SET I = I + 1
[End of Loop]
Step 5: SET N = N - 1
Step 6: EXIT
The algorithm DELETE will be declared as DELETE( A, N, POS).
Calling DELETE (Data, 6, 2) will lead to the following processing in the array
45
23 12 12 56
20
Data[0] Data[1] Data[2] Data[3] Data[4] Data[5]
45 23 34 12 56 20
Data[0] Data[1] Data[2] Data[3] Data[4] Data[5]
45
23 12 56 56
20
Data[0] Data[1] Data[2] Data[3] Data[4] Data[5]
45
23 12 56 20
20
Data[0] Data[1] Data[2] Data[3] Data[4] Data[5]
45
23 12 56 20
Data[0] Data[1] Data[2] Data[3] Data[4]
© Oxford University Press 2011. All rights reserved.
LINEAR SEARCH
LINEAR_SEARCH(A, N, VAL, POS)
Step 1: [INITIALIZE] SET POS = -1
Step 2: [INITIALIZE] SET I = 0
Step 3: Repeat Step 4 while I<N
Step 4: IF A[I] = VAL, then
SET POS = I
PRINT POS
Go to Step 6
[END OF IF]
[END OF LOOP]
Step 5: PRINT “Value Not Present In The Array”
Step 6: EXIT
BINARY SEARCH
BEG = lower_bound and END = upper_bound
MID = (BEG + END) / 2
If VAL < A[MID], then VAL will be present in the left segment of the array. So,
the value of END will be changed as, END = MID – 1
If VAL > A[MID], then VAL will be present in the right segment of the array. So,
the value of BEG will be changed as, BEG = MID + 1
© Oxford University Press 2011. All rights reserved.
BINARY_SEARCH(A, lower_bound, upper_bound, VAL, POS)
Step 1: [INITIALIZE] SET BEG = lower_bound, END = upper_bound, POS = -1
Step 2: Repeat Step 3 and Step 4 while BEG <= END
Step 3: SET MID = (BEG + END)/2
Step 4: IF A[MID] = VAL, then
POS = MID
PRINT POS
Go to Step 6
IF A[MID] > VAL then;
SET END = MID - 1
ELSE
SET BEG = MID + 1
[END OF IF]
[END OF LOOP]
Step 5: IF POS = -1, then
PRINTF “VAL IS NOT PRESENT IN THE ARRAY”
[END OF IF]
Step 6: EXIT
int A[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
and VAL = 9, the algorithm will proceed in the following manner.
BEG = 0, END = 10, MID = (0 + 10)/2 = 5
Now, VAL = 9 and A[MID] = A[5] = 5
A[5] is less than VAL, therefore, we will now search for the value in the later half of the array. So, we change the values of
BEG and MID.
Now, BEG = MID + 1 = 6, END = 10, MID = (6 + 10)/2 =16/2 = 8
Now, VAL = 9 and A[MID] = A[8] = 8
A[8] is less than VAL, therefore, we will now search for the value in the later half of the array. So, again we change the
values of BEG and MID.
Now, BEG = MID + 1 = 9, END = 10, MID = (9 + 10)/2 = 9
Now VAL = 9 and A[MID] = 9.
Now VAL = 9 and A[MID] = 9.
© Oxford University Press 2011. All rights reserved.
ONE DIMENSIONAL ARRAYS FOR INTER FUNCTION
COMMUNICATION
1D Arrays For Inter Function Communication
Passing individual elements Passing entire array
Passing individual elements Passing entire array
Passing data values
main()
{
int arr[5] ={1, 2, 3, 4, 5};
func(arr[3]);
}
void func(int num)
{
printf("%d", num);
}
Passing addresses
main()
{
int arr[5] ={1, 2, 3, 4, 5};
func(&arr[3]);
}
void func(int *num)
{
printf("%d", num);
}
Passing the entire array
main()
{
int arr[5] ={1, 2, 3, 4, 5};
func(arr);
}
moid func(int arr[5])
{
int i;
for(i=0;i<5;i++)
printf("%d", arr[i]);
© Oxford University Press 2011. All rights reserved.
© Oxford University Press 2011. All rights reserved.
POINTERS AND ARRAYS
int arr[5] = {1, 2, 3, 4, 5};
int *ptr = &arr[0];
ptr++;
printf(“n The value of the second element of the array is %d”, *ptr);
Write a program to read and display an array of n integers
#include<stdio.h>
int main()
{
int i, n;
int arr[10], *parr;
parr = arr;
printf(“n Enter the number of elements : “);
scanf(“%d”, &n);
for(i=0; i <n; i++)
scanf(“%d”, (parr+i));
for(i=0; i <n; i++)
printf(“n arr[%d] = %d”, i, *(parr+i));
}
© Oxford University Press 2011. All rights reserved.
ARRAY OF POINTERS
An array of pointers can be declared as
int *ptr[10]
The above statement declares an array of 10 pointers where each of the pointer points to an
integer variable. For example, look at the code given below.
int *ptr[10];
int p=1, q=2, r=3, s=4, t=5;
ptr[0]=&p;
ptr[1]=&q;
ptr[2]=&r;
ptr[3]=&s;
ptr[4]=&t
Can you tell what will be the output of the following statement?
printf(“n %d”, *ptr[3]);
Yes, the output will be 4 because ptr[3] stores the address of integer variable s and *ptr[3] will
therefore print the value of s that is 4.
© Oxford University Press 2011. All rights reserved.
TWO DIMENSIONAL ARRAYS
• A two dimensional array is specified using two subscripts where one subscript denotes row
and the other denotes column.
• C looks a two dimensional array as an array of a one dimensional array.
Second Dimension
A two dimensional array is declared as:
data_type array_name[row_size][column_size];
Therefore, a two dimensional mXn array is an
array that contains m*n data elements and each
element is accessed using two subscripts, i and j
where i<=m and j<=n
int marks[3][5]
Rows/Columns
Col 0 Col 1 Col2 Col 3 Col 4
Row 0 Marks[0][0] Marks[0][1] Marks[0][2] Marks[0][3] Marks[0][4]
Row 1 Marks[1][0] Marks[1][1] Marks[1][2] Marks[1][3] Marks[1][4]
Row 2 Marks[2][0] Marks[2][1] Marks[2][2] Marks[2][3] Marks[2][4]
Two Dimensional Array
© Oxford University Press 2011. All rights reserved.
MEMORY REPRESENTATION OF A TWO DIMENSIONAL ARRAY
There are two ways of storing a 2-D array can be stored in memory. The first way is row major
order and the second is column major order.
In the row major order the elements of the first row are stored before the elements of the second
and third row. That is, the elements of the array are stored row by row where n elements of the
first row will occupy the first nth locations.
(0,0) (0, 1) (0,2) (0,3) (1,0) (1,1) (1,2) (1,3) (2,0) (2,1) (2,2) (2,3)
However, when we store the elements in a column major order, the elements of the first column
are stored before the elements of the second and third column. That is, the elements of the
array are stored column by column where n elements of the first column will occupy the first nth
locations.
(0,0) (1,0) (2,0) (3,0) (0,1) (1,1) (2,1 (3,1) (0,2) (1,2) (2,2) (3,2)
Address(A[I][J] = Base_Address + w{M ( J - 1) + (I - 1)}, if the array elements are stored in column
major order.
And, Address(A[I][J] = Base_Address + w{N ( I - 1) + (J - 1)}, if the array elements are stored in row
major order.
Where, w is the number of words stored per memory location
m, is the number of columns
n, is the number of rows
I and J are the subscripts of the array element
© Oxford University Press 2011. All rights reserved.
TWO DIMENSIONAL ARRAYS CONTD..
• A two dimensional array is initialized in the same was as a single dimensional array is initialized. For example,
int marks[2][3]={90, 87, 78, 68, 62, 71};
int marks[2][3]={{90,87,78},{68, 62, 71}};
Write a program to print the elements of a 2D array
• #include<stdio.h>
• #include<conio.h>
• main()
• {
• int arr[2][2] = {12, 34, 56,32};
• int i, j;
• for(i=0;i<2;i++)
• {
• printf("n");
• for(j=0;j<2;j++)
• printf("%dt", arr[i][j]);
• }
• return 0;
• }
© Oxford University Press 2011. All rights reserved.
TWO DIMENSIONAL ARRAYS FOR INTER FUNCTION
COMMUNICATION
Passing individual elements Passing a row
2D Array for Inter Function Communication
Passing the entire 2D array
There are three ways of passing parts of the two dimensional array to a function. First, we can pass
individual elements of the array. This is exactly same as we passed element of a one dimensional
array.
Passing a row
main()
{
int arr[2][3]= ( {1, 2, 3}, {4, 5, 6} };
func(arr[1]);
}
void func(int arr[])
{
int i;
for(i=0;i<5;i++)
printf("%d", arr[i] * 10);
}
Passing the entire 2D array
To pass a two dimensional array to a function, we use the array name as the actual parameter.
(The same we did in case of a 1D array). However, the parameter in the called function must
indicate that the array has two dimensions.
© Oxford University Press 2011. All rights reserved.
PROGRAM ILLUSTRATING PASSING ENTIRE ARRAY TO A FUNCTION
• #include<stdio.h>
• void read_matrix(int mat[][], int, int);
• void sum_matrix(int mat1[][], int mat2[][], int, int);
• void display_matrix(int mat[5][5], int r, int c);
• int main()
• { int row, col, mat1[5][5], mat2[5][5];
• printf(“n Enter the number of rows and columns of the matrix : “);
• scanf(“%d %d”, row, col);
• read_matrix(mat1, row, col);
• printf(“n Enter the second matrix : “);
• read_matrix(mat2, row, col);
• sum_matrix(mat1, mat2, row, col);
• }
• void read_matrix(int mat[5][5], int r, int c)
• { int i, j;
• for(i=0;i<r;i++)
• { for(j=0;j<c;j++)
• { printf(“n mat[%d][%d] = “);
• scanf(“%d“, &mat[i][j]);
• }
• }
• }
• void sum_matrix(int mat1[5][5], mat2[5][5], int r, int c)
• { int i, j, sum[5][5];
• for(i=0;i<r;i++)
• { for(j=0;j<c;j++)
• sum[i][j] = mat1[i][j] + mat2[i][j];
• }
• display_matrix(sum, r, c);
• }
• void display_matrix(int mat[5][5], int r, int c)
• { int i, j;
• for(i=0;i<r;i++)
• { printf(“n”);
• for(j=0;j<c;j++)
• printf(“t mat[%d][%d] = %d“, mat[i][j]);
© Oxford University Press 2011. All rights reserved.
ARRAY OF FUNCTION POINTERS
When an array of function pointers is made the appropriate function is selected using an index. The
code given below shows the way to define and use an array of function pointers in C.
Step 1: Use typedef keyword so that 'fp' can be used as type
typedef int (*fp)(int, int);
Step2: Define the array and initialize each element to NULL. This can be done in two ways // with
10 pointers to functions which return an int and take two ints
First Way: fp funcArr[10] = {NULL};
Second Way: int (*funcArr[10])(int, int) = {NULL};
Step 3: Assign the function's address - 'Add' and 'Subtract'
funcArr1[0] = funcArr2[1] = &Add;
funcArr[0] = &Add; funcArr[1] = &Subtract;
Step 4: Call the function using an index to address the function pointer
printf("%dn", funcArr[1](2, 3)); // short form
printf("%dn", (*funcArr[0])(2, 3)); // "correct" way Let us now write a program that uses array of
function pointers
© Oxford University Press 2011. All rights reserved.
• #include <stdio.h>
int sum(int a, int b);
int subtract(int a, int b);
int mul(int a, int b);
int div(int a, int b);
int (*fp[4]) (int a, int b);
int main(void)
{ int result;
int num1, num2, op;
p[0] = sum;
p[1] = subtract;
p[2] = mul;
p[3] = div;
printf("n Enter the numbers: ");
• scanf("%d %d", &num1, &num2);
• do
• { printf("n 0: Add n 1: Subtract n 2: Multiply n 3: Divide n 4. EXIT");
• printf("Enter the operation: ");
• scanf("%d", &op);
result = (*fp[op]) (num1, num2);
printf("%d", result);
} while(op!=4);
}
int sum(int a, int b)
{ return a + b; }
int subtract(int a, int b)
{ return a - b; }
int mul(int a, int b)
{ return a * b; }
int div(int a, int b)
{ if(b)
return a / b;
© Oxford University Press 2011. All rights reserved.
POINTERS AND TWO DIMENSIONAL ARRAY
• Individual elements of the array mat can be accessed using either:
mat[i][j] or *(*(mat + i) + j) or*(mat[i]+j);
• See pointer to a one dimensional array can be declared as,
int arr[]={1,2,3,4,5};
int *parr;
parr=arr;
• Similarly, pointer to a two dimensional array can be declared as,
int arr[2][2]={{1,2},{3,4}};
int (*parr)[2];
parr=arr;
• Look at the code given below which illustrates the use of a pointer to a two dimensional array.
• #include<stdio.h>
main()
{ int arr[2][2]={{1,2}.{3,4}};
int i, (*parr)[2];
parr=arr;
for(i=0;i<2;i++)
{ for(j=0;j<2;j++)
printf(" %d", (*(parr+i))[j]);
}
}
OUTPUT
© Oxford University Press 2011. All rights reserved.
MULTI DIMENSIONAL ARRAYS
• A multi dimensional array is an array of arrays.
• Like we have one index in a single dimensional array, two indices in a two dimensional array, in
the same way we have n indices in a n-dimensional array or multi dimensional array.
• Conversely, an n dimensional array is specified using n indices.
• An n dimensional m1 x m2 x m3 x ….. mn array is a collection m1*m2*m3* ….. *mn elements.
• In a multi dimensional array, a particular element is specified by using n subscripts as
A[I1][I2][I3]…[In], where,
I1<=M1 I2<=M2 I3 <= M3 ……… In <= Mn
© Oxford University Press 2011. All rights reserved.
PROGRAM TO READ AND DISPLAY A 2X2X2 ARRAY
#include<stdio.h>
int main()
{ int array1[3][3][3], i, j, k;
printf(“n Enter the elements of the matrix”);
printf(“n ******************************”);
for(i=0;i<2;i++)
{ for(j=0;j<2;j++)
{
for(k=0;k<2;k++)
{
printf(“n array[%d][ %d][ %d] = ”, i, j, k);
scanf(“%d”, &array1[i][j][k]);
}
}
}
printf(“n The matrix is : “);
printf(“n *********************************”)l
for(i=0;i<2;i++)
{ printf(“nn”);
for(j=0;j<2;j++)
{
printf(“n”);
for(k=0;k<2;k++)
printf(“t array[%d][ %d][ %d] = %d”, i, j, k, array1[i][j][k]);
}
}
© Oxford University Press 2011. All rights reserved.
SPARSE MATRIX
• Sparse matrix is a matrix that has many elements with a value zero.
• In order to efficiently utilize the memory, specialized algorithms and data structures that take
advantage of the sparse structure of the matrix should be used. Otherwise, execution will
slow down and the matrix will consume large amounts of memory.
• There are two types of sparse matrices. In the first type of sparse matrix, all elements above
the main diagonal have a value zero. This type of sparse matrix is also called a (lower)
triagonal matrix. In a lower triangular matrix, Ai,j = 0 where i<j.
• An nXn lower triangular matrix A has one non zero element in the first row, two non zero
element in the second row and likewise, n non zero elements in the nth row.
1
5 3
2 7 -1
3 1 4 2
-9 2 -8 1 7
• In an upper triangular matrix Ai,j = 0 where i>j.
•An nXn upper triangular matrix A has n non zero element in the first row, n-1 non zero element in
the second row and likewise, 1 non zero elements in the nth row.
1 2 3 4 5
3 6 7 8
-1 9 1
9 3
7
© Oxford University Press 2011. All rights reserved.
SPARSE MATRIX CONTD.
• In the second variant of a sparse matrix, elements with a non-zero value can appear only on the
diagonal or immediately above or below the diagonal. This type of matrix is also called a
tridiagonal matrix.
• In a tridiagonal matrix, Ai,j = 0 where | i – j| > 1. Therefore, if elements are present on
• the main diagonal the, it contains non-zero elements for i=j. In all there will be n elements
• diagonal below the main diagonal, it contains non zero elements for i=j+1. In all there will be n-1
elements
• diagonal above the main diagonal, it contains non zero elements for i=j-1. In all there will be n-1
elements
4 1
5 1 2
9 3 1
4 2 2
5 1 9
6 7

Contenu connexe

Tendances (20)

Structure in c
Structure in cStructure in c
Structure in c
 
Array and string
Array and stringArray and string
Array and string
 
Pointers in c++
Pointers in c++Pointers in c++
Pointers in c++
 
Enums in c
Enums in cEnums in c
Enums in c
 
Strings
StringsStrings
Strings
 
358 33 powerpoint-slides_8-linked-lists_chapter-8
358 33 powerpoint-slides_8-linked-lists_chapter-8358 33 powerpoint-slides_8-linked-lists_chapter-8
358 33 powerpoint-slides_8-linked-lists_chapter-8
 
Storage Class in C Progrmming
Storage Class in C Progrmming Storage Class in C Progrmming
Storage Class in C Progrmming
 
File in C language
File in C languageFile in C language
File in C language
 
Structure in c language
Structure in c languageStructure in c language
Structure in c language
 
Pointers in C Language
Pointers in C LanguagePointers in C Language
Pointers in C Language
 
Array
ArrayArray
Array
 
C pointer
C pointerC pointer
C pointer
 
Pointers C programming
Pointers  C programmingPointers  C programming
Pointers C programming
 
Class and object in C++
Class and object in C++Class and object in C++
Class and object in C++
 
Function C programming
Function C programmingFunction C programming
Function C programming
 
Functions in c language
Functions in c language Functions in c language
Functions in c language
 
Pointers in c++
Pointers in c++Pointers in c++
Pointers in c++
 
File handling in c
File handling in cFile handling in c
File handling in c
 
Structure in C language
Structure in C languageStructure in C language
Structure in C language
 
This pointer
This pointerThis pointer
This pointer
 

En vedette

358 33 powerpoint-slides_4-introduction-data-structures_chapter-4
358 33 powerpoint-slides_4-introduction-data-structures_chapter-4358 33 powerpoint-slides_4-introduction-data-structures_chapter-4
358 33 powerpoint-slides_4-introduction-data-structures_chapter-4sumitbardhan
 
358 33 powerpoint-slides_13-graphs_chapter-13
358 33 powerpoint-slides_13-graphs_chapter-13358 33 powerpoint-slides_13-graphs_chapter-13
358 33 powerpoint-slides_13-graphs_chapter-13sumitbardhan
 
358 33 powerpoint-slides_10-trees_chapter-10
358 33 powerpoint-slides_10-trees_chapter-10358 33 powerpoint-slides_10-trees_chapter-10
358 33 powerpoint-slides_10-trees_chapter-10sumitbardhan
 
358 33 powerpoint-slides_9-stacks-queues_chapter-9
358 33 powerpoint-slides_9-stacks-queues_chapter-9358 33 powerpoint-slides_9-stacks-queues_chapter-9
358 33 powerpoint-slides_9-stacks-queues_chapter-9sumitbardhan
 

En vedette (6)

358 33 powerpoint-slides_4-introduction-data-structures_chapter-4
358 33 powerpoint-slides_4-introduction-data-structures_chapter-4358 33 powerpoint-slides_4-introduction-data-structures_chapter-4
358 33 powerpoint-slides_4-introduction-data-structures_chapter-4
 
358 33 powerpoint-slides_13-graphs_chapter-13
358 33 powerpoint-slides_13-graphs_chapter-13358 33 powerpoint-slides_13-graphs_chapter-13
358 33 powerpoint-slides_13-graphs_chapter-13
 
358 33 powerpoint-slides_10-trees_chapter-10
358 33 powerpoint-slides_10-trees_chapter-10358 33 powerpoint-slides_10-trees_chapter-10
358 33 powerpoint-slides_10-trees_chapter-10
 
1 D Arrays in C++
1 D Arrays in C++1 D Arrays in C++
1 D Arrays in C++
 
358 33 powerpoint-slides_9-stacks-queues_chapter-9
358 33 powerpoint-slides_9-stacks-queues_chapter-9358 33 powerpoint-slides_9-stacks-queues_chapter-9
358 33 powerpoint-slides_9-stacks-queues_chapter-9
 
Arrays In C++
Arrays In C++Arrays In C++
Arrays In C++
 

Similaire à 358 33 powerpoint-slides_5-arrays_chapter-5 (20)

Chapter 10.ppt
Chapter 10.pptChapter 10.ppt
Chapter 10.ppt
 
Arrays
ArraysArrays
Arrays
 
Arrays in C language
Arrays in C languageArrays in C language
Arrays in C language
 
Arrays & Strings
Arrays & StringsArrays & Strings
Arrays & Strings
 
Chapter 13.pptx
Chapter 13.pptxChapter 13.pptx
Chapter 13.pptx
 
INDIAN INSTITUTE OF TECHNOLOGY KANPUR ESC 111M Lec12.pptx
INDIAN INSTITUTE OF TECHNOLOGY KANPUR ESC 111M Lec12.pptxINDIAN INSTITUTE OF TECHNOLOGY KANPUR ESC 111M Lec12.pptx
INDIAN INSTITUTE OF TECHNOLOGY KANPUR ESC 111M Lec12.pptx
 
Data structure array
Data structure  arrayData structure  array
Data structure array
 
Fp201 unit4
Fp201 unit4Fp201 unit4
Fp201 unit4
 
Array 31.8.2020 updated
Array 31.8.2020 updatedArray 31.8.2020 updated
Array 31.8.2020 updated
 
Arrays
ArraysArrays
Arrays
 
Arrays 1D and 2D , and multi dimensional
Arrays 1D and 2D , and multi dimensional Arrays 1D and 2D , and multi dimensional
Arrays 1D and 2D , and multi dimensional
 
COM1407: Arrays
COM1407: ArraysCOM1407: Arrays
COM1407: Arrays
 
Array notes
Array notesArray notes
Array notes
 
Arrays
ArraysArrays
Arrays
 
02 arrays
02 arrays02 arrays
02 arrays
 
Array.pptx
Array.pptxArray.pptx
Array.pptx
 
Array in C.pdf
Array in C.pdfArray in C.pdf
Array in C.pdf
 
Array.pdf
Array.pdfArray.pdf
Array.pdf
 
Chap 6 c++
Chap 6 c++Chap 6 c++
Chap 6 c++
 
2DArrays.ppt
2DArrays.ppt2DArrays.ppt
2DArrays.ppt
 

Plus de sumitbardhan

358 33 powerpoint-slides_15-hashing-collision_chapter-15
358 33 powerpoint-slides_15-hashing-collision_chapter-15358 33 powerpoint-slides_15-hashing-collision_chapter-15
358 33 powerpoint-slides_15-hashing-collision_chapter-15sumitbardhan
 
358 33 powerpoint-slides_14-sorting_chapter-14
358 33 powerpoint-slides_14-sorting_chapter-14358 33 powerpoint-slides_14-sorting_chapter-14
358 33 powerpoint-slides_14-sorting_chapter-14sumitbardhan
 
358 33 powerpoint-slides_12-heaps_chapter-12
358 33 powerpoint-slides_12-heaps_chapter-12358 33 powerpoint-slides_12-heaps_chapter-12
358 33 powerpoint-slides_12-heaps_chapter-12sumitbardhan
 
358 33 powerpoint-slides_11-efficient-binary-trees_chapter-11
358 33 powerpoint-slides_11-efficient-binary-trees_chapter-11358 33 powerpoint-slides_11-efficient-binary-trees_chapter-11
358 33 powerpoint-slides_11-efficient-binary-trees_chapter-11sumitbardhan
 
358 33 powerpoint-slides_16-files-their-organization_chapter-16
358 33 powerpoint-slides_16-files-their-organization_chapter-16358 33 powerpoint-slides_16-files-their-organization_chapter-16
358 33 powerpoint-slides_16-files-their-organization_chapter-16sumitbardhan
 
Algorithm analysis
Algorithm analysisAlgorithm analysis
Algorithm analysissumitbardhan
 

Plus de sumitbardhan (6)

358 33 powerpoint-slides_15-hashing-collision_chapter-15
358 33 powerpoint-slides_15-hashing-collision_chapter-15358 33 powerpoint-slides_15-hashing-collision_chapter-15
358 33 powerpoint-slides_15-hashing-collision_chapter-15
 
358 33 powerpoint-slides_14-sorting_chapter-14
358 33 powerpoint-slides_14-sorting_chapter-14358 33 powerpoint-slides_14-sorting_chapter-14
358 33 powerpoint-slides_14-sorting_chapter-14
 
358 33 powerpoint-slides_12-heaps_chapter-12
358 33 powerpoint-slides_12-heaps_chapter-12358 33 powerpoint-slides_12-heaps_chapter-12
358 33 powerpoint-slides_12-heaps_chapter-12
 
358 33 powerpoint-slides_11-efficient-binary-trees_chapter-11
358 33 powerpoint-slides_11-efficient-binary-trees_chapter-11358 33 powerpoint-slides_11-efficient-binary-trees_chapter-11
358 33 powerpoint-slides_11-efficient-binary-trees_chapter-11
 
358 33 powerpoint-slides_16-files-their-organization_chapter-16
358 33 powerpoint-slides_16-files-their-organization_chapter-16358 33 powerpoint-slides_16-files-their-organization_chapter-16
358 33 powerpoint-slides_16-files-their-organization_chapter-16
 
Algorithm analysis
Algorithm analysisAlgorithm analysis
Algorithm analysis
 

Dernier

SOCIAL AND HISTORICAL CONTEXT - LFTVD.pptx
SOCIAL AND HISTORICAL CONTEXT - LFTVD.pptxSOCIAL AND HISTORICAL CONTEXT - LFTVD.pptx
SOCIAL AND HISTORICAL CONTEXT - LFTVD.pptxiammrhaywood
 
Measures of Dispersion and Variability: Range, QD, AD and SD
Measures of Dispersion and Variability: Range, QD, AD and SDMeasures of Dispersion and Variability: Range, QD, AD and SD
Measures of Dispersion and Variability: Range, QD, AD and SDThiyagu K
 
ICT Role in 21st Century Education & its Challenges.pptx
ICT Role in 21st Century Education & its Challenges.pptxICT Role in 21st Century Education & its Challenges.pptx
ICT Role in 21st Century Education & its Challenges.pptxAreebaZafar22
 
Sports & Fitness Value Added Course FY..
Sports & Fitness Value Added Course FY..Sports & Fitness Value Added Course FY..
Sports & Fitness Value Added Course FY..Disha Kariya
 
Russian Escort Service in Delhi 11k Hotel Foreigner Russian Call Girls in Delhi
Russian Escort Service in Delhi 11k Hotel Foreigner Russian Call Girls in DelhiRussian Escort Service in Delhi 11k Hotel Foreigner Russian Call Girls in Delhi
Russian Escort Service in Delhi 11k Hotel Foreigner Russian Call Girls in Delhikauryashika82
 
Advanced Views - Calendar View in Odoo 17
Advanced Views - Calendar View in Odoo 17Advanced Views - Calendar View in Odoo 17
Advanced Views - Calendar View in Odoo 17Celine George
 
Holdier Curriculum Vitae (April 2024).pdf
Holdier Curriculum Vitae (April 2024).pdfHoldier Curriculum Vitae (April 2024).pdf
Holdier Curriculum Vitae (April 2024).pdfagholdier
 
How to Give a Domain for a Field in Odoo 17
How to Give a Domain for a Field in Odoo 17How to Give a Domain for a Field in Odoo 17
How to Give a Domain for a Field in Odoo 17Celine George
 
microwave assisted reaction. General introduction
microwave assisted reaction. General introductionmicrowave assisted reaction. General introduction
microwave assisted reaction. General introductionMaksud Ahmed
 
Key note speaker Neum_Admir Softic_ENG.pdf
Key note speaker Neum_Admir Softic_ENG.pdfKey note speaker Neum_Admir Softic_ENG.pdf
Key note speaker Neum_Admir Softic_ENG.pdfAdmir Softic
 
Web & Social Media Analytics Previous Year Question Paper.pdf
Web & Social Media Analytics Previous Year Question Paper.pdfWeb & Social Media Analytics Previous Year Question Paper.pdf
Web & Social Media Analytics Previous Year Question Paper.pdfJayanti Pande
 
fourth grading exam for kindergarten in writing
fourth grading exam for kindergarten in writingfourth grading exam for kindergarten in writing
fourth grading exam for kindergarten in writingTeacherCyreneCayanan
 
psychiatric nursing HISTORY COLLECTION .docx
psychiatric  nursing HISTORY  COLLECTION  .docxpsychiatric  nursing HISTORY  COLLECTION  .docx
psychiatric nursing HISTORY COLLECTION .docxPoojaSen20
 
Basic Civil Engineering first year Notes- Chapter 4 Building.pptx
Basic Civil Engineering first year Notes- Chapter 4 Building.pptxBasic Civil Engineering first year Notes- Chapter 4 Building.pptx
Basic Civil Engineering first year Notes- Chapter 4 Building.pptxDenish Jangid
 
Unit-V; Pricing (Pharma Marketing Management).pptx
Unit-V; Pricing (Pharma Marketing Management).pptxUnit-V; Pricing (Pharma Marketing Management).pptx
Unit-V; Pricing (Pharma Marketing Management).pptxVishalSingh1417
 
SECOND SEMESTER TOPIC COVERAGE SY 2023-2024 Trends, Networks, and Critical Th...
SECOND SEMESTER TOPIC COVERAGE SY 2023-2024 Trends, Networks, and Critical Th...SECOND SEMESTER TOPIC COVERAGE SY 2023-2024 Trends, Networks, and Critical Th...
SECOND SEMESTER TOPIC COVERAGE SY 2023-2024 Trends, Networks, and Critical Th...KokoStevan
 
Nutritional Needs Presentation - HLTH 104
Nutritional Needs Presentation - HLTH 104Nutritional Needs Presentation - HLTH 104
Nutritional Needs Presentation - HLTH 104misteraugie
 
Activity 01 - Artificial Culture (1).pdf
Activity 01 - Artificial Culture (1).pdfActivity 01 - Artificial Culture (1).pdf
Activity 01 - Artificial Culture (1).pdfciinovamais
 

Dernier (20)

SOCIAL AND HISTORICAL CONTEXT - LFTVD.pptx
SOCIAL AND HISTORICAL CONTEXT - LFTVD.pptxSOCIAL AND HISTORICAL CONTEXT - LFTVD.pptx
SOCIAL AND HISTORICAL CONTEXT - LFTVD.pptx
 
Código Creativo y Arte de Software | Unidad 1
Código Creativo y Arte de Software | Unidad 1Código Creativo y Arte de Software | Unidad 1
Código Creativo y Arte de Software | Unidad 1
 
Measures of Dispersion and Variability: Range, QD, AD and SD
Measures of Dispersion and Variability: Range, QD, AD and SDMeasures of Dispersion and Variability: Range, QD, AD and SD
Measures of Dispersion and Variability: Range, QD, AD and SD
 
ICT Role in 21st Century Education & its Challenges.pptx
ICT Role in 21st Century Education & its Challenges.pptxICT Role in 21st Century Education & its Challenges.pptx
ICT Role in 21st Century Education & its Challenges.pptx
 
Sports & Fitness Value Added Course FY..
Sports & Fitness Value Added Course FY..Sports & Fitness Value Added Course FY..
Sports & Fitness Value Added Course FY..
 
Russian Escort Service in Delhi 11k Hotel Foreigner Russian Call Girls in Delhi
Russian Escort Service in Delhi 11k Hotel Foreigner Russian Call Girls in DelhiRussian Escort Service in Delhi 11k Hotel Foreigner Russian Call Girls in Delhi
Russian Escort Service in Delhi 11k Hotel Foreigner Russian Call Girls in Delhi
 
Advanced Views - Calendar View in Odoo 17
Advanced Views - Calendar View in Odoo 17Advanced Views - Calendar View in Odoo 17
Advanced Views - Calendar View in Odoo 17
 
Holdier Curriculum Vitae (April 2024).pdf
Holdier Curriculum Vitae (April 2024).pdfHoldier Curriculum Vitae (April 2024).pdf
Holdier Curriculum Vitae (April 2024).pdf
 
How to Give a Domain for a Field in Odoo 17
How to Give a Domain for a Field in Odoo 17How to Give a Domain for a Field in Odoo 17
How to Give a Domain for a Field in Odoo 17
 
microwave assisted reaction. General introduction
microwave assisted reaction. General introductionmicrowave assisted reaction. General introduction
microwave assisted reaction. General introduction
 
Key note speaker Neum_Admir Softic_ENG.pdf
Key note speaker Neum_Admir Softic_ENG.pdfKey note speaker Neum_Admir Softic_ENG.pdf
Key note speaker Neum_Admir Softic_ENG.pdf
 
Mattingly "AI & Prompt Design: The Basics of Prompt Design"
Mattingly "AI & Prompt Design: The Basics of Prompt Design"Mattingly "AI & Prompt Design: The Basics of Prompt Design"
Mattingly "AI & Prompt Design: The Basics of Prompt Design"
 
Web & Social Media Analytics Previous Year Question Paper.pdf
Web & Social Media Analytics Previous Year Question Paper.pdfWeb & Social Media Analytics Previous Year Question Paper.pdf
Web & Social Media Analytics Previous Year Question Paper.pdf
 
fourth grading exam for kindergarten in writing
fourth grading exam for kindergarten in writingfourth grading exam for kindergarten in writing
fourth grading exam for kindergarten in writing
 
psychiatric nursing HISTORY COLLECTION .docx
psychiatric  nursing HISTORY  COLLECTION  .docxpsychiatric  nursing HISTORY  COLLECTION  .docx
psychiatric nursing HISTORY COLLECTION .docx
 
Basic Civil Engineering first year Notes- Chapter 4 Building.pptx
Basic Civil Engineering first year Notes- Chapter 4 Building.pptxBasic Civil Engineering first year Notes- Chapter 4 Building.pptx
Basic Civil Engineering first year Notes- Chapter 4 Building.pptx
 
Unit-V; Pricing (Pharma Marketing Management).pptx
Unit-V; Pricing (Pharma Marketing Management).pptxUnit-V; Pricing (Pharma Marketing Management).pptx
Unit-V; Pricing (Pharma Marketing Management).pptx
 
SECOND SEMESTER TOPIC COVERAGE SY 2023-2024 Trends, Networks, and Critical Th...
SECOND SEMESTER TOPIC COVERAGE SY 2023-2024 Trends, Networks, and Critical Th...SECOND SEMESTER TOPIC COVERAGE SY 2023-2024 Trends, Networks, and Critical Th...
SECOND SEMESTER TOPIC COVERAGE SY 2023-2024 Trends, Networks, and Critical Th...
 
Nutritional Needs Presentation - HLTH 104
Nutritional Needs Presentation - HLTH 104Nutritional Needs Presentation - HLTH 104
Nutritional Needs Presentation - HLTH 104
 
Activity 01 - Artificial Culture (1).pdf
Activity 01 - Artificial Culture (1).pdfActivity 01 - Artificial Culture (1).pdf
Activity 01 - Artificial Culture (1).pdf
 

358 33 powerpoint-slides_5-arrays_chapter-5

  • 1. © Oxford University Press 2011. All rights reserved. Data Structures Using C Reema Thareja, Assistant Professor, Institute of Information Technology and Management, New Delhi
  • 2. © Oxford University Press 2011. All rights reserved. CHAPTER 5 ARRAYS
  • 3. © Oxford University Press 2011. All rights reserved. INTRODUCTION • An array is a collection of similar data elements. • These data elements have the same data type. • The elements of the array are stored in consecutive memory locations and are referenced by an index (also known as the subscript). • Declaring an array means specifying three things: The data type- what kind of values it can store ex, int, char, float Name- to identify the array The size- the maximum number of values that the array can hold • Arrays are declared using the following syntax. type name[size]; 1st element 2nd element 3rd element 4th element 5th element 6th element 7th element 8th element 9th element 10th element marks[0] marks[1] marks[2] marks[3] marks[4] marks[5] marks[6] marks[7] marks[8] marks[9]
  • 4. © Oxford University Press 2011. All rights reserved. ACCESSING ELEMENTS OF THE ARRAY To access all the elements of the array, you must use a loop. That is, we can access all the elements of the array by varying the value of the subscript into the array. But note that the subscript must be an integral value or an expression that evaluates to an integral value. int i, marks[10]; for(i=0;i<10;i++) marks[i] = -1; CALCULATING THE ADDRESS OF ARRAY ELEMENTS Address of data element, A[k] = BA(A) + w( k – lower_bound) Here, A is the array k is the index of the element of which we have to calculate the address BA is the base address of the array A. w is the word size of one element in memory, for example, size of int is 2. 99 67 78 56 88 90 34 85 Marks[0] marks[1] marks[2] marks[3] marks[4] marks[5] marks[6] marks[7] marks[7] 1000 1002 1004 1006 1008 1010 1012 1014 Marks[4] = 1000 + 2(4 – 0) = 1000 + 2(4) = 1008
  • 5. © Oxford University Press 2011. All rights reserved. STORING VALES IN ARRAYS Store values in the array Initialize the elements Input values for the elements Assign values to the elements Initialization of Arrays Arrays are initialized by writing, type array_name[size]={list of values}; int marks[5]={90, 82, 78, 95, 88}; int i, marks[10]; for(i=0;i<10;i++) scanf(“%d”, &marks[i]); Assigning Values int i, arr1[10], arr2[10]; for(i=0;i<10;i++) arr2[i] = arr1[i]; Inputting Values CALCULATING THE LENGTH OF THE ARRAY Length = upper_bound – lower_bound + 1 Where, upper_bound is the index of the last element and lower_bound is the index of the first element in the array 99 67 78 56 88 90 34 85 Marks[0] marks[1] marks[2] marks[3] marks[4] marks[5] marks[6 marks[7]] Here, lower_bound = 0, upper_bound = 7 Therefore, length = 7 – 0 + 1 = 8
  • 6. © Oxford University Press 2011. All rights reserved. WRITE A PROGRAM TO READ AND DISPLAY N NUMBERS USING AN ARRAY #include<stdio.h> #include<conio.h> int main() { int i=0, n, arr[20]; clrscr(); printf(“n Enter the number of elements : “); scanf(“%d”, &n); for(i=0;i<n;i++) { printf(“n Arr[%d] = “, i); scanf(“%d”,&num[i]); } printf(“n The array elements are “); for(i=0;i<n;i++) printf(“Arr[%d] = %dt”, i, arr[i]); return 0; }
  • 7. © Oxford University Press 2011. All rights reserved. INSERTING AN ELEMENT IN THE ARRAY Algorithm to insert a new element to the end of the array. Step 1: Set upper_bound = upper_bound + 1 Step 2: Set A[upper_bound] = VAL Step 3; EXIT The algorithm INSERT will be declared as INSERT( A, N, POS, VAL). Step 1: [INITIALIZATION] SET I = N Step 2: Repeat Steps 3 and 4 while I >= POS Step 3: SET A[I + 1] = A[I] Step 4: SET I = I – 1 [End of Loop] Step 5: SET N = N + 1 Step 6: SET A[POS] = VAL Step 7: EXIT Calling INSERT (Data, 6, 3, 100) will lead to the following processing in the array 45 23 34 12 56 20 20 Data[0] Data[1] Data[2] Data[3] Data[4] Data[5] Data[6] 45 23 34 12 56 56 20 Data[0] Data[1] Data[2] Data[3] Data[4] Data[5] Data[6] 45 23 34 12 12 56 20 Data[0] Data[1] Data[2] Data[3] Data[4] Data[5] Data[6] 45 23 34 100 12 56 20 Data[0] Data[1] Data[2] Data[3] Data[4] Data[5] Data[6]
  • 8. © Oxford University Press 2011. All rights reserved. DELETING AN ELEMENT FROM THE ARRAY Algorithm to delete an element from the end of the array Step 1: Set upper_bound = upper_bound - 1 Step 2: EXIT Step 1: [INITIALIZATION] SET I = POS Step 2: Repeat Steps 3 and 4 while I <= N - 1 Step 3: SET A[I] = A[I + 1] Step 4: SET I = I + 1 [End of Loop] Step 5: SET N = N - 1 Step 6: EXIT The algorithm DELETE will be declared as DELETE( A, N, POS). Calling DELETE (Data, 6, 2) will lead to the following processing in the array 45 23 12 12 56 20 Data[0] Data[1] Data[2] Data[3] Data[4] Data[5] 45 23 34 12 56 20 Data[0] Data[1] Data[2] Data[3] Data[4] Data[5] 45 23 12 56 56 20 Data[0] Data[1] Data[2] Data[3] Data[4] Data[5] 45 23 12 56 20 20 Data[0] Data[1] Data[2] Data[3] Data[4] Data[5] 45 23 12 56 20 Data[0] Data[1] Data[2] Data[3] Data[4]
  • 9. © Oxford University Press 2011. All rights reserved. LINEAR SEARCH LINEAR_SEARCH(A, N, VAL, POS) Step 1: [INITIALIZE] SET POS = -1 Step 2: [INITIALIZE] SET I = 0 Step 3: Repeat Step 4 while I<N Step 4: IF A[I] = VAL, then SET POS = I PRINT POS Go to Step 6 [END OF IF] [END OF LOOP] Step 5: PRINT “Value Not Present In The Array” Step 6: EXIT BINARY SEARCH BEG = lower_bound and END = upper_bound MID = (BEG + END) / 2 If VAL < A[MID], then VAL will be present in the left segment of the array. So, the value of END will be changed as, END = MID – 1 If VAL > A[MID], then VAL will be present in the right segment of the array. So, the value of BEG will be changed as, BEG = MID + 1
  • 10. © Oxford University Press 2011. All rights reserved. BINARY_SEARCH(A, lower_bound, upper_bound, VAL, POS) Step 1: [INITIALIZE] SET BEG = lower_bound, END = upper_bound, POS = -1 Step 2: Repeat Step 3 and Step 4 while BEG <= END Step 3: SET MID = (BEG + END)/2 Step 4: IF A[MID] = VAL, then POS = MID PRINT POS Go to Step 6 IF A[MID] > VAL then; SET END = MID - 1 ELSE SET BEG = MID + 1 [END OF IF] [END OF LOOP] Step 5: IF POS = -1, then PRINTF “VAL IS NOT PRESENT IN THE ARRAY” [END OF IF] Step 6: EXIT int A[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; and VAL = 9, the algorithm will proceed in the following manner. BEG = 0, END = 10, MID = (0 + 10)/2 = 5 Now, VAL = 9 and A[MID] = A[5] = 5 A[5] is less than VAL, therefore, we will now search for the value in the later half of the array. So, we change the values of BEG and MID. Now, BEG = MID + 1 = 6, END = 10, MID = (6 + 10)/2 =16/2 = 8 Now, VAL = 9 and A[MID] = A[8] = 8 A[8] is less than VAL, therefore, we will now search for the value in the later half of the array. So, again we change the values of BEG and MID. Now, BEG = MID + 1 = 9, END = 10, MID = (9 + 10)/2 = 9 Now VAL = 9 and A[MID] = 9. Now VAL = 9 and A[MID] = 9.
  • 11. © Oxford University Press 2011. All rights reserved. ONE DIMENSIONAL ARRAYS FOR INTER FUNCTION COMMUNICATION 1D Arrays For Inter Function Communication Passing individual elements Passing entire array Passing individual elements Passing entire array Passing data values main() { int arr[5] ={1, 2, 3, 4, 5}; func(arr[3]); } void func(int num) { printf("%d", num); } Passing addresses main() { int arr[5] ={1, 2, 3, 4, 5}; func(&arr[3]); } void func(int *num) { printf("%d", num); } Passing the entire array main() { int arr[5] ={1, 2, 3, 4, 5}; func(arr); } moid func(int arr[5]) { int i; for(i=0;i<5;i++) printf("%d", arr[i]);
  • 12. © Oxford University Press 2011. All rights reserved.
  • 13. © Oxford University Press 2011. All rights reserved. POINTERS AND ARRAYS int arr[5] = {1, 2, 3, 4, 5}; int *ptr = &arr[0]; ptr++; printf(“n The value of the second element of the array is %d”, *ptr); Write a program to read and display an array of n integers #include<stdio.h> int main() { int i, n; int arr[10], *parr; parr = arr; printf(“n Enter the number of elements : “); scanf(“%d”, &n); for(i=0; i <n; i++) scanf(“%d”, (parr+i)); for(i=0; i <n; i++) printf(“n arr[%d] = %d”, i, *(parr+i)); }
  • 14. © Oxford University Press 2011. All rights reserved. ARRAY OF POINTERS An array of pointers can be declared as int *ptr[10] The above statement declares an array of 10 pointers where each of the pointer points to an integer variable. For example, look at the code given below. int *ptr[10]; int p=1, q=2, r=3, s=4, t=5; ptr[0]=&p; ptr[1]=&q; ptr[2]=&r; ptr[3]=&s; ptr[4]=&t Can you tell what will be the output of the following statement? printf(“n %d”, *ptr[3]); Yes, the output will be 4 because ptr[3] stores the address of integer variable s and *ptr[3] will therefore print the value of s that is 4.
  • 15. © Oxford University Press 2011. All rights reserved. TWO DIMENSIONAL ARRAYS • A two dimensional array is specified using two subscripts where one subscript denotes row and the other denotes column. • C looks a two dimensional array as an array of a one dimensional array. Second Dimension A two dimensional array is declared as: data_type array_name[row_size][column_size]; Therefore, a two dimensional mXn array is an array that contains m*n data elements and each element is accessed using two subscripts, i and j where i<=m and j<=n int marks[3][5] Rows/Columns Col 0 Col 1 Col2 Col 3 Col 4 Row 0 Marks[0][0] Marks[0][1] Marks[0][2] Marks[0][3] Marks[0][4] Row 1 Marks[1][0] Marks[1][1] Marks[1][2] Marks[1][3] Marks[1][4] Row 2 Marks[2][0] Marks[2][1] Marks[2][2] Marks[2][3] Marks[2][4] Two Dimensional Array
  • 16. © Oxford University Press 2011. All rights reserved. MEMORY REPRESENTATION OF A TWO DIMENSIONAL ARRAY There are two ways of storing a 2-D array can be stored in memory. The first way is row major order and the second is column major order. In the row major order the elements of the first row are stored before the elements of the second and third row. That is, the elements of the array are stored row by row where n elements of the first row will occupy the first nth locations. (0,0) (0, 1) (0,2) (0,3) (1,0) (1,1) (1,2) (1,3) (2,0) (2,1) (2,2) (2,3) However, when we store the elements in a column major order, the elements of the first column are stored before the elements of the second and third column. That is, the elements of the array are stored column by column where n elements of the first column will occupy the first nth locations. (0,0) (1,0) (2,0) (3,0) (0,1) (1,1) (2,1 (3,1) (0,2) (1,2) (2,2) (3,2) Address(A[I][J] = Base_Address + w{M ( J - 1) + (I - 1)}, if the array elements are stored in column major order. And, Address(A[I][J] = Base_Address + w{N ( I - 1) + (J - 1)}, if the array elements are stored in row major order. Where, w is the number of words stored per memory location m, is the number of columns n, is the number of rows I and J are the subscripts of the array element
  • 17. © Oxford University Press 2011. All rights reserved. TWO DIMENSIONAL ARRAYS CONTD.. • A two dimensional array is initialized in the same was as a single dimensional array is initialized. For example, int marks[2][3]={90, 87, 78, 68, 62, 71}; int marks[2][3]={{90,87,78},{68, 62, 71}}; Write a program to print the elements of a 2D array • #include<stdio.h> • #include<conio.h> • main() • { • int arr[2][2] = {12, 34, 56,32}; • int i, j; • for(i=0;i<2;i++) • { • printf("n"); • for(j=0;j<2;j++) • printf("%dt", arr[i][j]); • } • return 0; • }
  • 18. © Oxford University Press 2011. All rights reserved. TWO DIMENSIONAL ARRAYS FOR INTER FUNCTION COMMUNICATION Passing individual elements Passing a row 2D Array for Inter Function Communication Passing the entire 2D array There are three ways of passing parts of the two dimensional array to a function. First, we can pass individual elements of the array. This is exactly same as we passed element of a one dimensional array. Passing a row main() { int arr[2][3]= ( {1, 2, 3}, {4, 5, 6} }; func(arr[1]); } void func(int arr[]) { int i; for(i=0;i<5;i++) printf("%d", arr[i] * 10); } Passing the entire 2D array To pass a two dimensional array to a function, we use the array name as the actual parameter. (The same we did in case of a 1D array). However, the parameter in the called function must indicate that the array has two dimensions.
  • 19. © Oxford University Press 2011. All rights reserved. PROGRAM ILLUSTRATING PASSING ENTIRE ARRAY TO A FUNCTION • #include<stdio.h> • void read_matrix(int mat[][], int, int); • void sum_matrix(int mat1[][], int mat2[][], int, int); • void display_matrix(int mat[5][5], int r, int c); • int main() • { int row, col, mat1[5][5], mat2[5][5]; • printf(“n Enter the number of rows and columns of the matrix : “); • scanf(“%d %d”, row, col); • read_matrix(mat1, row, col); • printf(“n Enter the second matrix : “); • read_matrix(mat2, row, col); • sum_matrix(mat1, mat2, row, col); • } • void read_matrix(int mat[5][5], int r, int c) • { int i, j; • for(i=0;i<r;i++) • { for(j=0;j<c;j++) • { printf(“n mat[%d][%d] = “); • scanf(“%d“, &mat[i][j]); • } • } • } • void sum_matrix(int mat1[5][5], mat2[5][5], int r, int c) • { int i, j, sum[5][5]; • for(i=0;i<r;i++) • { for(j=0;j<c;j++) • sum[i][j] = mat1[i][j] + mat2[i][j]; • } • display_matrix(sum, r, c); • } • void display_matrix(int mat[5][5], int r, int c) • { int i, j; • for(i=0;i<r;i++) • { printf(“n”); • for(j=0;j<c;j++) • printf(“t mat[%d][%d] = %d“, mat[i][j]);
  • 20. © Oxford University Press 2011. All rights reserved. ARRAY OF FUNCTION POINTERS When an array of function pointers is made the appropriate function is selected using an index. The code given below shows the way to define and use an array of function pointers in C. Step 1: Use typedef keyword so that 'fp' can be used as type typedef int (*fp)(int, int); Step2: Define the array and initialize each element to NULL. This can be done in two ways // with 10 pointers to functions which return an int and take two ints First Way: fp funcArr[10] = {NULL}; Second Way: int (*funcArr[10])(int, int) = {NULL}; Step 3: Assign the function's address - 'Add' and 'Subtract' funcArr1[0] = funcArr2[1] = &Add; funcArr[0] = &Add; funcArr[1] = &Subtract; Step 4: Call the function using an index to address the function pointer printf("%dn", funcArr[1](2, 3)); // short form printf("%dn", (*funcArr[0])(2, 3)); // "correct" way Let us now write a program that uses array of function pointers
  • 21. © Oxford University Press 2011. All rights reserved. • #include <stdio.h> int sum(int a, int b); int subtract(int a, int b); int mul(int a, int b); int div(int a, int b); int (*fp[4]) (int a, int b); int main(void) { int result; int num1, num2, op; p[0] = sum; p[1] = subtract; p[2] = mul; p[3] = div; printf("n Enter the numbers: "); • scanf("%d %d", &num1, &num2); • do • { printf("n 0: Add n 1: Subtract n 2: Multiply n 3: Divide n 4. EXIT"); • printf("Enter the operation: "); • scanf("%d", &op); result = (*fp[op]) (num1, num2); printf("%d", result); } while(op!=4); } int sum(int a, int b) { return a + b; } int subtract(int a, int b) { return a - b; } int mul(int a, int b) { return a * b; } int div(int a, int b) { if(b) return a / b;
  • 22. © Oxford University Press 2011. All rights reserved. POINTERS AND TWO DIMENSIONAL ARRAY • Individual elements of the array mat can be accessed using either: mat[i][j] or *(*(mat + i) + j) or*(mat[i]+j); • See pointer to a one dimensional array can be declared as, int arr[]={1,2,3,4,5}; int *parr; parr=arr; • Similarly, pointer to a two dimensional array can be declared as, int arr[2][2]={{1,2},{3,4}}; int (*parr)[2]; parr=arr; • Look at the code given below which illustrates the use of a pointer to a two dimensional array. • #include<stdio.h> main() { int arr[2][2]={{1,2}.{3,4}}; int i, (*parr)[2]; parr=arr; for(i=0;i<2;i++) { for(j=0;j<2;j++) printf(" %d", (*(parr+i))[j]); } } OUTPUT
  • 23. © Oxford University Press 2011. All rights reserved. MULTI DIMENSIONAL ARRAYS • A multi dimensional array is an array of arrays. • Like we have one index in a single dimensional array, two indices in a two dimensional array, in the same way we have n indices in a n-dimensional array or multi dimensional array. • Conversely, an n dimensional array is specified using n indices. • An n dimensional m1 x m2 x m3 x ….. mn array is a collection m1*m2*m3* ….. *mn elements. • In a multi dimensional array, a particular element is specified by using n subscripts as A[I1][I2][I3]…[In], where, I1<=M1 I2<=M2 I3 <= M3 ……… In <= Mn
  • 24. © Oxford University Press 2011. All rights reserved. PROGRAM TO READ AND DISPLAY A 2X2X2 ARRAY #include<stdio.h> int main() { int array1[3][3][3], i, j, k; printf(“n Enter the elements of the matrix”); printf(“n ******************************”); for(i=0;i<2;i++) { for(j=0;j<2;j++) { for(k=0;k<2;k++) { printf(“n array[%d][ %d][ %d] = ”, i, j, k); scanf(“%d”, &array1[i][j][k]); } } } printf(“n The matrix is : “); printf(“n *********************************”)l for(i=0;i<2;i++) { printf(“nn”); for(j=0;j<2;j++) { printf(“n”); for(k=0;k<2;k++) printf(“t array[%d][ %d][ %d] = %d”, i, j, k, array1[i][j][k]); } }
  • 25. © Oxford University Press 2011. All rights reserved. SPARSE MATRIX • Sparse matrix is a matrix that has many elements with a value zero. • In order to efficiently utilize the memory, specialized algorithms and data structures that take advantage of the sparse structure of the matrix should be used. Otherwise, execution will slow down and the matrix will consume large amounts of memory. • There are two types of sparse matrices. In the first type of sparse matrix, all elements above the main diagonal have a value zero. This type of sparse matrix is also called a (lower) triagonal matrix. In a lower triangular matrix, Ai,j = 0 where i<j. • An nXn lower triangular matrix A has one non zero element in the first row, two non zero element in the second row and likewise, n non zero elements in the nth row. 1 5 3 2 7 -1 3 1 4 2 -9 2 -8 1 7 • In an upper triangular matrix Ai,j = 0 where i>j. •An nXn upper triangular matrix A has n non zero element in the first row, n-1 non zero element in the second row and likewise, 1 non zero elements in the nth row. 1 2 3 4 5 3 6 7 8 -1 9 1 9 3 7
  • 26. © Oxford University Press 2011. All rights reserved. SPARSE MATRIX CONTD. • In the second variant of a sparse matrix, elements with a non-zero value can appear only on the diagonal or immediately above or below the diagonal. This type of matrix is also called a tridiagonal matrix. • In a tridiagonal matrix, Ai,j = 0 where | i – j| > 1. Therefore, if elements are present on • the main diagonal the, it contains non-zero elements for i=j. In all there will be n elements • diagonal below the main diagonal, it contains non zero elements for i=j+1. In all there will be n-1 elements • diagonal above the main diagonal, it contains non zero elements for i=j-1. In all there will be n-1 elements 4 1 5 1 2 9 3 1 4 2 2 5 1 9 6 7