Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
0% found this document useful (0 votes)
0 views

Week2 - Array

The document provides an overview of arrays in data structures, explaining their definition, declaration, initialization, and usage in C++. It covers one-dimensional and multi-dimensional arrays, including examples of how to access and manipulate their elements. Additionally, it discusses dynamic arrays and memory allocation techniques.

Uploaded by

logify99
Copyright
© © All Rights Reserved
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
0 views

Week2 - Array

The document provides an overview of arrays in data structures, explaining their definition, declaration, initialization, and usage in C++. It covers one-dimensional and multi-dimensional arrays, including examples of how to access and manipulate their elements. Additionally, it discusses dynamic arrays and memory allocation techniques.

Uploaded by

logify99
Copyright
© © All Rights Reserved
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
You are on page 1/ 40

Data Structure

Department of Computer Science and Software


Engineering
Capital University of Sciences & Technology,
Islamabad Pakistan

1
Arrays in Data Structure
 An array is a collection of more then one data items
or elements of same datatype in contiguous
memory (one after another) e.g. list of names, list of scores
 Easier way to compare and use data than having
separate variables for data elements
 data_type identifier[size]
 int arr[3]
 declares a one-dimensional array named arr with space

for 3 integer variables


 Variables contiguous in memory; lowest address
has first value, next address has second variable
value, and so on
Arrays
• An array is an indexed data structure
• An array stores a collection of variables
• All variables stored in an array are of the same
data type
• An individual variable within an array is called an
element of the array
• An element of an array is accessed using the array
name and an index
• The name of the array is the address of the first
element. The index is the offset
Declaring an array
data_type array_name[size];
– allocates memory for size variables
– index of first element is 0
– index of last element is size-1
– size must be a constant
Arrays
 An individual variable within an array is called an
element of the array
 The elements of an array are not named, and
are accessed by the array’s name and their
position in the array (indexing)
 Index of first element is zero, index of last
element is size-1 e.g. int arr[3] has variables
arr[0], arr[1] and arr[2]
 size has to be a positive constant (not variable)
i.e. can’t do: int x = 3; int arr[x];
but can do: int arr[3 * 2];
 Number of bytes reserved with int arr[3]; ?
Declaring an Array
• Example: int list[10];
– allocates memory for 10 integer variables
– index of first element is 0
– index of last element is 9
– C++ does not perform any bounds checking on arrays
list[0]
list[1]

list[9]
Arrays
Arrays offer convenient means of grouping
together several related variables
One- dimensional arrays

type var_name[size]
int sample[10];
double d[30];
char ch[100];
Arrays in Data Structure

 Array is can be initialized by two ways;


 One when it is declared (Static initialization)
 int arr[3] = {15, 25, 3};
 Equal or Less not more elements
 Run time initialization
 Using loop or functions
Initializing Arrays
Arrays can be initialized at the time they are
declared.

Examples:
double taxrate[3] = {0.15, 0.25, 0.3};
char word[] = “hello”;
char list[5] = {‘h’,’e’,’l’,’l’,’o’};
//list of characters, not a string
double vector[100] = {0.0}; //assigns zero to all 100 elements
Initializing Arrays
 float f[5]={0.0, 1.0, 2.0, 3.0, 4.0};
// initializes f[0] to 0.0, f[1] to 1.0…f[4] to 4.0
 Or
 float f[5]; f[0]=0.0; f[1]=1.0; …

 int a[10]={2}; //rest initialized to zero


cout << a[0]<< endl << a[5] << endl;

 If no size given, allocates as much as the no. of initializers


e.g. int a[] = {5, 2, -9}; // and
int a[3] = {5, 2, -9}; // are equivalent

 Can’t do: int hand[2]; hand[2]={5, 9};


 Can’t do: short y[2]={1,2,3,4};

 Don’t confuse: short b[4] and b[4]


Initializing Arrays
 for loops used to initialize arrays

#include <iostream.h>

int main()
{
int t, sample[10]; // this reserves 10 integer
elements

// load the array


for(t=0; t<10; ++t)
sample[t]=t;

// display the array


for(t=0; t<10; ++t)
cout << sample[t] << ' ';

return 0;
}
Initializing Arrays
int a[5];
 Now an indexed variable like a[1] can be used anywhere that a variable of
type int can be used

int a[5];
cin >> a[4] >> a[2];
cout << a[2] << “ “ << a[4] << endl;

cin >> a[3] >> a[0];


int max; max = a[3] + a[0]; cout << max << endl;

int next; cin >> next;


a[1]= next; cout << a[1] << endl;
a[3]= 42; cout << a[3] << endl;

int student = 2;
a[student] = 99;
cout << a[student] << “ “ << a[2] << endl;

 Also: a[get_index())] = 3; if get_index() returns an int


//Reads in 5 scores, displays max_score and shows
//how much each score differs from max_score

int main()
{
const int SIZE = 5;
int i, score[SIZE], max_score;

cout << “Enter “ << SIZE << “ scores: \n”;


cin >> score[0];
max_score = score[0];

for (i=1; i<SIZE; i++)


{
cin >> score[i];
if (score[i] > max_score)
max_score=score[i];
}

cout << “The highest score is: “ << max_score << endl
<< “Scores & their difference from highest: \n”;

for (i=0; i<SIZE; i++)


{
cout << score[i] << “ off by “
<< (max_score – score[i]) << endl;
}
return 0;
}
Initializing Arrays
 Useful to give a constant name to the size of array

/*const type modifier*/


const int NUM_EMPLOYEES = 10;
int salaries[NUM_EMPLOYEES];

for (int i=0; i < NUM_EMPLOYEES; i++)


cin >> salaries[i];

 Advantage? Why not use a variable name?


 Another way:
# define NUM_EMPLOYEES 10
 And yes, sizeof(salaries); gives what?
Arrays
• Total size of an array in bytes?

• Total bytes =
number of bytes in type * number of elements

• e.g. int sample[10];


• Has size in bytes = 10 * sizeof(int)
Initializing Arrays
• What is wrong with the following?
int num=10;
int iarray[num];

int size;
cin >> size;
int myarray[size];

double darray[5]={3.2, 4.5, 6.7, 324.0, 45.8, 23.1, 34.9}


Assigning One Array to Another
int a[10], b[10];

// ...

a = b; // error -- illegal
/*So how do we make the contents of one array
same as the other?*/
Assigning One Array to

Another
int a[5], b[5];
// ...
a = b; // error – illegal

 Cannot assign one array to another; each element must


be copied individually
const int ARRAY_SIZE = 5;
int a[] = {10, 11, 12, 13, 14};

int main()
{
int b[ARRAY_SIZE];

for (int i=0; i < ARRAY_SIZE; ++i)


b[i] = a[i];

return 0;
}
Assigning Values to an Array
•Example

int list[10];
int count;

cin >> count;

for(int i=0; i<count; i++)


cin >> list[i];

What if count >9?


Summarize Arrays
• In C++ all arrays are stored in contiguous memory
locations

• An individual element is accessed by use of an index.

• An index describes the position of an element within


an array.

• In C++ all arrays have zero as the index of their first


element.
Arrays: Min Max
int main()
{
const int SIZE = 10;
int i, min_value, max_value;
int list[SIZE];

for(i=0; i<SIZE; i++)


{
list[i] = rand();
cout<<list[i]<<" ";
}
Arrays
// find minimum value
min_value = list[0];

for(i=0; i<SIZE; i++)


{
if (min_value>list[i])
{
min_value = list[i];
}
}
cout << "minimum value: " << min_value << ‘\n’;
Arrays
// find maximum value
max_value = list[0];

for(i=0; i<SIZE; i++)


{
if (max_value<list[i])
{
max_value = list[i];
}
}
cout << "maximum value: " << max_value << '\n';
return 0;
} // end of main function
Arrays - No Bounds Checking
// An incorrect program. Do Not Execute!
int main()
{
int crash[10], i;

for(i=0; i<100; i++)


crash[i]=i;

return 1;
}
Two Dimensional Arrays
• C++ supports multi-dimensional array
– data_type array_name[ROW_SIZE][COLUMN_SIZE]
– int matrix[3][4];

row[0]
row[1]
row[2]
in memory
row1 row2 row3
Accessing Array Elements
• int matrix[3][4];
– matrix has 12 integer elements
– matrix[0][0] element in first row, first column
– matrix[2][3] element in last row, last column
Two Dimensional Arrays
int main()
{
const int ROWS = 3;
const int COLS = 4;
int i, j, num[ROWS][COLS];

for(i=0; i<ROWS; ++i)


{
for(j=0; j<COLS; ++j)
{
num[i][j] = (i*COLS)+j+1;
cout << num[i][j] << “\t“;
}
cout << “\n”;
}
return 0;
} // output?
Output:
1 2 3 4
5 6 7 8
9 10 11 12
Two Dimensional Arrays
What happens if I change [3][4] to [2][6]?
int main()
{
const int ROWS = 3;
const int COLS = 4;
int i, j, num[ROWS][COLS];

for(i=0; i<ROWS; ++i)


{
for(j=0; j<COLS; ++j)
{
num[i][j] = (i*COLS)+j+1;
cout << num[i][j] << “ “;
}
cout << “\n”;
}
return 0;
} // output?
Output:
1 2 3 4 5 6
7 8 9 10 11 12
Multidimentional Arrays
 type name[size1][size2] . . . [sizeN];

 int multidim[4][10][3];

 when multidimensional arrays are used,


large amounts of memory are consumed.
Multidimensional Array Initialization
int sqrs[10][2] = {
1, 1,
2, 4,
3, 9,
4, 16,
5, 25,
6, 36,
7, 49,
8, 64,
9, 81,
10, 100
};
Multidimensional Arrays
int main(void)
{
const int ALPHABETS = 26;
char code[ALPHABETS][2] =
{
{'a', 'f'}, {'b', 'w'}, {'c', 'x'},
{'d', 'v'}, {'e', 's'}, {'f', 'r'},
{'g', 'q'}, {'h', 'c'}, {'i', 'g'},
{'j', 'h'}, {'k', 'e'}, {'l', 'u'},
{'m', 'b'}, {'n', 'j'}, {'o', 'd'},
{'p', 'k'}, {'q', 't'}, {'r', 'l'},
{'s', 'm'}, {'t', 'n'}, {'u', 'a'},
{'v', 'o'}, {'w', 'p'}, {'x', 'z'},
{'y', 'i'}, {'z', 'y'}
};
Multidimensional Arrays
int i;
char alpha;

cout << "Enter an alphabet: ";


cin >> alpha;

for(i=0; i< ALPHABETS; i++)


{
if(code[i][0]==alpha)
{
cout << "The code of " << alpha
<< " is ";
cout << code[i][1]<<endl;
break;
}
}
return 0;
} // end of main program
C++ automatic array

int entry [31]; value has to be


known at compile time

entry

34 45 15 ---------- 36
0 1 2 ----------- 30

entry[0] = = *entry NO HEAP MEMORY


SPACE IN USE!
C++ dynamic arrays
 can use dynamic memory allocation to postpone
decision about array capacity until run-time
 array space will be on the heap
 pointer to array's beginning is not on the heap

float * dynArray; // declare pointer only


dynArray = new float [max]; // max is a variable
// use of dynamic array the same as use of an automatic array
delete [ ] dynArray; // free heap space
Dynamic Allocation
const int SIZE = 10;
double *ptr = new double[SIZE]; /*10 element array*/
int i;

for (i=0; i<SIZE; i++)


{
ptr[i] = 2.0*i;
}

for (i=0; i<SIZE; i++)


{
cout << ptr[i] << endl;
}

delete []ptr;
Array of Pointers
const int RSIZE = 4;
A two dimensional
const int CSIZE = 6; array of
int * iarray[RSIZE]; RSIZE*CSIZE

for(int k=0; k<RSIZE; k++) 012345


iarray
{ 0
iarray[k] = new int [CSIZE]; 1
if (iarray[k] == NULL) 2
{ 3
cerr << “Memory Allocation Error…\n”;
cerr << “Exiting …\n”;
exit(-1);
}
}
Double and Tripple Pointers
int a = 20;
int *ip = &a; 300 200 100 20
int **ipp = &ip; ippp ipp ip a
int ***ippp = &ipp; 400 300 200 100

cout << a << endl; 20


cout << ip << *ip << endl; 100 20
cout << ipp << *ipp << **ipp << endl; 200 100 20
cout << ippp << *ippp << **ippp << ***ippp << endl;
300 200 100 20
Dynamic Array of Pointers
const int RSIZE = 4;
A two dimensional
const int CSIZE = 6; array of RSIZE*CSIZE
int ** matrix;

matrix = new int * [RSIZE]; matrix 012345


for(int k=0; k<RSIZE; k++) 0
{ 1
matrix[k] = new int [CSIZE]; 2
if (matrix[k] == NULL) 3
{
cerr << “Memory Allocation Error…\n”;
cerr << “Exiting …\n”;
exit(-1);
}
}

You might also like