Mô hình đoàn tàu hỏa- Mỗi toa tàu tương ứng với một ô nhớ trong mảng.. Một số khái niệm - Danh sách là một tập có thứ tự bao gồm một số biến động các phần tử.. - Mỗi toa tàu tương ứng vớ
Trang 101/25/15 Ngô Duy Nam 1
Câu hỏi 1:
Nêu khái niệm cấu trúc dữ liệu dạng mảng
KIỂM TRA BÀI CŨ
Câu hỏi 2:
Mảng có phép bổ sung, loại bỏ phần tử không? Tại sao?
Trang 2
Mô hình đoàn tàu hỏa
- Mỗi toa tàu tương ứng với một ô nhớ trong mảng.
- Số toa tàu là cố định
h.khách h.khách h.khách h.khách h.khách h.khách
Trang 301/25/15 Ngô Duy Nam 3
Chương 5: Danh sách móc nối
I Một số khái niệm
- Danh sách là một tập có thứ tự bao gồm một số biến động các phần tử
- Mỗi toa tàu tương ứng với một ô nhớ trong danh sách.
- Số toa tàu là biến động
h.khách h.khách h.khách h.khách h.khách h.khách
Trang 4- Phần tử đầu tiên trong danh sách được quản lý bởi một con trỏ (thường được kí hiệu bởi
L,P,Q,M, )
- Danh sách rỗng là danh sách không chứa phần
tử nào
Trang 501/25/15 Ngô Duy Nam 5
- Mỗi phần tử trong danh sách thường là một bản ghi gồm một hoặc nhiều trường
Trang 6II Các dạng danh sách móc nối
1 Danh sách móc nối đơn
1.1 Định nghĩa phần tử trong danh sách
- Mỗi phần tử trong danh sách được thể hiện bởi nút có dạng sau:
- Trong đó:
+ Data: Chứa thông tin
+ Link: Chứa địa chỉ của nút tiếp theo nếu có, không có chứa địa chỉ rỗng (ký hiệu Null)
Data Link
Trang 701/25/15 Ngô Duy Nam 7
h.khách h.khách h.khách h.khách h.khách h.khách
Link Data
Trang 8Ví dụ 1:
Type
DS=^nut;
Nut= record
Data: Data Type;
Link: DS;
End;
Var
L:DS;
Data Link L
Trang 901/25/15 Ngô Duy Nam 9
1.2 Truy cập vào từng trường ở mỗi nút trong danh sách
Cú pháp:
<tên con trỏ>^.<tên trường>
Ví dụ: Cho một danh sách sau:
5
L
M
L^.Data ->?
L^.Link ->?
Trang 101.3 Các phép toán
Trang 1101/25/15 Ngô Duy Nam 11
MÔ HÌNH CÂY NHỊ PHÂN
46
36
66
X=37
Cây nhị phân tìm kiếm
<
><
Mô hình CNF có phải
là CNF tìm kiếm?
Trang 12MÔ HÌNH CÂY NHỊ PHÂN TÌM KIẾM
46
36
66
46
36
66
37
Trang 1301/25/15 Ngô Duy Nam 13
MÔ HÌNH CÂY NHỊ PHÂN TÌM KIẾM
46
36
66
46
36
66
Trang 14Ý tưởng
Bước 1: Sắp xếp dãy số đó theo trình tự tăng dần.
Bước 2: Tìm vị trí phần tử giữa của mảng.
Sử dụng các phương pháp sắp xếp như: Chọn, chèn,…
l:=1;r:=n; ĐK: (l<r)
m:=|(l+r)/2|
Cách xác định vị trí pt giữa của mảng k
m:=|(l+r)/2|
Trang 1501/25/15 Ngô Duy Nam 15
Ý tưởng
- So sánh X với k[m]
Nếu X<k[m] hoặc X>k[m] thì quay lại từ Bước 2
+ Tìm pt giữa của dãy
Bước 3: Với giá trị phần tử giữa của mảng đem so sánh với X Nếu bằng thì kết thúc, còn sang bước 4
Bước 4: Lặp lại Bước 2 và Bước 3 cho đến khi tìm được X hoặc không tìm được X
46
36
Mảng K:
l:=
46
36
Mảng K:
m:=|(l+r)/2|
m:=|(l+r)/2|
m:=|(l+r)/2|
X<k[m] X>k[m]
Trang 16Ý tưởng
Bước 3: Với giá trị phần tử giữa của mảng đem so sánh với X Nếu bằng thì kết thúc, còn sang bước 4
- So sánh X với k[m]
- Nếu X=k[m] thì kết thúc
Bước 4: Lặp lại Bước 2 và Bước 3 cho đến khi tìm được X hoặc không tìm được X
Nếu X>k[m] hoặc X<k[m] thì quay lại từ Bước 2
+ Tìm pt giữa của dãy
Bước 2: Tìm vị trí phần tử giữa của mảng.
l:=1;r:=n; ĐK: (l<r)
Trang 1701/25/15 Ngô Duy Nam 17
Ví dụ vận dụng
Cho mảng k gồm 5 pt: 7 8 13 17 34
Cho X = 34
Sử dụng thuật toán tìm kiếm nhị phân, kiểm
tra X có tồn tại trong mảng k hay không ? (yêu cầu chạy chậm từng bước theo thuật toán)
Trang 18Viết chương trình bài tập 3
BÀI THỰC HÀNH 4: SỬ DỤNG CÂU LỆNH ĐIỀU KIỆN IF …THEN
a Lưu chương trình với tên
Bacanhtamgiac.pas
b Chạy chương trình
Xin chân thành cảm ơn quí thầy cơ!
Chúc các em học tập tốt !