chapter 5 – dynamic data structure par1: abstract data type data structures & algorithms...
TRANSCRIPT
Chapter 5 – Dynamic Data StructurePar1: Abstract Data Type
DATA STRUCTURES & ALGORITHMS
Teacher: Nguyen Do Thai NguyenE-mail: [email protected]: 0906667597Group: https://www.facebook.com/groups/335118686690998
Ho Chi Minh City University of Pedagogy
1
2
3
Abstract Data Type (ADT)
Overview object oriented
programming
Pointer and Dynamic
memory allocation
Outline
1. Abstract Data Type
• It’s a data type• It can hold both data and operation• An ADT is a collection of data and associated
operations for manipulating that data • ADT support abstraction, encapsulation, and
information hiding
1. Abatract Data Type
• ADT C++: class • Examples
– the set ADT• A set of elements• Operations: union, intersection, size and complement
– the queue ADT• A set of sequences of elements• Operations: create empty queue, insert, examine, delete,
and destroy queue
– Stack ADT– List ADT
The List ADT
• Concept: A sequence of zero or more elements
A1, A2, A3, … AN
• Member data:– Size (N): length of the list– List Contents:
• A1: first element
• AN: last element
The List ADT
• Operations:– printList: print the list– makeEmpty: create an empty list– find: locate the position of an object in a list
• list: 34,12, 52, 16, 12• find(52) 3
• Two standard implementations for the list ADT– Array-based– Linked list
The List ADT
Operations:• insert: insert an object to a list
– insert(x,3) 34, 12, 52, x, 16, 12
• remove: delete an element from the list– remove(52) 34, 12, x, 16, 12
• findKth: retrieve the element at a certain position
Linked List
• Ensure that the list is not stored contiguously– use a linked list– a series of structures that are not necessarily adjacent
2. Overview object oriented programming
• Class is a template that include data and
functions operating on these data (attribute and
method – data member and function member)
– A class represents a set of objects that have
common properties
• Object is an instance of a class, an entity
created using a class definition.
2. Overview object oriented programming
• Object-Oriented Design Principles– Abstraction– Encapsulation– Modularity.
2. Overview object oriented programming
• Class declaration in c++:
class ClassName
{
public:
memberFunction1();
memberFunction2();
…………..
private:
DataType1 memberdata1;
DataType2 memberdata2;
…………….
};
privateprotected
public
Memory Management
• Static Memory Allocation– Memory is allocated at compilation time
• Dynamic Memory– Memory is allocated at running time
Static vs. Dynamic Objects
• Static object
(variables as declared in function calls)
– Memory is acquired automatically
– Memory is returned automatically when object goes out of scope
• Dynamic object
– Memory is acquired by program with an allocation request
• new operation
– Dynamic objects can exist beyond the function in which they were allocated
– Object memory is returned by a deallocation request
• delete operation
Object (variable) creation: New
Syntax
ptr = new SomeType;
where ptr is a pointer of type SomeType
p
Uninitialized int variable
Example
int* p = new int;
Object (variable) destruction: Delete
Syntax
delete p; storage pointed to by p is returned to free store and p is now
undefined
p
Exampleint* p = new int;*p = 10;delete p;
10
Array of New: dynamic arrays
• Syntax
P = new SomeType[Expression];– Where
• P is a pointer of type SomeType• Expression is the number of objects to be
constructed -- we are making an array
• Because of the flexible pointer syntax, P can be considered to be an array
Example
Dynamic Memory Allocation Request for “unnamed” memory from the Operating System
int *p, n=10;p = new int;
p = new int[100];
pnew
pnew
p = new int[n]; pnew
Memory Allocation Example
Want an array of unknown sizemain(){ cout << “How many students? “; cin >> n;
int *grades = new int[n];
for(int i=0; i < n; i++){ int mark; cout << “Input Grade for Student” << (i+1) << “ ? :”; cin >> mark; grades[i] = mark; }
. . . printMean( grades, n ); // call a function with dynamic array . . . }
– Declaration: <class name>* namePtr;– Access:
namePtr->memberData;
namePtr->memberFunction();
or
(*namePtr).memberData;
(*namePtr).memberFunction()
Object pointer