SlideShare una empresa de Scribd logo
1 de 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

Más contenido relacionado

La actualidad más candente

Oop c++class(final).ppt
Oop c++class(final).pptOop c++class(final).ppt
Oop c++class(final).pptAlok Kumar
 
Queue Implementation Using Array & Linked List
Queue Implementation Using Array & Linked ListQueue Implementation Using Array & Linked List
Queue Implementation Using Array & Linked ListPTCL
 
Looping Statements and Control Statements in Python
Looping Statements and Control Statements in PythonLooping Statements and Control Statements in Python
Looping Statements and Control Statements in PythonPriyankaC44
 
Structures in c language
Structures in c languageStructures in c language
Structures in c languagetanmaymodi4
 
Introduction to Selection control structures in C++
Introduction to Selection control structures in C++ Introduction to Selection control structures in C++
Introduction to Selection control structures in C++ Neeru Mittal
 
Presentation on c structures
Presentation on c   structures Presentation on c   structures
Presentation on c structures topu93
 
Functions in c language
Functions in c languageFunctions in c language
Functions in c languageTanmay Modi
 
Fundamentals of data structures ellis horowitz & sartaj sahni
Fundamentals of data structures   ellis horowitz & sartaj sahniFundamentals of data structures   ellis horowitz & sartaj sahni
Fundamentals of data structures ellis horowitz & sartaj sahniHitesh Wagle
 

La actualidad más candente (20)

java token
java tokenjava token
java token
 
Function C programming
Function C programmingFunction C programming
Function C programming
 
Top down parsing
Top down parsingTop down parsing
Top down parsing
 
C introduction by thooyavan
C introduction by  thooyavanC introduction by  thooyavan
C introduction by thooyavan
 
Oop c++class(final).ppt
Oop c++class(final).pptOop c++class(final).ppt
Oop c++class(final).ppt
 
C by balaguruswami - e.balagurusamy
C   by balaguruswami - e.balagurusamyC   by balaguruswami - e.balagurusamy
C by balaguruswami - e.balagurusamy
 
Queue Implementation Using Array & Linked List
Queue Implementation Using Array & Linked ListQueue Implementation Using Array & Linked List
Queue Implementation Using Array & Linked List
 
Looping Statements and Control Statements in Python
Looping Statements and Control Statements in PythonLooping Statements and Control Statements in Python
Looping Statements and Control Statements in Python
 
Infix to postfix conversion
Infix to postfix conversionInfix to postfix conversion
Infix to postfix conversion
 
Typecasting in c
Typecasting in cTypecasting in c
Typecasting in c
 
Structures in c language
Structures in c languageStructures in c language
Structures in c language
 
Control statements in c
Control statements in cControl statements in c
Control statements in c
 
Constructors and Destructor in C++
Constructors and Destructor in C++Constructors and Destructor in C++
Constructors and Destructor in C++
 
Learn C
Learn CLearn C
Learn C
 
Programming in c Arrays
Programming in c ArraysProgramming in c Arrays
Programming in c Arrays
 
Strings
StringsStrings
Strings
 
Introduction to Selection control structures in C++
Introduction to Selection control structures in C++ Introduction to Selection control structures in C++
Introduction to Selection control structures in C++
 
Presentation on c structures
Presentation on c   structures Presentation on c   structures
Presentation on c structures
 
Functions in c language
Functions in c languageFunctions in c language
Functions in c language
 
Fundamentals of data structures ellis horowitz & sartaj sahni
Fundamentals of data structures   ellis horowitz & sartaj sahniFundamentals of data structures   ellis horowitz & sartaj sahni
Fundamentals of data structures ellis horowitz & sartaj sahni
 

Similar a 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
 

Más 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_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_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_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_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-8sumitbardhan
 
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
 

Más de sumitbardhan (9)

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_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_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_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
 
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
 
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
 

Último

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
 
Disha NEET Physics Guide for classes 11 and 12.pdf
Disha NEET Physics Guide for classes 11 and 12.pdfDisha NEET Physics Guide for classes 11 and 12.pdf
Disha NEET Physics Guide for classes 11 and 12.pdfchloefrazer622
 
microwave assisted reaction. General introduction
microwave assisted reaction. General introductionmicrowave assisted reaction. General introduction
microwave assisted reaction. General introductionMaksud Ahmed
 
9548086042 for call girls in Indira Nagar with room service
9548086042  for call girls in Indira Nagar  with room service9548086042  for call girls in Indira Nagar  with room service
9548086042 for call girls in Indira Nagar with room servicediscovermytutordmt
 
Paris 2024 Olympic Geographies - an activity
Paris 2024 Olympic Geographies - an activityParis 2024 Olympic Geographies - an activity
Paris 2024 Olympic Geographies - an activityGeoBlogs
 
Interactive Powerpoint_How to Master effective communication
Interactive Powerpoint_How to Master effective communicationInteractive Powerpoint_How to Master effective communication
Interactive Powerpoint_How to Master effective communicationnomboosow
 
Unit-IV- Pharma. Marketing Channels.pptx
Unit-IV- Pharma. Marketing Channels.pptxUnit-IV- Pharma. Marketing Channels.pptx
Unit-IV- Pharma. Marketing Channels.pptxVishalSingh1417
 
1029 - Danh muc Sach Giao Khoa 10 . pdf
1029 -  Danh muc Sach Giao Khoa 10 . pdf1029 -  Danh muc Sach Giao Khoa 10 . pdf
1029 - Danh muc Sach Giao Khoa 10 . pdfQucHHunhnh
 
Arihant handbook biology for class 11 .pdf
Arihant handbook biology for class 11 .pdfArihant handbook biology for class 11 .pdf
Arihant handbook biology for class 11 .pdfchloefrazer622
 
Software Engineering Methodologies (overview)
Software Engineering Methodologies (overview)Software Engineering Methodologies (overview)
Software Engineering Methodologies (overview)eniolaolutunde
 
Activity 01 - Artificial Culture (1).pdf
Activity 01 - Artificial Culture (1).pdfActivity 01 - Artificial Culture (1).pdf
Activity 01 - Artificial Culture (1).pdfciinovamais
 
Grant Readiness 101 TechSoup and Remy Consulting
Grant Readiness 101 TechSoup and Remy ConsultingGrant Readiness 101 TechSoup and Remy Consulting
Grant Readiness 101 TechSoup and Remy ConsultingTechSoup
 
1029-Danh muc Sach Giao Khoa khoi 6.pdf
1029-Danh muc Sach Giao Khoa khoi  6.pdf1029-Danh muc Sach Giao Khoa khoi  6.pdf
1029-Danh muc Sach Giao Khoa khoi 6.pdfQucHHunhnh
 
Kisan Call Centre - To harness potential of ICT in Agriculture by answer farm...
Kisan Call Centre - To harness potential of ICT in Agriculture by answer farm...Kisan Call Centre - To harness potential of ICT in Agriculture by answer farm...
Kisan Call Centre - To harness potential of ICT in Agriculture by answer farm...Krashi Coaching
 
Accessible design: Minimum effort, maximum impact
Accessible design: Minimum effort, maximum impactAccessible design: Minimum effort, maximum impact
Accessible design: Minimum effort, maximum impactdawncurless
 
A Critique of the Proposed National Education Policy Reform
A Critique of the Proposed National Education Policy ReformA Critique of the Proposed National Education Policy Reform
A Critique of the Proposed National Education Policy ReformChameera Dedduwage
 

Último (20)

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 NEET Physics Guide for classes 11 and 12.pdf
Disha NEET Physics Guide for classes 11 and 12.pdfDisha NEET Physics Guide for classes 11 and 12.pdf
Disha NEET Physics Guide for classes 11 and 12.pdf
 
microwave assisted reaction. General introduction
microwave assisted reaction. General introductionmicrowave assisted reaction. General introduction
microwave assisted reaction. General introduction
 
9548086042 for call girls in Indira Nagar with room service
9548086042  for call girls in Indira Nagar  with room service9548086042  for call girls in Indira Nagar  with room service
9548086042 for call girls in Indira Nagar with room service
 
Paris 2024 Olympic Geographies - an activity
Paris 2024 Olympic Geographies - an activityParis 2024 Olympic Geographies - an activity
Paris 2024 Olympic Geographies - an activity
 
Interactive Powerpoint_How to Master effective communication
Interactive Powerpoint_How to Master effective communicationInteractive Powerpoint_How to Master effective communication
Interactive Powerpoint_How to Master effective communication
 
Unit-IV- Pharma. Marketing Channels.pptx
Unit-IV- Pharma. Marketing Channels.pptxUnit-IV- Pharma. Marketing Channels.pptx
Unit-IV- Pharma. Marketing Channels.pptx
 
Mattingly "AI & Prompt Design: Structured Data, Assistants, & RAG"
Mattingly "AI & Prompt Design: Structured Data, Assistants, & RAG"Mattingly "AI & Prompt Design: Structured Data, Assistants, & RAG"
Mattingly "AI & Prompt Design: Structured Data, Assistants, & RAG"
 
1029 - Danh muc Sach Giao Khoa 10 . pdf
1029 -  Danh muc Sach Giao Khoa 10 . pdf1029 -  Danh muc Sach Giao Khoa 10 . pdf
1029 - Danh muc Sach Giao Khoa 10 . pdf
 
Arihant handbook biology for class 11 .pdf
Arihant handbook biology for class 11 .pdfArihant handbook biology for class 11 .pdf
Arihant handbook biology for class 11 .pdf
 
Advance Mobile Application Development class 07
Advance Mobile Application Development class 07Advance Mobile Application Development class 07
Advance Mobile Application Development class 07
 
Software Engineering Methodologies (overview)
Software Engineering Methodologies (overview)Software Engineering Methodologies (overview)
Software Engineering Methodologies (overview)
 
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
 
Activity 01 - Artificial Culture (1).pdf
Activity 01 - Artificial Culture (1).pdfActivity 01 - Artificial Culture (1).pdf
Activity 01 - Artificial Culture (1).pdf
 
Grant Readiness 101 TechSoup and Remy Consulting
Grant Readiness 101 TechSoup and Remy ConsultingGrant Readiness 101 TechSoup and Remy Consulting
Grant Readiness 101 TechSoup and Remy Consulting
 
1029-Danh muc Sach Giao Khoa khoi 6.pdf
1029-Danh muc Sach Giao Khoa khoi  6.pdf1029-Danh muc Sach Giao Khoa khoi  6.pdf
1029-Danh muc Sach Giao Khoa khoi 6.pdf
 
INDIA QUIZ 2024 RLAC DELHI UNIVERSITY.pptx
INDIA QUIZ 2024 RLAC DELHI UNIVERSITY.pptxINDIA QUIZ 2024 RLAC DELHI UNIVERSITY.pptx
INDIA QUIZ 2024 RLAC DELHI UNIVERSITY.pptx
 
Kisan Call Centre - To harness potential of ICT in Agriculture by answer farm...
Kisan Call Centre - To harness potential of ICT in Agriculture by answer farm...Kisan Call Centre - To harness potential of ICT in Agriculture by answer farm...
Kisan Call Centre - To harness potential of ICT in Agriculture by answer farm...
 
Accessible design: Minimum effort, maximum impact
Accessible design: Minimum effort, maximum impactAccessible design: Minimum effort, maximum impact
Accessible design: Minimum effort, maximum impact
 
A Critique of the Proposed National Education Policy Reform
A Critique of the Proposed National Education Policy ReformA Critique of the Proposed National Education Policy Reform
A Critique of the Proposed National Education Policy Reform
 

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