Download as ppt, pdf, or txt
Download as ppt, pdf, or txt
You are on page 1of 14

Data Structures and Algorithms Arrays

Amjad Ali

Introducation
A collection of pairs <index,value> where index is an ordered set of integers and are values of some data type that is constant for the array. not all languages require index to be continuous or contiguous or start at 0 or 1. In C arrays are zero based and are contiguous from 0 to size-1 and can contain any simple or aggregate data type

cont..
Pascal allows discontinuous indices
A(2:5, 10:20, 26) other index values are undefined and take up no memory

Perl allows indices that are not integers but are literal values (called an associative array)
A[tom] , A[dick], A[harry]

Array Types
Static arrays arrays allocated at compile time Dynamic arrays arrays allocated by the storage management system at program run time

Array Operations
Basic operations: create(A) allocates storage retrieve(A,i) return v at position i in A store(A,I,v) store v at position i in A destroy(A) deallocate storage associated with A

Create (Static Array)


static storage : int a[10]; //40 bytes char word[25]; //25 bytes

allocated as part of the program space by the compiler. &a is equivalent to a and is the address of a[0] once allocated cannot be deallocated, will always take up program space

can be initialized by compiler using an initializer (ex. int A[5] = (0,0,0,0,0); )

Create (Dynamic Array)


Dynamic : storage is allocated at run-time using malloc, cmalloc or realloc #define SIZE 10 int * myarray; myarray = (int *) malloc (SIZE*sizeof(int));
makes an array of 10 integers names myarray

cmalloc works same way but initializes array to 0 initialization to anything else requires a loop realloc will resize a previously allocated array to bigger or smaller since this happens at run time, time is expended

Dynamic arrays are created using the new operator


Example: To create an array of 10 elements of type double:
typedef double* DoublePtr; DoublePtr d; d = new double[10];

Create (Dynamic Array) C++

d can now be used as if it were an ordinary array!

store
done the same way for both static and dynamic arrays by using the assignment operator (=) a[5] = 9;

retrieve
retrieving a value from some position in an array is done the same way for both static and dynamic arrays using the array position implicitly. x[3] ; //the value of the 4th element of x can be used this way in any assignment, arithmetic/logical operation or as an argument in a function call

destruction of a statically allocated array happened when the program is done destruction of dynamically allocated arrays is done using the free(arrayname)

destroy

delete [ ] d;
The brackets tell C++ a dynamic array is being deleted so it must check the size to know how many indexed variables to remove

this returns the storage to the storage management system for subsequent allocation for something else. forgetting to deallocate unneeded storage is called a memory leak and can cause a program terminate abnormally (crash)

Array Mapping Functions


Used by the compiler to help calculate the effective address of an array element in memory Takes into account: base address the dimension the element size

memory
remember, a computers memory is really an array of bytes (indicies 0 to size-1) every time an array access (retrieve or store) is done the machine must make a calculation to see where in memory the desired location is: ex int a[5]; a[3]=2; to calculate the address of a[3] address=base address+(index*element size) = 100016 + (316*416) = 100c16
base address is assigned by compiler for static and by SMS for dynamic and kept track of in a system table for run time

cont.
int a[2][2]
0123

0x100000
0x100004 0x100008 0x10000C

0,0
0,1 1,0 1,1 a[m][n] ) This storage arrangement is known as: Row Major Order

SMF = base addr + (dim(n) * element size * indexm ) + (element size * indexn )

ex. a[1][1] addr = 100000 + (2 * 4 * 1) + (4 * 1) = 100000 + 8 + 4 = 0x10000C

You might also like