CSC-335 Data Structures and Algorithms (Chapter 3 Data Structures and Abstract Data Types)
Instructor: Ahmad Reza Hadaegh
The content of this power point lecture has been originally created by Christos Kolonis and modified by Dr. Ahmad R. Hadaegh
Chapter Contents
3.1 Data Structures, Abstract Data Types and Implementations
3.2 Static Arrays
3.3 Multidimensional Arrays (optional) 3.4 Dynamic Arrays 3.5 C-Style Structs (optional) 3.6 Procedural Programming
Chapter Objectives
Look at ADTs, implementations in detail Introduce arrays as ADTs
See arrays implemented as C++ static arrays (Optional) Describe multidimensional arrays Extend pointers to use in dynamic arrays (Optional) Show use of C++ structs to model objects with multiple attributes Show example of procedural programming paradigm
3.1 Data Structures, Abstract Data Types, and Implementations Consider example of an airplane flight with 10 seats to be assigned
Tasks
List available seats Reserve a seat
How to store, access data?
10 individual variables An array of variables
3.1 Data Structures, Abstract Data Types, and Implementations Implementation consists of
Storage (data) structures Algorithms for basic operations
Note following figure 3.1 in the next slide
C++ provides large collection of data types and structures
Fig. 3.1
C++ Types
6
3.2 Arrays Collection of data elements
All of same type
Each accessed by specifying position
Static array
Compiler determines how memory allocated
Dynamic array
Allocation takes place at run time
Single Dimension Arrays
Syntax:
ElementType arrayName [CAPACITY]; ElementType arrayName [CAPACITY] = { initializer_list };
Example:
int b [10];
Elements accessed by
name and [ ] operation
b[5]
Character Arrays
Elements of an array may be of any type
Including characters
Example:
char name [NAME_CAPACITY] = "John Doe";
If array initialized shorter than specs
extra locations filled with null character
Subscript Operation
We have said elements accessed by name and [ ]
numList[5]
Fig. 3.2
Consider the [ ] to be an operator
The subscript operator Performs address translation
Name of the array is a pointer constant
The base address
10
Using Arrays
Accessing array for output
You need to output a array element by element.
For example, suppose array A is an integer array of size 10 with some integer elements To output the elements, you get the following: for (int i=0; i< size ; i++) cout << A[i] <<
Note: You must specify number of elements of array being used (size of the array)
11
Using Arrays
In addition, when you pass an array to a function you need to consider two things:
1. Arrays are always call by reference
2. You need to specify the size of the array and a separate parameter Example:
void WorkingWithArray (int A [ ], int size) { .. . . }
12
Out of Range Errors
Most C++ compilers do not have default check indices for out of range Results of out of range array access
Program can exceed allowed memory area Program can give puzzling results
13
3.6 Problems with C-Style Arrays Capacity cannot change. An array is not an object
(in the OOP sense)
Virtually no predefined operations for non-char arrays. The Deeper Problem:
C-style arrays aren't self-contained. Selfcontained: Data , funtions, and size are encapsulated. Comparing array to vector, vectors are
14
3.3 Multidimensional Arrays
Consider a table of test scores for several different students Two-dimensional array
Syntax
ElementType arrayName [numRows][numCols]
15
3.3 Multidimensional Arrays
Consider multiple pages of the student grade book
const int NUM_ROWS = 10, NUM_COLS = 5, NUM_RANKS = 10; typedef double ThreeDimArray[NUM_ROWS][NUM_COLS][NUM_RANKS];
16
Array of Array Declarations
An array of arrays
An array whose elements are other arrays
17
Array of Array Declarations
Each of the rows is itself a one dimensional array of values
scoresTable [1][3]
scoresTable[2]
is the whole row numbered 2
18
3.7 Memory Allocation in 2-Dimensional Arrays Elements stored in rowwise order Also called column major order
location [0][4] is followed in memory by location [1][0]
19
Multidimensional Arrays as Parameters Must specify
The type and name of the array (a pointer to the base address) The number of rows The number of columns (or the length of each row)
20
3.4 Dynamic Arrays
Recall earlier mention of arrays being fixed size at compile time
Space wasted by unused elements Program cannot adjust if size set too small
Dynamic (run time) allocation mechanism provided
Acquire memory as needed Release memory when no longer needed
C++ commands new and delete
21
The new Operator
Syntax for arrays new Type [capacity] This command issues a run-time request for a block of memory
Asks for enough memory for the specified number of elements of the stated type
Example
int *arrayPtr; arrayPtr = new int[6];
22
Pointer Arithmetic
Possible to alter pointer contents
The pointer is a variable It is not a pointer constant like an array name
Example Given:
Then ptr++;
23
3.8 Failures of new
When new execute
Requests memory from heap or free store
Allocates that block for the executing program
Possible to use up available heap memory
If not enough memory for request, new throws an exception bad_alloc
24
The delete Operation
Counterpart to the new operation Requests memory be returned to the heap
Can then be reused by later allocations
Syntax
delete pointerVariable; delete [ ] arrayPointerVariable;
Frees the dynamically memory whose address is stored in the variable
Does not delete the variable itself
25
Memory Leaks
Important for programmer to make sure to deallocate memory originally allocated by new What if new is called again for intPtr?
Originally allocated memory now cannot be accessed, nor is it available for reallocation
26
Other Uses of Pointers
Command-line arguments argc is the counter how many arguments are found
argv is a pointer to the array of pointers to char
(the arguments)
Functions as arguments
The name of a function is a pointer to code
Can be passed to another function
27
3.5 Aggregate Data Types
Predefined types not always adequate to model the problem
When objects have multiple attributes When objects have collections of heterogeneous elements
C++ provides structs and classes
Create new types with multiple attributes
28
Structures
Characteristics
has a fixed size is ordered elements may be of different size direct access of elements by name (not index)
struct Date { int month, day, year; char dayOfWeek [12]; };
29
FAQs about Structures
structs can be nested (can contain struct objects) Access members with
name of struct object dot (member selector operator) . name of struct member
Date today = { 3, 4, 2005, "Tuesday"); cout << today.month;
30
Pointers to Structs
Pointers can be bound to any type
Date today = { 3, 4, 2005, "Tuesday"); Date *datePtr = &today;
Use for accessing the original location
cout << (*datePtr).day; cin >> datePtr->year;
31
3.6 Description of Procedural Programming
Typical languages : C, FORTRAN, and Pascal Action-oriented Programmers:
Identify basic tasks to solve problem Implement actions to do tasks as subprograms (procedures/functions/ subroutines) Group subprograms into programs/modules/libraries, together make up a complete system for solving the problem
32