1 / 68

C++ Plus Data Structures

C++ Plus Data Structures. Nell Dale David Teague Chapter 2 Data Design and Implementation Slides by Sylvia Sorkin, Community College of Baltimore County - Essex Campus. Data. The representation of information in a manner suitable for communication or analysis by humans or machines

lee-becker
Download Presentation

C++ Plus Data Structures

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. C++ Plus Data Structures Nell Dale David Teague Chapter 2 Data Design and Implementation Slides by Sylvia Sorkin, Community College of Baltimore County - Essex Campus expanded by J. Goetz

  2. Data • The representation of information in a manner suitable for communication or analysis by humans or machines • Data are the nouns of the programming world: • The objects that are manipulated • The information that is processed expanded by J. Goetz

  3. Data Abstraction • Separation of a data type’s logical properties (domain and operations) from its implementation. • e.g. declare an int type variable and operations are allowed: =, +, -, *,/, % LOGICAL PROPERTIES IMPLEMENTATION What are the possible values? How can this be done in C++? Whatoperations will be needed? How can data types be used? expanded by J. Goetz

  4. Data Abstraction Whether we use • functional decomposition producing a hierarchy of tasks or • object-oriented design producing a hierarchy of cooperating objects, data abstraction is essential. expanded by J. Goetz

  5. APPLICATION REPRESENTATION 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 1 Data Encapsulation • is the separation of the representation of datafrom theapplications that use the data at a logical level; a programming language feature that enforces information hiding. • The user of the data doesn’t see the implementation, but deals with its abstraction. int y; y = 25; expanded by J. Goetz

  6. Encapsulated C++ Data Type int TYPE int Representation of int as 16 bits two’s complement + Implementation of Operations Value range: INT_MIN . . INT_MAX Operations: + prefix - prefix + infix - infix * infix / infix %infix Relational Operators Equality Operators inside expanded by J. Goetz

  7. Abstract Data Type (ADT) • A data type whose logical properties (domain and operations) are specified independently of any particular implementation (so you don’t worry about implementation, the lower level is hidden). • Domain: int y; • Operations: • create variables by declarations, • assign values by using “=“, • reading by using arithmetic operators • etc. • The goal of design is to reduce complexity through abstraction and protect our data abstraction through encapsulation. expanded by J. Goetz

  8. ADT vs Data Structure ADT The logical picture of the data and the operations that manipulate them Data Structure • 1. The concreteimplementation of the data. • 2. A collection of data elementswhose organization (arrangement ) is characterized by accessing operations that are used to store and retrieve the individual data elements; • 3. The implementation of the composite data members in an abstract date type expanded by J. Goetz

  9. Data Structure • The logical arrangement of data elements, combined with • The set of operations we need to access the elements expanded by J. Goetz

  10. Data Structures • Data Structures can be • Decomposed into their components • Arrange that affects how each element is accessed • The arrangement can be encapsulated • An abstract data type (ADT) is implementation independent and a data structure is implementation dependent. expanded by J. Goetz

  11. Data from 3 different levels in modeling data in a program • Application (or user) level:modeling real-life data in a specific context. • Logical (or ADT) level:abstract view of the domain (the data values) and operations. WHAT question • ADT Implementation level:specificrepresentation of the structure to hold the data items, and the algorithm for operations. • HOW question expanded by J. Goetz

  12. Viewing a library from 3 different levels • Application (or user) level: Library of Congress, or Baltimore County Public Library. • Logical (or ADT) level:What is a library?; domain is a collection of books; (What are)operations include: check book out, check book in, pay fine, reserve a book. • Implementation level:representation of the structure to hold the “books”, and the coding for operations. • How are the books cataloged? A decimal system.How are they organized on the shelf? 4 leves with 20 shelvs on each level.How does the librarian process a book when it is checked in? p.58 etc. expanded by J. Goetz

  13. Modeling Data Goal in Program • 1. Determine the logical picture of the data (ADT) • 2.Choose the representation and arrangement of the data • 3. Develop the operations that encapsulate this arrangement. expanded by J. Goetz

  14. 4 Basic Kinds of ADT Operations • Constructor -- creates a new instance (object) of an ADT. • Transformer -- changes the state of one or more of the data values of an instance. • e.g. insert/delete an item, making an object empty , a[1] = 5 • Observer -- allows us to observe the state of one or more of the data values without changing them. • e.g. accessor/selector functions that return a copy of an item, val = a[1]; summary functions about the object as a whole - # of items in the object; Boolean functions that returns true if an object empty • Iterator -- allows us to process all the components in a data structure sequentially. • e.g. return successive list items 14 expanded by J. Goetz

  15. Composite Data Type A composite data type is a type which • stores a collection of individualdata components under one variable name, • and allows the individual data components to be accessed. expanded by J. Goetz

  16. Two Forms of Composite Data Types UNSTRUCTURED STRUCTURED The organization determines method used to access individual data components. Components are not organized with respect to one another. EXAMPLES:EXAMPLES: arrays classes and structs, unions 16 expanded by J. Goetz

  17. Address pointer reference C++ Built-In Data Types Simple Composite Integral Floating array struct union class char short int long enum float double long double

  18. thisCar at Base Address 6000 .year 1999 .maker ‘h’ ‘o’ ‘n’ ‘d’ ‘a’ ‘\0’ . . . .price 18678.92 Records A record is a composite data type made up of a finite collection of not necessarily homogeneous elements called membersor fields. For example . . . expanded by J. Goetz

  19. struct CarType struct CarType { int year ; char maker[10]; float price ; } ; CarType thisCar; //CarType variables CarType myCar; expanded by J. Goetz

  20. Accessing struct members The member selection operator (period . ) is used between the record variable name and the member identifier (selector) to access individual members of a record (struct or class) type variable. EXAMPLES myCar.year thisCar.maker[4] expanded by J. Goetz

  21. Valid struct operations • Operations validon an entire struct type variable: 1. assignment to another struct variable of same type, 2. pass as a parameter to a function (either byvalue or by reference), 3. return as the value of a function. expanded by J. Goetz

  22. CALLING BLOCK FUNCTION CALLED Pass-by-value sends a copy of the contents of the actual parameter SO, the actual parameter cannot be changed by the function. 22 expanded by J. Goetz

  23. sends the location (memory address) of the actual parameter CALLING BLOCK FUNCTION CALLED Pass-by-reference can change value of actual parameter 23 expanded by J. Goetz

  24. Implementation level using struct type Reference Parameter to change a member void AdjustForInflation(CarType& car, float perCent) // Increases price by the amount specified in perCent { car.price = car.price * perCent + car.price; } ; SAMPLE CALL AdjustForInflation(myCar, 0.03); expanded by J. Goetz

  25. Using struct type Value Parameter to examine a member bool LateModel(CarType car, int date) // Returns true if the car’s model year is later than or // equal to date; returns false otherwise. { return ( car.year >= date ) ; } ; SAMPLE CALL if ( LateModel(myCar, 1995) ) std::cout << myCar.price << std::endl ; expanded by J. Goetz

  26. One-Dimensional Array at the Logical Level A one-dimensional array is a structured composite data type made up of a finite, fixed size(known at compile time) collection of orderedhomogeneous(all of the same data type) elements having relative positions and to which there is direct access (any element can be accessed immediately without accessing preceding elements). Syntax of the declaration: DataType arrayName [ConstIntExpression]; ConstIntExpression is an integer expression composed only literal or named constants e.g. MAX). expanded by J. Goetz

  27. One-Dimensional Array Syntax of the component selector: array-Name[IndexExpression] Whatever the form of the expression, it must result in an integer value. • Array operations (creation) are performed using a declaration and (storing a value, retrieving a value) using indexes. expanded by J. Goetz

  28. Implementation Level This ACCESSING FUNCTION gives position of values[Index] Address(Index) = BaseAddress + Index * SizeOfElement float values[5]; //it serves as a primitive constructor operation // assume element size is 4 bytes Base Address 7000 7004 7008 7012 7016 values[0] values[1] values[2] values[3] values[4] Indexes expanded by J. Goetz

  29. One-Dimensional Arrays in C++ • The index must be of an integral type (char, short, int, long, or enum). • The index range is always 0 through the array size minus 1. Valid struct operations • Arrays cannot be assigned, • and cannot be the return type of a function. expanded by J. Goetz

  30. Another Example char name[10]; // assume element size is 1 byte The arrangment of this array in memory This ACCESSING FUNCTION gives position of name[Index] Address(Index) = BaseAddress + Index * SizeOfElement Base Address 6000 6001 6002 6003 6004 6005 6006 6007 6008 6009 name[0] name[1] name[2] name[3] name[4] . . . . . name[9] Offset = Index * SizeOfElement expanded by J. Goetz

  31. Passing Arrays as Parameters • In C++, arrays are always passed by reference, and & is not used (omitted) ! with the formal parameter type. • Whenever an array is passed as a parameter, its base address is sent to the called function. expanded by J. Goetz

  32. const array parameter Because arrays are always passed as reference parameters, you can protect the actual parameter from unintentional changes by using const in formal parameter list and function prototype. FOR EXAMPLE . . . // prototype float SumValues( const float values[ ], int numOfValues ); expanded by J. Goetz

  33. float SumValues (const float values[ ], /* the compiler needs to know that is an array; separate parameter is passed for the # of elements */ int numOfValues ) // Pre: values[ 0] through values[numOfValues-1] // have been assigned // Post: Returns the sum of values[0] through values[numOfValues-1] { float sum = 0; for ( int index = 0; index < numOfValues; index++ ) { sum += values [ index ] ; } return sum; } 33

  34. Two-Dimensional Array at the Logical Level A two-dimensional array is a structuredcomposite data type made up of a finite, fixed size collection of homogeneouselements having relative positions and to which there is direct access. Array operations (creation) are performed using a declaration and (storing a value, retrieving a value) using a pair of indexes(called row and column) representing the component’s position in each dimension. expanded by J. Goetz

  35. EXAMPLE -- To keep monthly high temperatures for 50 states in a two-dimensional array. const int NUM_STATES = 50 ; const int NUM_MONTHS = 12 ; int stateHighs [ NUM_STATES ] [ NUM_MONTHS ] ; [ 0 ] [ 1 ] [ 2 ] . . stateHighs [2] [7] . [ 48 ] [ 49 ] [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] 66 64 72 78 85 90 99 115 98 90 88 80 row 2, col 7 might be Arizona’s high for August expanded by J. Goetz

  36. Finding the average high temperature for Arizona int total = 0 ; int month ; int average ; for ( month = 0 ; month < NUM_MONTHS ; month ++ ) total = total + stateHighs [ 2 ] [ month ] ; average = int ( total / 12.0 + 0.5 ) ; expanded by J. Goetz

  37. const int NUM_STATES = 50 ;const int NUM_MONTHS = 12 ;int stateHighs [ NUM_STATES ] [ NUM_MONTHS ] ; Implementation level - STORAGE • In memory, C++ stores arrays in row order. The first row is followed by the second row, etc. rows columns Base Address 8000 8024 8048 . . . 12 highs for state 0 12 highs for state 1 etc. Alabama Alaska first rowsecond row expanded by J. Goetz

  38. Implementation Level View stateHighs[ 0 ] [ 0 ] stateHighs[ 0 ] [ 1 ] stateHighs[ 0 ] [ 2 ] stateHighs[ 0 ] [ 3 ] stateHighs[ 0 ] [ 4 ] stateHighs[ 0 ] [ 5 ] stateHighs[ 0 ] [ 6 ] stateHighs[ 0 ] [ 7 ] stateHighs[ 0 ] [ 8 ] stateHighs[ 0 ] [ 9 ] stateHighs[ 0 ] [10 ] stateHighs[ 0 ] [11 ] stateHighs[ 1 ] [ 0 ] stateHighs[ 1 ] [ 1 ] stateHighs[ 1 ] [ 2 ] stateHighs[ 1 ] [ 3 ] . . . Base Address 8000 To locate an element such as stateHighs [ 2 ] [ 7] the compiler needs to know that there are 12 columns in this two-dimensional array. At what address will stateHighs [ 2 ] [ 7 ] be found? Assume 2 bytes for type int. expanded by J. Goetz

  39. Two-Dimensional Array Parameters • Just as with a one-dimensional array, when a two- (or higher) dimensional array is passed as a parameter, the base address of the actual array is sent to the function. • The size of all dimensions except the first mustbe included in the function heading and prototype. • The sizes of those dimensions for the formal parameter must be exactly the same as in the actual array. expanded by J. Goetz

  40. Use the two-dimensional stateHighs array to fill a one-dimensional stateAverages array const int NUM_STATES = 50 ; const int NUM_MONTHS = 12 ; int stateHighs [ NUM_STATES ] [ NUM_MONTHS ] ; int stateAverages [ NUM_STATES ] ; [ 0 ] ? [ 1 ] ? [ 2 ] . . . [ 48 ] [ 49 ] [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] Alaska Arizona 43 42 50 55 60 78 79 80 77 72 63 40 66 64 72 78 85 90 99 115 98 90 88 80 expanded by J. Goetz

  41. void FindAverages( /* in */ const int stateHighs [ ] [ NUM_MONTHS] , /* in/out */ int stateAverages [ ] ) // Pre: stateHighs[ 0..NUM_STATES-1] [ 0..NUM_MONTHS-1] assigned // Post: stateAverages[ 0..NUM_STATES-1 ] contains rounded average // high temperature for each state { int state; int month; int total; for ( state = 0 ; state < NUM_STATES; state++ ) { total = 0 ; for ( month = 0 ; month < NUM_MONTHS ; month++ ) total += stateHighs [ state ] [ month ] ; stateAverages [ state ] = int ( total / 12.0 + 0.5 ) ; } } 41

  42. Finding the Average High Temperature for Arizona enum StateType { AL, AK, AZ, AR, CA, CO, CT, DE, FL, GA, HI, ID, IL, IN, IA, KS, KY, LA, ME, MD, MA, MI, MN, MS, MO, MT, NE, NV, NH, NJ, NM, NY, NC, ND, OH, OK, OR, PA, RI, SC, SD, TN, TX, UT, VT, VA, WA, WV, WI, WY }; enum MonthType { JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC } ; const int NUM_MONTHS = 12 ; const int NUM_STATES = 50 ; int stateHighs [ NUM_STATES ] [ NUM_MONTHS ] ; int total = 0 ; MonthType month ; // WITH ENUM TYPES DEFINED int average ; for ( month = JAN ; month <= DEC ; month = MonthType( month + 1) ) total = total + stateHighs [ AZ] [ month ] ; average = int ( total / 12.0 + 0.5 ) ; expanded by J. Goetz

  43. Usingtypedefwith arrays helps eliminate the chances of size mismatches between formal and actual parameters. FOR EXAMPLE, typedef int StateHighsType [ NUM_STATES ] [ NUM_MONTHS ] ; typedef int StateAveragesType [ NUM_STATES ] ; void FindAverages( /* in */ const StateHighsType stateHighs , /* out */ StateAveragesType stateAverages ) { . . . } 43 expanded by J. Goetz

  44. Declaring Multidimensional Arrays EXAMPLE USING TYPEDEF const int NUM_DEPTS = 5 ; // mens, womens, childrens, electronics, linens const int NUM_MONTHS = 12 ; const int NUM_STORES = 3 ; // White Marsh, Owings Mills, Towson typedef long MonthlySalesType[NUM_DEPTS] [NUM_MONTHS] [NUM_STORES]; MonthlySalesType monthlySales; expanded by J. Goetz

  45. const int NUM_DEPTS = 5 ; // mens, womens, childrens, electronics, linens const int NUM_MONTHS = 12 ; const int NUM_STORES = 3 ; // White Marsh, Owings Mills, Towson typedef long MonthlySalesType[NUM_DEPTS] [NUM_MONTHS] [NUM_STORES] ; MonthlySalesType monthlySales; monthlySales[3][7][0] sales for electronics in August at White Marsh 3 STORES sheets 5 DEPTS rows 45 12 MONTHS columns

  46. C++ class data type • A class is an unstructured type that encapsulates a fixed number of data components (data members) with the functions (called member functions) that manipulate them. • The predefined operations on an instance of a class are whole assignment and component access. expanded by J. Goetz

  47. Use of C++ data type class • Variables of a class type are called objects (or instances) of that particular class. • Software that declares and uses objects of the class is called a client. • Client code uses public member functions (called methods in OOP) to handle its class objects. • Sending a message means calling a public member function. expanded by J. Goetz

  48. classDateType Specification // SPECIFICATION FILE ( datetype.h ) class DateType// declares a class data type { public : // 4 public member functions - accessed by the client code void Initialize ( int newMonth , int newDay , int newYear ) ; // a transformer operation int YearIs( ) const ; // returns year – an accessor function int MonthIs( ) const ; // returns month – an accessor int DayIs( ) const ; // returns day – an accessor private :// 3 private data members – cannot be accessed by the client code, accessed by the class member functions int year ; int month ; int day ; } ; 48 expanded by J. Goetz

  49. 2 separate files generally used for class type // SPECIFICATION FILE ( datetype .h ) // Specifies the data and function members. class DateType { public: . . . private: . . . } ; // IMPLEMENTATION FILE ( datetype.cpp ) // Implements the DateType member functions. . . . expanded by J. Goetz

  50. Implementation of DateType member functions // IMPLEMENTATION FILE (datetype.cpp) #include “datetype.h” // also must appear in client code void DateType :: Initialize ( int newMonth, int newDay, int newYear ) // Post: year is set to newYear. // month is set to newMonth. // day is set to newDay. { year = newYear ; month = newMonth ; day = newDay ; } 50 expanded by J. Goetz

More Related