Bài giảng Kỹ thuật lập trình do GV. Hà Đại Dương biên soạn trình bày về dữ liệu có cấu trúc, cụ thể: kiểu có cấu trúc (structure), danh sách liên kết (linked list), hàng đợi (Queue) và ngăn xếp (Stack). Mời các bạn cùng tham khảo.
Trang 1Tuần 11 - Dữ liệu có cấu trúc
Giáo viên: Hà Đại Dương
duonghd@mta.edu.vn
Kỹ thuật lập trình
Vấn đề
• Các đối tượng phức tạp như:
– Điểm trên mặt phẳng, Phân số, Ngày (tháng, năm)
– Sinh viên
Thì mô tả (dữ liệu) như thế nào?
• Mô tả mỗi loại đối đó dưới dạng một kiểu dữ
liệu có cấu trúc
• Mỗi thành phần của đối tượng, ví dụ toạ độ x,
toạ độ y của 1 điểm gọi là trường (field)
Nội dung
• Kiểu có cấu trúc (structure)
• Danh sách liên kết (linked list)
• Hàng đợi (Queue)
• Ngăn xếp (Stack)
Trang 2Kiểu có cấu trúc (structure)
Khai báo kiểu cấu trúc
• Cú pháp 1
struct Tên_cấu_trúc
{
Kiểu Tên_trường_1;
Kiểu Tên_trường_2;
……
Kiểu Tên_trường_n;
};
Khai báo kiểu cấu trúc
• Cú pháp 2
typedef struct
{
Kiểu Tên_trường_1;
Trang 3Trong đó
• struct, typedef struct: từ khoá
• Tên_cấu_trúc: Tên cấu trúc cần định nghĩa
• Kiểu: Kiểu dữ liệu đã có
• Tên_trường_k: Tên trường (dữ liêu)
Ví dụ
Khai báo biến kiểu cấu trúc
• Đối với cấu trúc khai báo theo cách 1:
struct Tên_cấu_trúcTên_biến, ;
• Đối với các cấu khai báo theo cách 2:
Tên_cấu_trúc Tên_biến, ;
• Ví dụ:
struct DiemPhang A, B, C;
struct PhanSo P, Q;
NgayThang NS;
Trang 4Truy cập các trường của biến
• Với các biến thường (không phải con trỏ) cú
pháp:
Tên_biến.Tên_trường
• Ví dụ với biến: NS (NgayThang)
NS.ngay
NS.thang
NS.nam
Ví dụ 1
• Viết chương trình cho phép nhập vào toạ độ 3
đỉnh của tam giác ABC, tính khoảng cách A, B
Khai báo biến cấu trúc
Truy cập trường
Trang 5Ví dụ 2
• Viết chương trình cho phép nhập vào 2 phân
số A, B; tính và in kết quả phép cộng 2 phân số
đó
• Viết chương trình (15 phút)
Biến cấu trúc dạng con trỏ
• Như các biến khác, các biến có cấu trúc cũng
có thể khai báo dạng con trỏ
• Đối với cấu trúc khai báo theo cách 1:
struct Tên_cấu_trúc*Tên_biến, ;
• Đối với các cấu khai báo theo cách 2:
Tên_cấu_trúc *Tên_biến, ;
Trang 6Thao tác với biến con trỏ
• Phải cấp phát bộ nhớ trước khi sử dụng
• Truy cập các trường:
Tên_biến->Tên_trường
(->: dấu - và >)
Ví dụ với biến: A (DiemPhang)
A->x
A->y
Ví dụ 3
• Viết chương trình cho phép nhập vào toạ độ 3
đỉnh của tam giác ABC, tính khoảng cách A, B
(ví dụ 1) Khai báo biến dạng con trỏ
Khai báo dạng con trỏ
Cấp phát bộ nhớ
Truy cập trường
Trang 7Danh sách liên kết
Danh sách liên kết
• Như đã biết, để tổ chức một danh sách có 2
cách:
– Dùng mảng
– Dùng con trỏ với việc cấp phát bộ nhớ động
• Tuy nhiên với kiểu cấu trúc cùng khả năng “tự
trỏ” người ta có thể tạo một dạng danh sách
đặc biệt: Danh sách liên kết
Cấu trúc tự trỏ
• Trong tổ chức kiểu cấu trúc C/C++ cho phép
định nghĩa 1 trường con trỏ để trỏ đến chính
đối tượng có cùng kiểu cấu trúc với mình gọi
là Cấu trúc tự trỏ.
Trang 8Cú pháp
• Cú pháp 1
struct Tên_cấu_trúc
{
Kiểu Tên_trường_1;
Kiểu Tên_trường_2;
……
Kiểu Tên_trường_n;
Tên_cấu_trúccon_trỏ_1
Tên_cấu_trúccon_trỏ_n };
Cú pháp
• Cú pháp 2
typedef struct Tên_cấu_trúc
{
Kiểu Tên_trường_1;
Kiểu Tên_trường_2;
……
Kiểu Tên_trường_n;
Tên_cấu_trúccon_trỏ_1;
…
Tên_cấu_trúccon_trỏ_n;
};
Ví dụ 4
• Sử dụng danh sách liên kết lưu các đỉnh kề
nhau của 1 đa giác
• Khai báo cấu trúc tự trỏ
Trang 9Ví dụ 4
Danh sách liên kết
• Liên kết đơn: Tạo thành danh sách
List
NULL
Danh sách liên kết …
• Liên kết đôi: Cây nhị phân, liên kết 2 chiều
Data Right Left
Data Right
Data Right
Tree
Trang 10Danh sách liên kết đơn
• Quản lý danh sách (như là một mảng)
Đầu danh sách: con trỏ List
Cuối: Trỏ đến NULL để báo hiệu kết thúc danh
sách
Ví dụ 5
Danh sách liên kết đơn …
• Thêm một mục
Trang 11Ví dụ 5
Danh sách liên kết đơn …
• Xoá một mục
Trang 12Bài tập
Bài tập
1 Viết chương trình cho phép nhập vào toạ độ
3 đỉnh của tam giác ABC, tính diện tích ABC
2 Dùng danh sách liên kết lưu toạ độ các đỉnh
kề của một đa giác, tính diện tích của đa giác
đó
3 Đọc dữ liệu điểm của sinh viên từ 1 file text
vào 1 danh sách liên kết đơn theo thứ tự
điểm giảm dần
Bài tập về nhà
1 Viết chương trình cho phép nhập vào 1 biểu
thức bất kỳ, tách từng thành phần (toán
hạng, toán tử) của biểu thức đó và lưu vào 1
danh sách liên kết đơn