Tải bản đầy đủ (.ppt) (26 trang)

Tin học cơ sở 3 pot

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (230.71 KB, 26 trang )

Tin h c c s 3ọ ơ ở
Structure
Outline

Structured Data types

Structures as function arguments

Self-referential types: linked list
Lê Nguyên Khôi 2
Structure

2
nd
aggregate data type: struct

Recall: aggregate meaning "grouping"

Recall array: collection of values of same type

Structure: collection of values of different types

Treated as a single item, like arrays

Major difference: Must first "define"
struct

Prior to declaring any variables
Lê Nguyên Khôi 3
Structure


Many structured collections of data are:

Heterogeneous (components are different types)

Fixed-size (well-defined set of components)

For example:
Student Record
Name Nguyen Van A
Student Id 1234567
Course INT1005
Date of Birth 01/01/1993
Gender Male
Lê Nguyên Khôi 4
Structured Data Types

A structure is a collection of
variables, perhaps of different
types, grouped together under a
single name.

Structures:

Help to organize complicated data into manageable
entities.

Expose the connection between data within an entity

Are defined using the struct keyword.


Sometimes referred as records.
Lê Nguyên Khôi 5
Structured Data Types

Define struct globally (typically)

No memory is allocated

Just a “placeholder” for what struct will “look like”

To define struct, we must give:

Name of struct

Name of each field

Type of each field (could be another
record/struct)
Lê Nguyên Khôi 6
Defining Struct

Defining a new data type using struct
struct date  name of new "type"
{
int day;  member names
int month;
int year;
};  “;” after “}”
struct date yesterday;


Once defined, this new data type could be
used as other data types:

Variable of this type could be assigned to another variable of the same
type

Variable of this type could be passed as a parameter to a function
Lê Nguyên Khôi 7
Declare Structure Variable

With structure type defined, now declare
variables of this new type:
struct date today;

Just like declaring simple types

Variable today now of type struct date

It contains "member values"

Each of the struct "parts"
Lê Nguyên Khôi 8
Accessing Structure Members

Dot Operator to access members

today.day

today.month


today.year

Called "member variables"

The "parts" of the structure variable

Different structs can have same name member
variables

No conflicts
Lê Nguyên Khôi 9
Defining New Type Struct

Could use typedef to define a new type
struct
typedef struct date Date;

And then we could use Date as other
basic type without the need of
including struct
Date today;

Compare to previous declaration of
yesterday
struct date yesterday;
Lê Nguyên Khôi 10
Structure Example
void printData(Date today)
{
printf("The day is: %i", today.day);

printf("The month is: %i", today.month);
printf("The year is: %i", today.year);
}
void getData(Date *today);
Lê Nguyên Khôi 11
Structure Initialization

Can initialize at declaration

Example:
struct date {
int day;
int month;
int year;
};
typedef struct date Date;
Date dueDate = {31, 12, 2013};

Declaration provides initial data to all three member
variables
Lê Nguyên Khôi 12
Structure Assignments

Given structure named Fruit

Declare two structure variables:
Fruit apples, oranges;

Both are variables of type "Fruit"


Simple assignments are legal:
apples = oranges;

Simply copies each member variable from apples
into member variables from oranges
Lê Nguyên Khôi 13
Structure Other Operations

Operations which are NOT defined for struct
type:

compare for equality/inequality
(i.e. apples == oranges is not a legal expression)

compare based on ordering (<, >, )
(i.e. apples < oranges is not a legal expression)

arithmetic operations
(i.e. apples + oranges is not a legal expression)

reading from or writing to text files
(i.e. no printf(apples) no scanf(&oranges))

If you need such operations, write your own
functions.
Lê Nguyên Khôi 14
Structure and Pointer

As for other types:


(struct x)* is a pointer to struct x

& gives the address of a structure

There are precedence problems because .
binds more tightly than *

If p is a pointer to a struct and a is a
field of the struct:

*p.a means *(p.a) which is ILLEGAL.

You must use (*p).a

For convenience , the operator -> combines indirection and
component selection.

p->a is equivalent to (*p).a
Lê Nguyên Khôi 15
Structure and Pointer
struct point {
int x, y;
};
struct point a;
struct point *ap;
ap = &a;
*ap.x = 0; /* wrong */
/* equivalent to *(ap.x) = 0;*/
(*ap).y = 0; /* right */
ap->x = 0; /* right */

Lê Nguyên Khôi 16
Structure and Pointer
void getData(Date *today)
{
printf("Enter day: ");
scanf("%i", &((*today).day));
printf("Enter month: ");
scanf("%i", &(today->month));
printf("Enter year: ");
scanf("%i", &today->year);
}
Lê Nguyên Khôi
Structure as Function Argument

Passed like any simple data type

Pass-by-value

Pass-by-reference

Or combination

Can also be returned by function

Return-type is structure type

Return statement in function definition
sends structure variable back to caller
Lê Nguyên Khôi 18
Other Type Definition


We can use the keyword typedef to
make our own definitions:
typedef float Floating;

This means variables can be declared
as Floating but they will actually be
of type float.

If we later decide we need more
precision, we can change to:
typedef double Floating;
without changing the codes.
Lê Nguyên Khôi 19
Combining struct and typedef
struct employee {
char name[30];
int id;
char position[20];
float salary;
};
typedef struct employee Employee;
Employee john;

Note: we use the convention that the name of the
defined type is the same as the struct modifier,
but with the first letter capitalized.
Lê Nguyên Khôi 20
Self-referential types


A very powerful programming technique
is to create struct with fields which
contain a reference to an object in
the same struct. For example:
struct list_node {
int data;
struct list_node *next;
};

This approach can be used to create
some very useful data structures.
Lê Nguyên Khôi 21
Linked Lists

Consider the following data
structure:

A list that grow over time

Items are added one by one

Each item is a number

It might grow like this:
Lê Nguyên Khôi 22
Linked Lists

How do you implement such a list in C++?

You can use an array but you must check the

array doesn't overflow and allocate memory
for a new larger array if the array fills.

Can be implemented using a self-referential
type.

Each element in the linked list need:

some information (the data)

a connection to the next item

The individual elements in data structures
like this are often called nodes.
Lê Nguyên Khôi 23
Linked Lists

A node could be represented by this
struct list_node {
int data;
struct list_node *next;
};

How can we represent the whole list?

We need a pointer to the first node:
struct list_node *list_start;

How can we represent the ``end of list''?
The next field of the struct will be NULL.

Lê Nguyên Khôi 24
Linked Lists
Lê Nguyên Khôi 25

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×