cs-240 data structures in c arrays dick steflik. abstract data type a collection of pairs where...
Post on 19-Dec-2015
217 views
TRANSCRIPT
![Page 1: CS-240 Data Structures in C Arrays Dick Steflik. Abstract Data Type A collection of pairs where index is an ordered set of integers and are values of](https://reader036.vdocument.in/reader036/viewer/2022062516/56649d365503460f94a0d90c/html5/thumbnails/1.jpg)
CS-240 Data Structures in C
Arrays
Dick Steflik
![Page 2: CS-240 Data Structures in C Arrays Dick Steflik. Abstract Data Type A collection of pairs where index is an ordered set of integers and are values of](https://reader036.vdocument.in/reader036/viewer/2022062516/56649d365503460f94a0d90c/html5/thumbnails/2.jpg)
Abstract Data Type
• 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
![Page 3: CS-240 Data Structures in C Arrays Dick Steflik. Abstract Data Type A collection of pairs where index is an ordered set of integers and are values of](https://reader036.vdocument.in/reader036/viewer/2022062516/56649d365503460f94a0d90c/html5/thumbnails/3.jpg)
ADT (cont.)
• Pascal allows discontinous indicies– A(2:5, 10:20, 26) other index values are
undefined and take up no memory
• Perl allows indicies that are not integers but are literal values (called an associative array)– A[tom] , A[dick], A[harry]
![Page 4: CS-240 Data Structures in C Arrays Dick Steflik. Abstract Data Type A collection of pairs where index is an ordered set of integers and are values of](https://reader036.vdocument.in/reader036/viewer/2022062516/56649d365503460f94a0d90c/html5/thumbnails/4.jpg)
ADT (cont.)
• Static arrays – arrays allocated at compile time
• Dynamic arrays – arrays allocated by the storage management system at program run time
![Page 5: CS-240 Data Structures in C Arrays Dick Steflik. Abstract Data Type A collection of pairs where index is an ordered set of integers and are values of](https://reader036.vdocument.in/reader036/viewer/2022062516/56649d365503460f94a0d90c/html5/thumbnails/5.jpg)
ADT Operations
• Basic operations:create(A) – allocates storageretrieve(A,i) – return v at position i in A store(A,I,v) – store v at position i in Adestroy(A) – deallocate storage associated with A
![Page 6: CS-240 Data Structures in C Arrays Dick Steflik. Abstract Data Type A collection of pairs where index is an ordered set of integers and are values of](https://reader036.vdocument.in/reader036/viewer/2022062516/56649d365503460f94a0d90c/html5/thumbnails/6.jpg)
create
• 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); )
![Page 7: CS-240 Data Structures in C Arrays Dick Steflik. Abstract Data Type A collection of pairs where index is an ordered set of integers and are values of](https://reader036.vdocument.in/reader036/viewer/2022062516/56649d365503460f94a0d90c/html5/thumbnails/7.jpg)
create
• 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 0initialization 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
![Page 8: CS-240 Data Structures in C Arrays Dick Steflik. Abstract Data Type A collection of pairs where index is an ordered set of integers and are values of](https://reader036.vdocument.in/reader036/viewer/2022062516/56649d365503460f94a0d90c/html5/thumbnails/8.jpg)
store
• done the same way for both static and dynamic arrays by using the assignment operator (=)
a[5] = 9;
![Page 9: CS-240 Data Structures in C Arrays Dick Steflik. Abstract Data Type A collection of pairs where index is an ordered set of integers and are values of](https://reader036.vdocument.in/reader036/viewer/2022062516/56649d365503460f94a0d90c/html5/thumbnails/9.jpg)
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
![Page 10: CS-240 Data Structures in C Arrays Dick Steflik. Abstract Data Type A collection of pairs where index is an ordered set of integers and are values of](https://reader036.vdocument.in/reader036/viewer/2022062516/56649d365503460f94a0d90c/html5/thumbnails/10.jpg)
destroy
• destruction of a statically allocated array happened when the program is done
• destruction of dynamically allocated arrays is done using the free(arrayname) function, 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)
![Page 11: CS-240 Data Structures in C Arrays Dick Steflik. Abstract Data Type A collection of pairs where index is an ordered set of integers and are values of](https://reader036.vdocument.in/reader036/viewer/2022062516/56649d365503460f94a0d90c/html5/thumbnails/11.jpg)
memory• remember, a computer’s 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
![Page 12: CS-240 Data Structures in C Arrays Dick Steflik. Abstract Data Type A collection of pairs where index is an ordered set of integers and are values of](https://reader036.vdocument.in/reader036/viewer/2022062516/56649d365503460f94a0d90c/html5/thumbnails/12.jpg)
Structures• Allows us to create and aggregate data
type: typedef struct person { char name[10]; int age; } person tom; - tom takes up 14 bytes of storage; 10 for name and the next 4 for age
![Page 13: CS-240 Data Structures in C Arrays Dick Steflik. Abstract Data Type A collection of pairs where index is an ordered set of integers and are values of](https://reader036.vdocument.in/reader036/viewer/2022062516/56649d365503460f94a0d90c/html5/thumbnails/13.jpg)
Structures
• Structures can be embedded within one another:
typedef struct date
{ int month;
int date;
int year;
};
typedef struct student
{ char name[16];
date dateOfBirth;
};
date pearlHarborDay; // 12 bytes of storage
student typical; // 18 bytes of storage
student class[30]; // 540 bytes of storage
![Page 14: CS-240 Data Structures in C Arrays Dick Steflik. Abstract Data Type A collection of pairs where index is an ordered set of integers and are values of](https://reader036.vdocument.in/reader036/viewer/2022062516/56649d365503460f94a0d90c/html5/thumbnails/14.jpg)
Unions• A union is like a structure but the fields don’t
always have to have the same definition
typedef struct sextype
{ enum tag (female, male) sex;
union {
int children;
char beard;
} u;
};
typedef struct human
{ char name[10];
short age;
float salary;
date dob;
sextype sexinfo;
};
The compiler will always reserve the maximum number bytes for the union; i.e.
even though sextype for wormen is 4 bytes and only one byte for men the compiler will always reserve 4.
![Page 15: CS-240 Data Structures in C Arrays Dick Steflik. Abstract Data Type A collection of pairs where index is an ordered set of integers and are values of](https://reader036.vdocument.in/reader036/viewer/2022062516/56649d365503460f94a0d90c/html5/thumbnails/15.jpg)
Self-Referential Structures
• Structure that refers to an item of the same type.
• used for dynamic data structures like lists and trees.
typedef struct node
{ int key;
node * next;
}
![Page 16: CS-240 Data Structures in C Arrays Dick Steflik. Abstract Data Type A collection of pairs where index is an ordered set of integers and are values of](https://reader036.vdocument.in/reader036/viewer/2022062516/56649d365503460f94a0d90c/html5/thumbnails/16.jpg)
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
![Page 17: CS-240 Data Structures in C Arrays Dick Steflik. Abstract Data Type A collection of pairs where index is an ordered set of integers and are values of](https://reader036.vdocument.in/reader036/viewer/2022062516/56649d365503460f94a0d90c/html5/thumbnails/17.jpg)
2 dimensional arrays
• int a[2][2] can be visualized as a 2x2 square matrix but is really an array of two elements where each element is an array of two ints
0
0 1
1
0
1
0 1
0 1
![Page 18: CS-240 Data Structures in C Arrays Dick Steflik. Abstract Data Type A collection of pairs where index is an ordered set of integers and are values of](https://reader036.vdocument.in/reader036/viewer/2022062516/56649d365503460f94a0d90c/html5/thumbnails/18.jpg)
cont.
0x100000
0x100004
0x100008
0x10000C
0,0
0,1
1,0
1,1
int a[2][2]
This storage arrangement is known as:
Row Major Order
0 1 2 3
SMF = base addr + (dim(n) * element size * indexm ) + (element size * indexn )
a[m][n])
ex. a[1][1]
addr = 100000 + (2 * 4 * 1) + (4 * 1)
= 100000 + 8 + 4 = 0x10000C
![Page 19: CS-240 Data Structures in C Arrays Dick Steflik. Abstract Data Type A collection of pairs where index is an ordered set of integers and are values of](https://reader036.vdocument.in/reader036/viewer/2022062516/56649d365503460f94a0d90c/html5/thumbnails/19.jpg)
Sparse Arrays
• arrays where many or most of the elements will have the value zero (or possibly the same value)
• examples: high order polynomials, bit mapped graphics, linear algebra ( diagional matricies(identity matrix, tridiagonal, banded), triangular matrices, )
![Page 20: CS-240 Data Structures in C Arrays Dick Steflik. Abstract Data Type A collection of pairs where index is an ordered set of integers and are values of](https://reader036.vdocument.in/reader036/viewer/2022062516/56649d365503460f94a0d90c/html5/thumbnails/20.jpg)
Polynomial representation
// an array of struct
#define MAXTERMS 10
typedef struct term {
real coeff;
int expnt;}
term poly1[MAXSIZE];
term poly2[MAXSIZE];
term poly3[MAXSIZE];
one dimensional array where:
index represents the exponent
and the stored value is the
corresponding coefficient
0 1 2 3 4 5 6 7 8 9
2x8 + 4x2 + 1
241
OR
![Page 21: CS-240 Data Structures in C Arrays Dick Steflik. Abstract Data Type A collection of pairs where index is an ordered set of integers and are values of](https://reader036.vdocument.in/reader036/viewer/2022062516/56649d365503460f94a0d90c/html5/thumbnails/21.jpg)
Identity Matrix• Only has values on the major diagonal
v0 0
v 0 0
0 0 v
0 1 2
0
1
2
AMF[m][n]
if (m == n)
return v
else return 0
map it on top of a one dimensional array of three elements
v v v AMF[m][n]
if ( m == n ) return A[m] else return 0