<span class='text_page_counter'>(1)</span><div class='page_container' data-page=1>
<b>N</b>
<b>GƠN</b>
<b>NG</b>
<b>Ữ</b>
<b>L</b>
<b>Ậ</b>
<b>P</b>
<b>TRÌNH</b>
<b>Bài 10: </b>
<b>Các Kiểu Dữ Liệu Trừu Tượng: </b>
<b>Danh sách liên kết, </b>
<b>Ngăn xếp, Hàng đợi </b>
<b>Giảng viên: Lê Nguyễn Tuấn Thành </b>
<b>Email: </b>
<b>Bộ Môn Công Nghệ Phần Mềm – Khoa CNTT </b>
</div>
<span class='text_page_counter'>(2)</span><div class='page_container' data-page=2>
N
Ộ
I
DUNG
1.
Các nút (Nodes) và Danh sách liên k
ế
t
1. Tạo, tìm kiếm
2.
Ứ
ng d
ụ
ng danh sách liên k
ế
t
1. Ngăn xếp (Stacks),
2. Hàng đợi (Queue)
3. Lớp bạn
3.
Iterators
1. Con trỏ như iterators
</div>
<span class='text_page_counter'>(3)</span><div class='page_container' data-page=3>
G
I
Ớ
I
THI
Ệ
U
Danh sách liên k
ế
t
Được xây dựng sử dụng con trỏ
Tăng giảm kích thước trong thời gian chạy
Cây cũng s
ử
d
ụ
ng con tr
ỏ
Con tr
ỏ
là x
ươ
ng s
ố
ng c
ủ
a nh
ữ
ng c
ấ
u trúc này
Sử dụng biến động
Th
ư
vi
ệ
n m
ẫ
u chu
ẩ
n (STL)
Có những phiên bản định nghĩa sẵn của một vài cấu
trúc
</div>
<span class='text_page_counter'>(4)</span><div class='page_container' data-page=4>
C
ÁCH
TI
Ế
P
C
Ậ
N
Có 3 cách đ
ể
x
ử
lý nh
ữ
ng c
ấ
u trúc d
ữ
li
ệ
u này
1. Cách tiếp cận C-style: sử dụng hàm và cấu trúc toàn
cục với mọi thứ đều public
2. Sử dụng lớp với các biến thành viên private và các
hàm accessor – mutator
3. Sử dụng lớp bạn
</div>
<span class='text_page_counter'>(5)</span><div class='page_container' data-page=5>
N
ÚT
VÀ
DANH
SÁCH
LIÊN
K
Ế
T
Danh sách liên k
ế
t
Một ví dụ đơn giản của “cấu trúc dữ liệu động”
Bao gồm nhiều nút
M
ỗ
i nút là m
ộ
t bi
ế
n ki
ể
u c
ấ
u trúc ho
ặ
c đ
ố
i t
ượ
ng
c
ủ
a l
ớ
p (có th
ể
t
ạ
o t
ự
đ
ộ
ng v
ớ
i l
ệ
nh new)
Nút cũng bao gồm con trỏ trỏ tới những nút khác
Cung cấp “sự liên kết”
</div>
<span class='text_page_counter'>(6)</span><div class='page_container' data-page=6></div>
<span class='text_page_counter'>(7)</span><div class='page_container' data-page=7>
Đ
Ị
NH
NGHĨA
NÚT
<i>struct ListNode </i>
<i>{ </i>
<i>string item; </i>
<i>int count; </i>
<i>ListNode *link; </i>
<i>}; </i>
<i>typedef ListNode* ListNodePtr; </i>
Chú ý s
ự
tu
ầ
n hoàn (circularity)
</div>
<span class='text_page_counter'>(8)</span><div class='page_container' data-page=8>
C
ON
TR
Ỏ
HEAD
Đ
ố
i t
ượ
ng v
ớ
i nhãn “head” không ph
ả
i là m
ộ
t nút:
<i>ListNodePtr head; </i>
Là một con trỏ đơn giản tới một nút
Chỉ tới nút đầu tiên trong danh sách
Head đ
ượ
c s
ử
d
ụ
ng đ
ể
l
ư
u tr
ữ
v
ị
trí đ
ầ
u tiên trong
danh sách
</div>
<span class='text_page_counter'>(9)</span><div class='page_container' data-page=9>
V
Í
D
Ụ
V
Ề
TRUY
C
Ậ
P
NÚT
<i>(*head).count = 12; </i>
Đặt biến thành viên <i>count</i> của nút trỏ bởi con trỏ head
bằng 12
Toán t
ử
alternate
->
Được gọi là toán tử mũi tên (<i>arrow operator</i>)
Kí hiệu viết tắt là sự kết hợp của hai toán tử * và .
Viết lại câu lệnh trên bằng: <i>head->count=12; </i>
<i>cin>>head->item</i>
:
Gắn chuỗi nhập vào cho biến thành viên <i>item </i>
</div>
<span class='text_page_counter'>(10)</span><div class='page_container' data-page=10>
D
Ấ
U
HI
Ệ
U
K
Ế
T
THÚC
(
END
MARKERS
)
S
ử
d
ụ
ng NULL cho con tr
ỏ
nút
Được xem như “<i>lính canh</i>” (sentinel) cho các nút
Chỉ định rằng khơng cịn liên kết sau nút này
Cung c
ấ
p d
ấ
u hi
ệ
u k
ế
t thúc t
ươ
ng t
ự
nh
ư
cách
chúng ta s
ử
d
ụ
ng m
ả
ng đ
ượ
c l
ấ
p đ
ầ
y m
ộ
t ph
ầ
n
</div>
<!--links-->