Thanks to visit codestin.com
Credit goes to www.scribd.com

0% found this document useful (0 votes)
10 views21 pages

Lecture 3 - Arrays

Uploaded by

shaimanali435
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
10 views21 pages

Lecture 3 - Arrays

Uploaded by

shaimanali435
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
You are on page 1/ 21

Data Structures

3. Arrays ADT and C++ Implementation

3-Arrays ADT 1
Arrays ADT
• An array is defined as
– Ordered collection of a fixed number of elements
– All elements are of the same data type

• Basic operations
– Direct access to each element in the array
– Values can be retrieved or stored in each element

3-Arrays ADT 2
Properties of an Array
• Ordered
– Every element has a well defined position i.e. integer index
– First element, second element, etc.
• Fixed size or capacity
– Total number of elements are fixed
• Homogeneous
– Elements must be of the same data type (and size)
– Use arrays only for homogeneous data sets
• Direct access
– Elements are accessed directly by their position
– Time to access each element is same
– Different to sequential access where an element is only
accessed after the preceding elements

3-Arrays ADT 3
Recap: Declaring Arrays in C/C++

dataType arrayName[intExp];

• datatype – Any data type, e.g., integer, character, etc.


• arrayName – Name of array using any valid identifier
• intExp – Constant expression that evaluates to a positive
integer
Why constant?
• Example:
– const int SIZE = 10;
– int list[SIZE];

• Compiler reserves a block of consecutive memory


locations enough to hold SIZE values of type int

3-Arrays ADT 4
Recap: Accessing Arrays in C/C++

arrayName[indexExp];
• indexExp – called index, is any expression that evaluates
to a
positive integer

• In C/C++
– Array index starts at 0
– Elements of array are indexed 0, 1, 2, …, SIZE-1 list[0] 7
– [ ] is called array subscript operator list[1]
list[2] 5
• Example list[3]
– int value = list[2];

...
– list[0] = value + 2; list[9]

3-Arrays ADT 5
Recap: Array Initialization in C/C++ (1)

dataType arrayName[intExp]= {list of values}


• In C/C++, arrays can be initialized at declaration
– intExp is optional: Not necessary to specify the size

• Example: Numeric arrays


– double score[ ] = {0.11, 0.13, 0.16, 0.18, 0.21}
0 1 2 3 4
scor 0.11 0.13 0.16 0.18
e 0.21
• Example: Character arrays
– char vowel [5] = { ‘A’, ‘E’, ‘I’, ‘O’, ‘U’ }
0 1 2 3 4
vowe A E I O U
l
3-Arrays ADT 6
Recap: Array Initialization in C/C++ (2)
• Fewer values are specified than the declared size of an
array
– Numeric arrays: Remaining elements are assigned zero
– Character arrays: Remaining elements contain null character
‘\0’
 ASCII code of ‘\0’ is zero
• Example 0
1 2 3 4
– double data[5]
scor = {0.11,
0.11 0.13 0.13,
0.16 0.16}
0
e 0

1 0 2 3 4 5
– char name[6]
nam = {‘J’,
J O ‘O’,
H ‘H’,
N ‘N’}
\0 \0
e

• If more values are specified than declared size of an array


– Error is occurred: Handling depends on compiler
3-Arrays ADT 7
Array Address Translation (1)
• Consider an array declaration: int list [4] = { 1, 2, 4,
5}
– Compiler allocates a block of four memory spaces
– Each memory space is large enough to store an int value
– Four memory spaces are contiguous
• Base address
– Address of the first byte (or word) in the contiguous block of
memory
– Address of the memory location of the list first list[0]
array element
• Memory address associated
list[0]with
1000
 Address of element 1001
arrayName stores the base address 1002
1003
list[1] 1004
• Example 1005
1006
– cout << list << endl; (Print list[2] 1007
1008
1000) 1009
1010
– cout << *list << endl; (Print 1) list[3] 1011
1012
• * is dereferencing operator 1013
1014
1015
– Returns content of a memory
location 3-Arrays ADT 8
Array Address Translation (2)
• Consider a statement: cout << list[3];
– Requires array reference list[3]be translated into memory
address
– Offset: Determines the address of a particular element w.r.t.
base address

• Translation
– Base address + offset = 1000 + 3 x sizeof(int) = 1012
– Content of address 1012 are retrieved & displayed
list[0] 1000
1001
• An address translation is carried 1002
1003
list[1] 1004
out each time an array element is 1005
1006
accessed list[2] 1007
1008
1009
1010
1011
• What will be printed and why? list[3] 1012
1013
1014
– cout << *(list+3) << endl; 1015

3-Arrays ADT 9
Questions
• Why does an array index start at zero?
– 0 based index allows array[index] to be implemented as
*(array+index)
– 1 based index allows array[index] to be implemented as
*(array+index-1)

• Why arrays are not passed by value?


– The name of the array is evaluated as the pointer to the first
element of array.
 int array[5];
 array means &array[0]

3-Arrays ADT 10
Multidimensional Arrays
• Most languages support arrays with more than one dimension
– High dimensions capture characteristics/correlations associated
with data

• Example: A table of test scores for different students on


several tests
– 2D array is suitable for storage and processing of data
Test 1 Test 2 Test 3 Test 4
Student 1 99.0 93.5 89.0 91.0
Student 2 66.0 68.0 84.5 82.0
Student 3 88.5 78.5 70.0 65.0
: : : : :
: : : : :
Student N 100.0 99.5 100.0 99.0

3-Arrays ADT 11
Multidimensional Arrays
• More complicated than one dimensional arrays

• Memory is organized as a sequence of memory locations


– One-dimensional (1D) organization

• How to use a 1D organization to store multidimensional


data?

• Example: A B C D
E F G H
I J K L

– A character requires single byte


– Compiler request to reserve 12 consecutive bytes
– Two way to store consecutively, i.e., row-wise and column-
wise
3-Arrays ADT 12
Two-dimensional Arrays in Memory
• Two ways to be represented in memory
– Column majored
 Column by column
– Row majored
 Row by row
– Representation depends upon the programming language

(1,1) (1,1)
(2,1) Column 1 (1,2) Row 1
(3,1) (1,3)
(1,2) (1,4)
(2,2) Column 2 (2,1)
(3,2) (2,2) Row 2
(1,3) (2,3)
(2,3) Column 3 (2,4)
(3,3) (3,1)
(1,4) (3,2) Row 3
(2,4) Column 4 (3,3)
(3,4) (3,4)

3-Arrays ADT 13
Address Translation
• Address Translation in Row Major representation
– When index starts from 0
 Array[i][j]=B+( (i*n)+j)*size
– When index starts from 1
 Array[i][j]= B+(((i-1)*n)+(j-1))*size
• Address Translation in Column Major representation
– When index starts from 0
 B +((j*m)+i)*size
– When index starts from 1
 B +(((j-1)*m)+(i-1))*size

Where
m= no of rows
N=no of cols

3-Arrays ADT 14
Two Dimensional Arrays – Declaration

dataType arrayName[intExp1][intExp2];
• intExp1 – constant expression specifying number of rows
• intExp2 – constant expression specifying number of
columns

• Example:
– const int NUM_ROW = 2, NUM_COLUMN = 4;
– double score[NUM_ROW][NUM_COLUMN];

• Initialization:
– double score[ ][4] = { {0.5, 0.6, 0.3},
{0.6, 0.3, 0.8}};
– List the initial values in braces, row by row
– May use internal braces for each row to improve readability
3-Arrays ADT 15
Two Dimensional Arrays – Processing

arrayName[indexExp1][indexExp2];
• indexExp1 – row index
• indexExp2 – column index

• Rows and columns are numbered from 0


• Use nested loops to vary two indices
– Row-wise or column-wise manner score [0 [1 [2 [3
[0 ] ] ] ]
2.7
][1
• Example
][2 0.7
– double value = score[2][1]; ]
[3
– score[0][3] = value + 2.0; ]

...
...

...

...
[9
]
3-Arrays ADT 16
Higher Dimensional Arrays
• Example: Store and process a table of test scores
– For several different students
– On several different tests
– Belonging to different semesters

const int SEMS = 10, STUDENTS = 30, TESTS = 4;


typedef double ThreeDimArray[SEMS][STUDENTS][TESTS];
ThreeDimArray gradeBook;

• What is represented by gradeBook[4][2][3]?


– Score of 3rd student belonging to 5th semester on 4th test

• All indices start from zero

3-Arrays ADT 17
Array of Arrays (1)
• Consider the declaration score [0 [1 [2 [3
[0 ] ] ] ]
– double score[10][4]; ][1
][2
• Another way of declaration ]
[3
– One-dimensional (1D) array of rows ]

...
...

...

...
[9
typedef double RowOfTable[4]; ]
RowOfTable score[10];
score [0 [1 [2 [3
• In detail [0 ] ] ] ]
]
– Declare score as 1D array [1
containing 10 elements ]
[2
– Each of 10 elements is 1D array ]
[3
of 4 real numbers (i.e., double) ]

...

...

...

...
[9
3-Arrays ADT ] 18
Array of Arrays (2)
• score[i]
– Indicates ith row of the table

• score[i][j]
– Can be thought of as (score[i])[j]
– Indicates jth element of score[i]

Generalization:
An n-dimensional array can be viewed (recursively) as a 1D array whose
elements are (n-1)-dimensional arrays

3-Arrays ADT 19
C/C++ Implementation of an Array ADT

As an ADT In C/C++
Ordered Index: 0,1,2, … SIZE-1
Fixed Size intExp is constant
Homogeneous dataType is the type of all
elements
Direct Access Array subscripting operator [ ]

3-Arrays ADT 20
Any Question So Far?

2-ADTs 21

You might also like