01/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?
01/25/15 Ngô Duy Nam
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
01/25/15
Ngô Duy Nam
3
Ch
Ch
ương
ương
5
5
:
:
Danh sách móc nối
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
01/25/15
Ngô Duy Nam
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.
01/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.
01/25/15
Ngô Duy Nam
6
II. 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
01/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
01/25/15
Ngô Duy Nam
8
Ví dụ 1:
Type
DS=^nut;
Nut= record
Data: Data Type;
Link: DS;
End;
Var
L:DS;
Data Link
L
01/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
9 11
M
L^.Data ->?
L^.Link ->?
01/25/15
Ngô Duy Nam
10
1.3. Các phép toán
01/25/15 Ngô Duy Nam
11
MÔ HÌNH CÂY NHỊ PHÂN
46
36
26
45
66
56 76
X=37
Cây nhị phân tìm kiếm
<>><
Mô hình
CNF có phải
là CNF tìm
kiếm?
01/25/15 Ngô Duy Nam
12
MÔ HÌNH CÂY NHỊ PHÂN TÌM KIẾM
46
36
26 45
66
56 76
46
36
26 45
66
56 76
37
01/25/15 Ngô Duy Nam
13
MÔ HÌNH CÂY NHỊ PHÂN TÌM KIẾM
46
36
26 45
66
56 76
46
36
26 45
66
56 76
01/25/15 Ngô Duy Nam
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.
463626 45 6656 76
Mảng K:
1 2 3 4 5 6 7
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
l:=
r:=
m:=|(l+r)/2|
01/25/15 Ngô Duy Nam
15
Ý tưởng
- So sánh X với k[m]
- Nếu X=k[m] thì kết thúc
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
+ So sánh
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
463626 45 6656 76
Mảng K:
1 2 3 4 5 6 7
l:=
463626 45 6656 76
Mảng K:
1 2 3 4 5 6 7
l:=
r:=
m:=|(l+r)/2|
m:=|(l+r)/2|
r:=
l:=
r:=
m:=|(l+r)/2|
X<k[m] X>k[m]
01/25/15 Ngô Duy Nam
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
+ So sánh
Bước 2: Tìm vị trí phần tử giữa của mảng.
l:=1;r:=n; ĐK: (l<r)
m:=|(l+r)/2|
6059585756555453525150494847464544434241403938373635343332313029282726252423222120191817161514131211109876543210
01/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).
01/25/15 Ngơ Duy Nam
18
Viế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 q thầy cơ!
Xin chân thành cảm ơn q thầy cơ!
Chúc các em học tập tốt !
Chúc các em học tập tốt !