10/25/2016<br />
<br />
Kỹ thuật lập trình<br />
<br />
Tuần 11 - Dữ liệu có cấu trúc<br />
Giáo viên: Hà Đại Dương<br />
duonghd@mta.edu.vn<br />
<br />
10/25/2016<br />
<br />
1<br />
<br />
Vấn đề<br />
• Các đối tượng phức tạp như:<br />
– Điểm trên mặt phẳng, Phân số, Ngày (tháng, năm)<br />
– Sinh viên<br />
<br />
Thì mô tả (dữ liệu) như thế nào?<br />
• Mô tả mỗi loại đối đó dưới dạng một kiểu dữ<br />
liệu có cấu trúc.<br />
• Mỗi thành phần của đối tượng, ví dụ toạ độ x,<br />
toạ độ y của 1 điểm gọi là trường (field).<br />
10/25/2016<br />
<br />
2<br />
<br />
Nội dung<br />
•<br />
•<br />
•<br />
•<br />
<br />
Kiểu có cấu trúc (structure)<br />
Danh sách liên kết (linked list)<br />
Hàng đợi (Queue)<br />
Ngăn xếp (Stack)<br />
<br />
10/25/2016<br />
<br />
3<br />
<br />
1<br />
<br />
10/25/2016<br />
<br />
Kiểu có cấu trúc (structure)<br />
<br />
10/25/2016<br />
<br />
4<br />
<br />
Khai báo kiểu cấu trúc<br />
• Cú pháp 1<br />
struct Tên_cấu_trúc<br />
{<br />
Kiểu Tên_trường_1;<br />
Kiểu Tên_trường_2;<br />
……..<br />
Kiểu Tên_trường_n;<br />
};<br />
<br />
10/25/2016<br />
<br />
5<br />
<br />
Khai báo kiểu cấu trúc<br />
• Cú pháp 2<br />
typedef struct<br />
{<br />
Kiểu Tên_trường_1;<br />
Kiểu Tên_trường_2;<br />
……..<br />
Kiểu Tên_trường_n;<br />
} Tên_cấu_trúc;<br />
<br />
10/25/2016<br />
<br />
6<br />
<br />
2<br />
<br />
10/25/2016<br />
<br />
Trong đó<br />
•<br />
•<br />
•<br />
•<br />
<br />
struct, typedef struct: từ khoá<br />
Tên_cấu_trúc: Tên cấu trúc cần định nghĩa<br />
Kiểu: Kiểu dữ liệu đã có<br />
Tên_trường_k: Tên trường (dữ liêu)<br />
<br />
10/25/2016<br />
<br />
7<br />
<br />
Ví dụ<br />
<br />
10/25/2016<br />
<br />
8<br />
<br />
Khai báo biến kiểu cấu trúc<br />
• Đối với cấu trúc khai báo theo cách 1:<br />
struct Tên_cấu_trúc Tên_biến,..;<br />
• Đối với các cấu khai báo theo cách 2:<br />
Tên_cấu_trúc Tên_biến, ..;<br />
• Ví dụ:<br />
struct DiemPhang A, B, C;<br />
struct PhanSo<br />
P, Q;<br />
NgayThang<br />
NS;<br />
10/25/2016<br />
<br />
9<br />
<br />
3<br />
<br />
10/25/2016<br />
<br />
Truy cập các trường của biến<br />
• Với các biến thường (không phải con trỏ) cú<br />
pháp:<br />
Tên_biến.Tên_trường<br />
• Ví dụ với biến: NS (NgayThang)<br />
NS.ngay<br />
NS.thang<br />
NS.nam<br />
10/25/2016<br />
<br />
10<br />
<br />
Ví dụ 1<br />
• Viết chương trình cho phép nhập vào toạ độ 3<br />
đỉnh của tam giác ABC, tính khoảng cách A, B.<br />
<br />
10/25/2016<br />
<br />
11<br />
<br />
Khai báo biến cấu trúc<br />
Truy cập trường<br />
<br />
10/25/2016<br />
<br />
12<br />
<br />
4<br />
<br />
10/25/2016<br />
<br />
Ví dụ 2<br />
• Viết chương trình cho phép nhập vào 2 phân<br />
số A, B; tính và in kết quả phép cộng 2 phân số<br />
đó.<br />
• Viết chương trình (15 phút)<br />
<br />
10/25/2016<br />
<br />
13<br />
<br />
10/25/2016<br />
<br />
14<br />
<br />
Biến cấu trúc dạng con trỏ<br />
• Như các biến khác, các biến có cấu trúc cũng<br />
có thể khai báo dạng con trỏ.<br />
• Đối với cấu trúc khai báo theo cách 1:<br />
struct Tên_cấu_trúc *Tên_biến,..;<br />
• Đối với các cấu khai báo theo cách 2:<br />
Tên_cấu_trúc *Tên_biến, ..;<br />
10/25/2016<br />
<br />
15<br />
<br />
5<br />
<br />