Chương 3 Cấu trúc dữ liệu và giải thuật | Công nghệ phần mềm | Học viện Nông nghiệp Việt Nam

Bài giảng này tập trung vào cấu trúc dữ liệu và giải thuật, đặc biệt là về danh sách liên kết đơn, danh sách liên kết vòng và danh sách liên kết kép. Nội dung bao gồm giới thiệu, quy tắc tổ chức, phép toán và ưu nhược điểm của từng loại danh sách liên kết.

1. Gii thiu v danh sách liên kết
Danh sách liên kết danh sách tuyến tính
khi s dng cấu trúc lưu tr phân tán.
Trong danh sách liên kết, nếu gia các nút
nh có 1 liên kết thì ta có DSLK đơn, nếu
gia các nút có 2 liên kết thì ta có DSLK
p.
Ngô Công Thng
Bài ging Cu trúc d liu gii thut - Chương 03
3.2
1
2
CHƯƠNG 3
DANH SÁCH LIÊN KT
Gii thiu v danh sách liên kết
Danh sách liên kết đơn
Danh sách liên kết vòng
Danh sách liên kết p
Cài đặt ngăn xếp hàng đợi bng cu
trúc lưu tr phân tán
Ngô Công Thng
Bài ging Cu trúc d liu gii thut - Chương 03
3.1
2.1. Quy tc t chc danh sách
liên kết đơn (tiếp)
Nút cui cùng trong danh sách không có
nút đứng sau nên trường link là rng,
không chứa địa ch, ta ký hiu là Ø.
Dùng con tr F cha địa ch nút đầu tiên
để cho phép truy nhp vào tt c nút trong
danh sách.
Khi danh sách rng thì F = Ø
A1
A2
A3
A4 Ø
Ngô Công Thng
Bài ging Cu trúc d liu gii thut - Chương 03
3.4
3
4
2. Danh sách liên kết đơn
Quy tc t chc danh sách liên kết đơn
Trong DSLK đơn, mi nút nh cu trúc
gồm hai trường, trưng infor cha phn
t d liệu và trường link chứa đa ch ca
nút đng sau.
infor
link
Ngô Công Thng
Bài ging Cu trúc d liu gii thut - Chương 03
3.3
2.2. Mt s phép toán tn
danh sách liên kết đơn
Ký hiu: Một nút có đa ch là pược tr
bi p) tInfor(p) Link(p) tương ng ch
trường Infor và Link ca nút đó.
a) B sung mt nút mi vào danh sách
Cho danh sách liên kết đơn F, M con tr
tr ti mt nút trong danh sách. Viết th
tc b sung phn t d liu x vào sau
t
M.
Ngô Công Thng
Bài ging Cu trúc d liu gii thut - Chương 03
3.6
5
6
2.1. Quy tc t chc danh sách
liên kết đơn (tiếp)
Để t chc lưu tr mt danh sách liên kết thì phi
:
Phi phương tin chia b nh ra thành các nút
mi nút có th truy nhp o từng trường.
Phi chế để xác định mt nút đang đưc s
dng hoặc chưa được s dng (nút trng).
Phải có chế cung cp các nút trng khi có yêu cu
s dng thu hi li các nút khi không cn dùng na.
Ta hiu:
P AVAIL phép ly ra mt nút trng địa ch P
(cp phát mt nút)
P AVAIL phép thu hi mt nút đa ch P
Ngô Công Thng
Bài ging Cu trúc d liu gii thut - Chương 03
3.5
Quy tc thay đi liên kết trong cu trúc
lưu tr phân tán
Luôn phi xét trường hp cu trúc rng
Xem trường hợp o làm thay đi biến
ca cu trúc thì phi xét x riêng, còn
li thì x lý chung.
Ghi nh: Khi làm v cấu trúc lưu tr phân
tán thì luôn phi vnh, thc hin thao tác
trên hình, đánh s th hin th t thc hin
rồi sau đó chuyển thành các lnh gi mã.
Ngô Công Thng
Bài ging Cu trúc d liu gii thut - Chương 03
3.8
7
8
PP chung b sung vào cu trúc lưu tr
phân tán bt k cu trúc d liu
B1: To nút nh mi, đưa phn t d liu
vào nút nh và cho các trưng đa ch
bng rng.
B2: Ni nút nh mi vào trong cu trúc
sao cho vn đảm bo liên kết ca cu trúc
=> Thay đi liên kết theo quy tc thay đi
liên kết.
Ngô Công Thng
Bài ging Cu trúc d liu gii thut - Chương 03
3.7
2.2. Mt s phép toán tn
danh sách liên kết đơn (tiếp)
B sung mt nút mi vào danh sách:
Vào: F, M, x
Ra: Không có
{Th tc y b sung phn t d liu x vào
sau
nút tr bi M trong danh sách liên kết
đơn F}
Procedure SLPostInsert(Var F; M, x)
1. {To nút mi}
N AVAIL;
infor(N):=x; link(N):= Ø;
Ngô Công Thng
Bài ging Cu trúc d liu gii thut - Chương 03
9
10
B sung vào saut M trong
DSLKD F
F
x
x
x
x
Ø
(2)
M
(1)
x
(1) link(N) := link(M);
(2) link(M) := N;
N
Ngô Công Thng
Bài ging Cu trúc d liu gii thut - Chương 03
3.9
B sung vào trước nút M trong
DSLKD
F
x
x
x
x
Ø
(2)
(1)
(1)
(2)
(3)
M
P
M
x x
N
(1) Link(N) := M;
(2) F := N;
N
(1) P:=F;
While link(P) # M do P:=link(P);
(2) link (P) := N;
(3) Link(N) := M;
Ngô Công Thng
Bài ging Cu trúc d liu gii thut - Chương 03
11
12
2.2. Mt s phép toán tn
danh sách liên kết đơn (tiếp)
2. {Ni nút mi vào sau nút M}
If F=Ø then F := N
Else begin
link(N) := link(M);
link(M) := N;
end;
Return
Ngô Công Thng
Bài ging Cu trúc d liu gii thut - Chương 03
Quy tc thay đi liên kết trong cu trúc
lưu tr phân tán
Luôn phi xét trường hp cu trúc rng
Xem trường hợp o làm thay đi biến
ca cu trúc thì phi xét x riêng, còn
li thì x lý chung.
Ghi nh: Khi làm v cấu trúc lưu tr phân
tán thì luôn phi vnh, thc hin thao tác
trên hình, đánh s th hin th t thc hin
rồi sau đó chuyển thành các lnh gi mã.
Ngô Công Thng
Bài ging Cu trúc d liu gii thut - Chương 03
13
14
PP chung loi b phn t khi cu trúc lưu
tr phân tán bt k cu trúc d liu là
B1: Ngt liên kết vi nút cn loi b sao
cho vn đm bo liên kết ca cu trúc =>
Thay đi liên kết theo các quy tc thay đổi
liên kết.
B2: Hy nút cha phn t cn loi b
Ngô Công Thng
Bài ging Cu trúc d liu gii thut - Chương 03
2.2. Mt s phép toán tn
danh sách liên kết đơn (tiếp
)
b) Loi b mt nút khi danh sách
- Vào: F, M
- Ra: Không
{Th tc này loi b nút tr bi M khi danh sách
liên kết đơn F}
Procedure SLDelete(Var F; M)
1. { Trưng hp danh sách rng}
If F=Ø then begin
Write(‘danh sách rỗng’)
Return
end
Ngô Công Thng
Bài ging Cu trúc d liu gii thut - Chương 03
15
16
Loi b nút M khi DSLKD F
(1)
P (1)
(2)
F
x
x
x
x
Ø
M
M
(1) F := link(F);
(1) P:=F;
While link(P) # M do P := link(P);
(2) link(P) := link(M);
Ngô Công Thng
Bài ging Cu trúc d liu gii thut - Chương 03
2.2. Mt s phép toán tn
danh sách liên kết đơn (
tiếp)
3. {Hy nút M}
AVAIL;
Return
Ngô Công Thng
Bài ging Cu trúc d liu gii thut - Chương 03
17
18
2.2. Mt s phép toán trên
danh sách liên kết đơn (
tiếp)
2. {Ngt kết ni vi t M}
{M nút đu tiên ca danh sách}
If M=F then F:=link(F) Else
begin
{Tìm đến nút đng trước nút M }
P:=F;
While link(P) # M do P:=link(P);
{Ni nút trước M vi nút sau M}
link(P):=link(M);
end;
Ngô Công Thng
Bài ging Cu trúc d liu gii thut - Chương 03
2.2. Mt s phép toán tn
danh sách liên kết đơn (tiếp
)
d) Ghép hai danh sách liên kết đơn
Cho 2 danh sách liên kết đơn P Q, viết th
tc ni Q vào sau P, P tr ti DSLKD sau khi
ni.
Procedure SLConcat(Var P; Q)
1. {Danh sách tr bi q rng}
If Q = Ø then Return
2. {Trường hp danh sách tr bi p rng}
If P = Ø then begin
P:=Q
return
end
Ngô Công Thng
Bài ging Cu trúc d liu gii thut - Chương 03
19
20
2.2. Mt s phép toán trên
danh sách liên kết đơn (tiếp)
c) Duyt danh sách
- Vào: F
- Ra: Không
{Th tc này duyt danh sách liên kết đơn F
đưa ra phần t d liu trong các nút ca ds}
Procedure SLDisplay(F)
1) P := F;
2) While P # Ø do
begin
Write(infor(P)); P := link(P);
end;
Return
Ngô Công Thng Bài ging Cu trúc d liu gii thut - Chương 03 3.19
Ưu nhược đim ca danh sách liên kết đơn
Vi danh sách tuyến tính đng, trong q
trình x lý luôn có b sung, loi b thì t
chc danh sách liên kết là hp lý, tn
dụng được các vùng nh nm ri rác
trong b nh.
Ch phn t đu tiên truy nhp ngay
đưc, các phn t kc phi truy nhp
qua phn t đứng trước nó.
Tn b nh do phi lưu c 2 trường infor
và link mi nút.
Ngô Công Thng
Bài ging Cu trúc d liu gii thut - Chương 03
21
22
2.2. Mt s phép toán trên
danh sách liên kết đơn (
tiếp)
d) Ghép hai danh sách liên kết đơn
3. {Tìm đến nút cui danh sách P}
P1:= P
While link(P1) # Ø do P1:=link(P1);
4. {Ni Q vào sau nút cui ca P}
Link(P1):=Q;
Return
Ngô Công Thng
Bài ging Cu trúc d liu gii thut - Chương 03
Danh sách liên kết vòng (tiếp)
Ưu nhược đim ca danh sách ni vòng:
Danhch ni vòng làm cho vic truy nhp
vào các nút trong danh ch linh hot hơn. Ta
th truy nhpo danh sách bt đu t
mt nút nào cũng được, không nht thiết phi
t t đầu tiên. Nút nào cũng có thể là nút
đầu tiên và con tr F tr vào nút nào cũng
đưc.
Nhược đim ca danh sách ni vòng là trong
x lý nếu không cn thn s dn ti mt chu
trình không kết tc.
Ngô Công Thng
Bài ging Cu trúc d liu gii thut - Chương 03
23
24
3. Danh sách liên kết vòng
Danh sách liên kết vòng (Circularly Linked
List) là mt dng ci tiến ca danh sách
liên kết đơn.
Trong danh sách liên kết vòng, trường địa
ch ca nút cui cùng không phi rng
mà li chứa địa ch của nút đầu tiên ca
danh sách.
A1
Ngô Công Thng
A2
A3
A5
Bài ging Cu trúc d liu gii thut - Chương 03
Danh sách liên kết vòng (tiếp)
Vic dùng thêm nút đầu danh sách đã làm cho
danh sách luôn ít nht 1 nút nên không bao
gi rng. Danhch có 1 nút HEAD
LINK(Head)= Head.
Head
Các phép toán b sung và loi b nút trong
danh sách liên kết vòng tương t danh sách liên
kết đơn .
Ngô Công Thng
Bài ging Cu trúc d liu gii thut - Chương 03
25
26
Danh sách liên kết vòng (tiếp)
Để khc phục nhược đim ca danh sách
ni vòng ta đưa thêm vào mt nút đặc bit
gọi là “nút đầu danh sách” (list head
node). Trường Infor ca nút này không
cha d liu, con tr HEAD tr ti nút đầu
danh sách y cho phép ta truy nhp vào
danh sách.
Head
A1 A2 A3
Ngô Công Thng
Bài ging Cu trúc d liu gii thut - Chương 03
4. Danh sách liên kết p
4.1. Gii thiu
Trong danh sách liên kết kép, mi nút nh có
cu trúc gồm 3 trường như sau:
left
infor
right
infor: Cha phn t d liu.
left: Con tr tr ti nút đng trước
right: Con tr tr ti nút đứng sau
Ngô Công Thng
Bài ging Cu trúc d liu gii thut - Chương 03
27
28
Bài tp (ctdlgt-dslkd.cpp)
Cài đt cu trúc d liu danh sách liên kết
đơn (DSLKD) phn t s ngun vi
bn phép toán:
1) B sung phn t x vào sau nút M
2) Loi b nút M
3) Duyt DSLKD
4) Ghép hai danh sách
Ngô Công Thng
Bài ging Cu trúc d liu gii thut - Chương 03
4.2. Các phép toán trên danh sách
liên kết kép
a) B sung phn t d liu vào danh sách
Cho danh sách liên kết kép (L, R). M là con tr
tr ti mt nút trong danh sách. B sung phn t
d liu x vào trước nút M.
Ngô Công Thng
Bài ging Cu trúc d liu gii thut - Chương 03
29
30
4.1. Gii thiu (tiếp)
left ca nút cc trái right ca nút cc
phi có giá tr Ø.
Dùng con tr L tr o nút cc trái, con tr
R tr vào nút cc phải đ truy nhp vào
danh sách c 2 chiu.
Khi danh sách rng thì L = R = Ø.
L
R
A B C
Ngô Công Thng
Bài ging Cu trúc d liu gii thut - Chương 03
4.2. Các phép toán trên danh sách
liên kết kép
- Vào: (L,R),M,x
- Ra: Không
{Th tc này b sung phn t x vào trưc nút M trong
DSLK kép (L, R)}
Procedure DLPreInsert(Var L,R; M, x)
1. {To nút mi}
N AVAIL
infor(N) := x
left(N):=right(N):= Ø
Ngô Công Thng
Bài ging Cu trúc d liu gii thut - Chương 03
31
32
B sung x vào trước nút M trong DSLKK
left(M)
Ø
(2)
x
x
x
x
Ø
(1)
(1)
(2)
(4)
(3)
M
x
L
M
R
(3) x
N
N
(1) right(N) := M ;
(2) left(M) := N ;
(3) L := N;
(1) right(left(M)) := N
(2) left(N) := left(M)
(3) right(N) := M
(4) left(M) := N
Ngô Công Thng
Bài ging Cu trúc d liu gii thut - Chương 03
a) Chèn thêm mt núto danh sách
4. {Trường hp còn li}
right(left(M)) := N
left(N) := left(M)
right(N) := M
left(M) := N
Return
Ngô Công Thng
Bài ging Cu trúc d liu gii thut - Chương 03
33
34
a) Chèn thêm mt nút vào danhch
2. {Trường hp danh sách rng}
If L=R=Ø then begin
L := R := N ;
Return;
end
3. {M tr ti nút cc trái}
If M=L then begin
right(N) := M;
left(M) := N;
L := N;
Return;
end
Ngô Công Thng
Bài ging Cu trúc d liu gii thut - Chương 03
Ø
Loi b nút M trong DSLKK
(2)
Ø
(2)
left(M)
right(M)
Ø
x
x
(1)
x
x
x
(2)
Ø
(1)
M
L
M
(1)
Ø
R M
(1) L := right(L)
(2) left(L) := Ø;
(1) right(left(M)) := right(M)
(2) left(right(M)) := left(M)
(1) R := left(R)
(2) right(R) := Ø;
Ø
x
M
Ø
(1) L := R := Ø
R
L
Ngô Công Thng
Bài ging Cu trúc d liu gii thut - Chương 03
35
36
b) Loi b mt nút ra khi danh
sách liên kếtp
Cho danh sách liên kết kép L, R. M con tr tr ti mt
t trong danh sách. Loi b nút M.
Ngô Công Thng
Bài ging Cu trúc d liu gii thut - Chương 03
b) Loi b mt nút ra khi danh
sách liên kếtp
2. {Ngt kết ni vi nút M}
Case
M = L= R: Begin {Danh sach ch còn 1 nút M}
L:=R:= Ø;
end
M=L: Begin { Nút cc trái b loi }
L := right(L)
left(L) := Ø
end
Ngô Công Thng
Bài ging Cu trúc d liu gii thut - Chương 03
37
38
b) Loi b mt t ra khi danh
sách liên kết kép
Cho danh sách liên kết kép L, R. M con tr tr ti mt
t trong danh sách cn loi b.
- Vào: (L,R), M
- Ra: Không
{Th tc này loi b nút tr bi M trong DSLK kép L, R}
Procedure DLDelete(Var L, R; M)
1. { Trường hp danh sách rng }
If L=R=Ø then begin
Write(‘ danh sach rong ‘)
Return
end
Ngô Công Thng Bài ging Cu trúc d liu gii thut - Chương 03 3.37
c) Duyt danh sách liên kết kép
đưa ra các phn t ca danh sách
- Vào: L, R
- Ra: Không
{Th tc này duyt danh sách t trái sang phi}
Procedure DLDisplay(L, R);
1) P:= L;
2) While P # Ø do
begin
Write(infor(P));
P := right(P);
end;
Return
Ngô Công Thng
Bài ging Cu trúc d liu gii thut - Chương 03
39
40
b) Loi b mt t ra khi danh
sách liên kết kép
M=R: Begin { Nút cc phi b loi }
R := left(R)
right(R) := Ø
end
ELSE: begin
right(left(M)):=right(M)
left(right(M)):=left(M)
end;
End Case
3.{Hy nút M}
Return
Ngô Công Thng Bài ging Cu trúc d liu gii thut - Chương 03 3.39
Cu trúc lưu tr phân tán ca ngăn xếp
infor
link
x
T
x
Khi ngăn xếp rng, T=Ø
x
Ø
Ngô Công Thng
Bài ging Cu trúc d liu gii thut - Chương 03
41
42
5. S dng cu trúc lưu tr
phân tán cho ngăn xếp và hàng đi
S dng cu trúc lưu tr phân tán cho
ngăn xếp
Các phn t d liu ca ngăn xếp được
lưu tr trong các nút nh nm ri rác khp
nơi trong b nh, mi nút nh có cu trúc
gồm 2 trường
Nút i cùng (nút đáy)link bng Ø
Ngô Công Thng
Bài ging Cu trúc d liu gii thut - Chương 03
5. S dng cu trúc lưu tr
phân tán cho ngăn xếp và hàng đi
- Vào: T
- Ra: Phn t d liu loi b
{Hàm này loi b phn t đnh ngăn xếp T s dng cu trúc
lưu trữ phân tán và tr v phn t này}
Ngô Công Thng
Bài ging Cu trúc d liu gii thut - Chương 03
43
44
5. S dng cu trúc lưu tr
phân tán cho ngăn xếp và hàng đi
o: T, x
Ra: Không
{Th tc này b sung phn t x vào ngăn xếp T lưu tr phân tán}
Procedure push(Var T; x)
1) {To nút mi}
N <= AVAIL; infor(N) := x; link(N) := Ø;
2) {Ni nút mi vào trên nút T}
link(N) := T;
3) {Cho T tr ti nút mi}
T := N;
Return
Ngô Công Thng
Bài ging Cu trúc d liu gii thut - Chương 03
5. S dng cu trúc lưu tr
phân tán cho ngăn xếp và hàng đi
- Vào: T
- Ra: TRUE nếu ngăn xếp rng, FALSE nếu không rng
{Hàm kim tra ngăn xếp T lưu tr phân tán, tr v TRUE
nếu n.xếp rng và FALSE nếu chưa rng}
Function isEmpty(T)
If T = Ø then isEmpty:=TRUE;
Else isEmpty:=FALSE;
Return
Ngô Công Thng
Bài ging Cu trúc d liu gii thut - Chương 03
45
46
5. S dng cấu trúc lưu tr
phân tán cho ngăn xếp hàng đợi
Function pop(Var T)
1) {Kim tra ngăn xếp rng}
If T = Ø then begin
write(‘Ngan xep da rong’); return; end;
2) {Gi li phn t đỉnh}
tg := infor(T); P:=T;
3) {Cho T tr xung nút bên i}
T := link(T);
4) {Hy nút đỉnh tr v phn t đnh}
P => AVAIL; pop := tg;
Return
Ngô Công Thng Bài ging Cu trúc d liu gii thut - Chương 03 3.45
5.2. S dng cu trúc lưu tr
phân tán cho hàng đợi
Trong cấu trúc lưu trữ phân tán, các phn
t d liu ca hàng đợi đưc u tr trong
các nút nh, mi nút nh có cu trúc gm
2 trường, trường infor cha phn t d
liu, trường link cha địa ch ca nút đng
sau.
infor link
Ngô Công Thng
Bài ging Cu trúc d liu gii thut - Chương 03
47
48
5. S dng cu trúc lưu tr
phân tán cho ngăn xếp và hàng đi
- Vào: T
- Ra: Phn t d liệu đỉnh ngăn xếp
{Hàm này tr v phn t đỉnh ngăn xếp T u tr phân tán}
Function top(T)
1) {Kim tra ngăn xếp rng}
If T = Ø then begin
write(‘Ngan xep da rong’); return; end;
2) {Tr v phn t đỉnh}
top := infor(T);
Return
Ngô Công Thng
Bài ging Cu trúc d liu gii thut - Chương 03
5.2. S dng cu trúc lưu tr phân tán cho hàng đi
- Vào: (F, R), x
- Ra: Không
{Th tc này b sung phn t x vào li sau ca hàng đợi (F, R)
s dng cu trúc lưu trữ phân tán}
Procedure QInsert(Var F,R; x)
1) {To nút mi}
N <= AVAIL;
infor(N) := x; link(N) := Ø;
2) {Ni nút mi vào sau R}
If F=R=Ø Then F:=N Else link(R) := N;
3) {Cho R tr ti nút mi}
R := N;
Return
Ngô Công Thng
Bài ging Cu trúc d liu gii thut - Chương 03
49
50
Cu trúc lưu tr phân tán ca hàng đợi
x
x
x
Ø
F
R
x
N
Ngô Công Thng
Bài ging Cu trúc d liu gii thut - Chương 03
5.2. S dng cu trúc lưu tr
phân tán cho hàng đợi
{Gi li nút li trước (nút đầu hàng)}
tg := infor(F); P := F;
{Cho F tr ti nút đng sau}
If F=R then F:=R:=Ø
Else F := link(F);
{Hy nút tr v phn t d liu}
P => AVAIL;
QDelete := tg;
Return
Ngô Công Thng
Bài ging Cu trúc d liu gii thut - Chương 03
51
52
5.2. S dng cu trúc lưu tr
phân tán cho hàng đi
- Vào: (F, R)
- Ra: Phn t d liu loi b
{Hàm này loi b phn t li trước ca hàng đi
(F, R) lưu trữ phân tán và tr v phn t loi b}
Function QDelete(Var F, R)
{Kim tra ng đợi rng}
If F=R=Ø then begin
write(‘Hàng đi đã rỗng.’);
return;
end;
Ngô Công Thng
Bài ging Cu trúc d liu gii thut - Chương 03
Bài tp
(ctdlgt-nganxep2.cpp) Cài đặt cu trúc d
liu ngăn xếp lưu tr phân tán phn t
là ký t. ng dng chuyn s nguyên h
10 sang h 16.
Ngô Công Thng
Bài ging Cu trúc d liu gii thut - Chương 03
53
54
5.2. S dng cu trúc lưu tr
phân tán cho hàng đi
- Vào: (F, R)
- Ra: True - rng, False - kng rng
{Hàm này kim tra hàng đợi rng}
Function QIsEmpty(F, R)
If F=R=Ø then QIsEmpty := True
Else QIsEmpty := False;
Return
Ngô Công Thng
Bài ging Cu trúc d liu gii thut - Chương 03
| 1/27

Preview text:

CHƯƠNG 3 DANH SÁCH LIÊN KẾT
Giới thiệu về danh sách liên kết Danh sách liên kết đơn Danh sách liên kết vòng Danh sách liên kết kép
Cài đặt ngăn xếp và hàng đợi bằng cấu trúc lưu trữ phân tán Ngô Công Thắng
Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 03 3.1 1
1. Giới thiệu về danh sách liên kết
Danh sách liên kết là danh sách tuyến tính
khi sử dụng cấu trúc lưu trữ phân tán.
Trong danh sách liên kết, nếu giữa các nút
nhớ có 1 liên kết thì ta có DSLK đơn, nếu
giữa các nút có 2 liên kết thì ta có DSLK kép. Ngô Công Thắng
Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 03 3.2 2
2. Danh sách liên kết đơn
Quy tắc tổ chức danh sách liên kết đơn
Trong DSLK đơn, mỗi nút nhớ có cấu trúc
gồm hai trường, trường infor chứa phần
tử dữ liệu và trường link chứa địa chỉ của nút đứng sau. infor link Ngô Công Thắng
Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 03 3.3 3
2.1. Quy tắc tổ chức danh sách
liên kết đơn (tiếp)
Nút cuối cùng trong danh sách không có
nút đứng sau nên trường link là rỗng,
không chứa địa chỉ, ta ký hiệu là Ø.
Dùng con trỏ F chứa địa chỉ nút đầu tiên
để cho phép truy nhập vào tất cả nút trong danh sách.
Khi danh sách rỗng thì F = Ø F A1 A2 A3 A4 Ø Ngô Công Thắng
Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 03 3.4 4
2.1. Quy tắc tổ chức danh sách
liên kết đơn (tiếp)
Để tổ chức lưu trữ một danh sách liên kết thì phải có:
Phải có phương tiện chia bộ nhớ ra thành các nút và ở
mỗi nút có thể truy nhập vào từng trường.
Phải có cơ chế để xác định một nút đang được sử
dụng hoặc chưa được sử dụng (nút trống).
Phải có cơ chế cung cấp các nút trống khi có yêu cầu
sử dụng và thu hồi lại các nút khi không cần dùng nữa. Ta ký hiệu: P
AVAIL là phép lấy ra một nút trống có địa chỉ là P (cấp phát một nút)
P AVAIL là phép thu hồi một nút có địa chỉ là P Ngô Công Thắng
Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 03 3.5 5
2.2. Một số phép toán trên danh sách liên kết đơn
Ký hiệu: Một nút có địa chỉ là p (được trỏ
bởi p) thì Infor(p) và Link(p) tương ứng chỉ
trường Infor và Link của nút đó.
a) Bổ sung một nút mới vào danh sách
Cho danh sách liên kết đơn F, M là con trỏ
trỏ tới một nút trong danh sách. Viết thủ
tục bổ sung phần tử dữ liệu x vào sau nút M. Ngô Công Thắng
Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 03 3.6 6
PP chung bổ sung vào cấu trúc lưu trữ
phân tán bất kể cấu trúc dữ liệu là gì
B1: Tạo nút nhớ mới, đưa phần tử dữ liệu
vào nút nhớ và cho các trường địa chỉ bằng rỗng.
B2: Nối nút nhớ mới vào trong cấu trúc
sao cho vẫn đảm bảo liên kết của cấu trúc
=> Thay đổi liên kết theo quy tắc thay đổi liên kết. Ngô Công Thắng
Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 03 3.7 7
Quy tắc thay đổi liên kết trong cấu trúc lưu trữ phân tán
Luôn phải xét trường hợp cấu trúc rỗng
Xem trường hợp nào làm thay đổi biến
của cấu trúc thì phải xét xử lý riêng, còn lại thì xử lý chung.
Ghi nhớ: Khi làm về cấu trúc lưu trữ phân
tán thì luôn phải vẽ hình, thực hiện thao tác
trên hình, đánh số thể hiện thứ tự thực hiện
rồi sau đó chuyển thành các lệnh giả mã. Ngô Công Thắng
Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 03 3.8 8
Bổ sung vào sau nút M trong DSLKD F F x x x x Ø (2) (1) M x (1) link(N) := link(M); N (2) link(M) := N; Ngô Công Thắng
Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 03 3.9 9
2.2. Một số phép toán trên
danh sách liên kết đơn (tiếp)
Bổ sung một nút mới vào danh sách: Vào: F, M, x Ra: Không có
{Thủ tục này bổ sung phần tử dữ liệu x vào
sau nút trỏ bởi M trong danh sách liên kết đơn F}
Procedure SLPostInsert(Var F; M, x) 1. {Tạo nút mới} N → AVAIL; infor(N):=x; link(N):= Ø; Ngô Công Thắng
Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 03 3.10 10
2.2. Một số phép toán trên
danh sách liên kết đơn (tiếp)
2. {Nối nút mới vào sau nút M} If F=Ø then F := N Else begin link(N) := link(M); link(M) := N; end; Return Ngô Công Thắng
Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 03 3.11 11
Bổ sung vào trước nút M trong DSLKD F x x x x Ø (1) (2) (1) (2) (3) P M M x x N N (1) Link(N) := M; (1) P:=F; (2) F := N;
While link(P) # M do P:=link(P); (2) link (P) := N; (3) Link(N) := M; Ngô Công Thắng
Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 03 3.12 12
PP chung loại bỏ phần tử khỏi cấu trúc lưu
trữ phân tán bất kể cấu trúc dữ liệu là gì
B1: Ngắt liên kết với nút cần loại bỏ sao
cho vẫn đảm bảo liên kết của cấu trúc =>
Thay đổi liên kết theo các quy tắc thay đổi liên kết.
B2: Hủy nút chứa phần tử cần loại bỏ Ngô Công Thắng
Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 03 3.13 13
Quy tắc thay đổi liên kết trong cấu trúc lưu trữ phân tán
Luôn phải xét trường hợp cấu trúc rỗng
Xem trường hợp nào làm thay đổi biến
của cấu trúc thì phải xét xử lý riêng, còn lại thì xử lý chung.
Ghi nhớ: Khi làm về cấu trúc lưu trữ phân
tán thì luôn phải vẽ hình, thực hiện thao tác
trên hình, đánh số thể hiện thứ tự thực hiện
rồi sau đó chuyển thành các lệnh giả mã. Ngô Công Thắng
Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 03 3.14 14
Loại bỏ nút M khỏi DSLKD F (1) P (1) (2) F x x x x Ø M M (1) F := link(F); (1) P:=F;
While link(P) # M do P := link(P); (2) link(P) := link(M); Ngô Công Thắng
Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 03 3.15 15
2.2. Một số phép toán trên
danh sách liên kết đơn (tiếp)
b) Loại bỏ một nút khỏi danh sách - Vào: F, M - Ra: Không
{Thủ tục này loại bỏ nút trỏ bởi M khỏi danh sách liên kết đơn F} Procedure SLDelete(Var F; M)
1. { Trường hợp danh sách rỗng} If F=Ø then begin
Write(‘danh sách rỗng’) Return end Ngô Công Thắng
Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 03 3.16 16
2.2. Một số phép toán trên
danh sách liên kết đơn (tiếp)
2. {Ngắt kết nối với nút M}
{M là nút đầu tiên của danh sách} If M=F then F:=link(F) Else begin
{Tìm đến nút đứng trước nút M } P:=F;
While link(P) # M do P:=link(P);
{Nối nút trước M với nút sau M} link(P):=link(M); end; Ngô Công Thắng
Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 03 3.17 17
2.2. Một số phép toán trên
danh sách liên kết đơn (tiếp) 3. {Hủy nút M} AVAIL; Return Ngô Công Thắng
Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 03 3.18 18
2.2. Một số phép toán trên
danh sách liên kết đơn (tiếp) c) Duyệt danh sách - Vào: F - Ra: Không
{Thủ tục này duyệt danh sách liên kết đơn F và
đưa ra phần tử dữ liệu trong các nút của ds} Procedure SLDisplay(F) 1) P := F; 2) While P # Ø do begin
Write(infor(P)); P := link(P); end; Return Ngô Công Thắng
Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 03 3.19 19
2.2. Một số phép toán trên
danh sách liên kết đơn (tiếp)
d) Ghép hai danh sách liên kết đơn
Cho 2 danh sách liên kết đơn P và Q, viết thủ
tục nối Q vào sau P, P trỏ tới DSLKD sau khi nối. Procedure SLConcat(Var P; Q)
1. {Danh sách trỏ bởi q rỗng} If Q = Ø then Return
2. {Trường hợp danh sách trỏ bởi p rỗng} If P = Ø then begin P:=Q return end Ngô Công Thắng
Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 03 3.20 20
2.2. Một số phép toán trên
danh sách liên kết đơn (tiếp)
d) Ghép hai danh sách liên kết đơn
3. {Tìm đến nút cuối danh sách P} P1:= P
While link(P1) # Ø do P1:=link(P1);
4. {Nối Q vào sau nút cuối của P} Link(P1):=Q; Return Ngô Công Thắng
Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 03 3.21 21
Ưu nhược điểm của danh sách liên kết đơn
Với danh sách tuyến tính động, trong quá
trình xử lý luôn có bổ sung, loại bỏ thì tổ
chức danh sách liên kết là hợp lý, tận
dụng được các vùng nhớ nằm rải rác trong bộ nhớ.
Chỉ có phần tử đầu tiên là truy nhập ngay
được, các phần tử khác phải truy nhập
qua phần tử đứng trước nó.
Tốn bộ nhớ do phải lưu cả 2 trường infor và link ở mỗi nút. Ngô Công Thắng
Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 03 3.22 22
3. Danh sách liên kết vòng
Danh sách liên kết vòng (Circularly Linked
List) là một dạng cải tiến của danh sách liên kết đơn.
Trong danh sách liên kết vòng, trường địa
chỉ của nút cuối cùng không phải là rỗng
mà lại chứa địa chỉ của nút đầu tiên của danh sách. F A1 A2 A3 A5 Ngô Công Thắng
Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 03 3.23 23
Danh sách liên kết vòng (tiếp)
Ưu nhược điểm của danh sách nối vòng:
Danh sách nối vòng làm cho việc truy nhập
vào các nút trong danh sách linh hoạt hơn. Ta
có thể truy nhập vào danh sách bắt đầu từ
một nút nào cũng được, không nhất thiết phải
từ nút đầu tiên. Nút nào cũng có thể là nút
đầu tiên và con trỏ F trỏ vào nút nào cũng được.
Nhược điểm của danh sách nối vòng là trong
xử lý nếu không cẩn thận sẽ dẫn tới một chu trình không kết thúc. Ngô Công Thắng
Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 03 3.24 24
Danh sách liên kết vòng (tiếp)
Để khắc phục nhược điểm của danh sách
nối vòng ta đưa thêm vào một nút đặc biệt
gọi là “nút đầu danh sách” (list head
node). Trường Infor của nút này không
chứa dữ liệu, con trỏ HEAD trỏ tới nút đầu
danh sách này cho phép ta truy nhập vào danh sách. Head A1 A2 A3 Ngô Công Thắng
Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 03 3.25 25
Danh sách liên kết vòng (tiếp)
Việc dùng thêm nút đầu danh sách đã làm cho
danh sách luôn có ít nhất 1 nút nên không bao
giờ rỗng. Danh sách có 1 nút HEAD có LINK(Head)= Head. Head
Các phép toán bổ sung và loại bỏ nút trong
danh sách liên kết vòng tương tự danh sách liên kết đơn . Ngô Công Thắng
Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 03 3.26 26 Bài tập (ctdlgt-dslkd.cpp)
Cài đặt cấu trúc dữ liệu danh sách liên kết
đơn (DSLKD) có phần tử là số nguyên với bốn phép toán:
1) Bổ sung phần tử x vào sau nút M 2) Loại bỏ nút M 3) Duyệt DSLKD 4) Ghép hai danh sách Ngô Công Thắng
Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 03 3.27 27
4. Danh sách liên kết kép 4.1. Giới thiệu
Trong danh sách liên kết kép, mỗi nút nhớ có
cấu trúc gồm 3 trường như sau: left infor right
infor: Chứa phần tử dữ liệu.
left: Con trỏ trỏ tới nút đứng trước
right: Con trỏ trỏ tới nút đứng sau Ngô Công Thắng
Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 03 3.28 28 4.1. Giới thiệu (tiếp)
left của nút cực trái và right của nút cực phải có giá trị là Ø.
Dùng con trỏ L trỏ vào nút cực trái, con trỏ
R trỏ vào nút cực phải để truy nhập vào danh sách cả 2 chiều.
Khi danh sách rỗng thì L = R = Ø. L R A B C Ngô Công Thắng
Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 03 3.29 29
4.2. Các phép toán trên danh sách liên kết kép
a) Bổ sung phần tử dữ liệu vào danh sách
Cho danh sách liên kết kép (L, R). M là con trỏ
trỏ tới một nút trong danh sách. Bổ sung phần tử
dữ liệu x vào trước nút M. Ngô Công Thắng
Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 03 3.30 30
Bổ sung x vào trước nút M trong DSLKK left(M) Ø x x x x Ø (2) (2) (4) (1) (1) (3) M M R x L (3) x N N (1) right(N) := M ; (1) right(left(M)) := N (2) left(M) := N ; (2) left(N) := left(M) (3) L := N; (3) right(N) := M (4) left(M) := N Ngô Công Thắng
Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 03 3.31 31
4.2. Các phép toán trên danh sách liên kết kép - Vào: (L,R),M,x - Ra: Không có
{Thủ tục này bổ sung phần tử x vào trước nút M trong DSLK kép (L, R)}
Procedure DLPreInsert(Var L,R; M, x) 1. {Tạo nút mới} N → AVAIL infor(N) := x left(N):=right(N):= Ø Ngô Công Thắng
Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 03 3.32 32
a) Chèn thêm một nút vào danh sách
2. {Trường hợp danh sách rỗng} If L=R=Ø then begin L := R := N ; Return; end
3. {M trỏ tới nút cực trái} If M=L then begin right(N) := M; left(M) := N; L := N; Return; end Ngô Công Thắng
Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 03 3.33 33
a) Chèn thêm một nút vào danh sách
4. {Trường hợp còn lại} right(left(M)) := N left(N) := left(M) right(N) := M left(M) := N Return Ngô Công Thắng
Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 03 3.34 34
b) Loại bỏ một nút ra khỏi danh sách liên kết kép
Cho danh sách liên kết kép L, R. M là con trỏ trỏ tới một
nút trong danh sách. Loại bỏ nút M. Ngô Công Thắng
Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 03 3.35 35
Loại bỏ nút M trong DSLKK (2) Ø left(M) right(M) (2) (1) Ø x x x x x (2) Ø Ø Ø (1) M M L (1) R M (1) L := right(L)
(1) right(left(M)) := right(M) (1) R := left(R) (2) left(L) := Ø; (2) left(right(M)) := left(M) (2) right(R) := Ø; Ø x Ø (1) L := R := Ø R L M Ngô Công Thắng
Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 03 3.36 36
b) Loại bỏ một nút ra khỏi danh sách liên kết kép
Cho danh sách liên kết kép L, R. M là con trỏ trỏ tới một
nút trong danh sách cần loại bỏ. - Vào: (L,R), M - Ra: Không có
{Thủ tục này loại bỏ nút trỏ bởi M trong DSLK kép L, R}
Procedure DLDelete(Var L, R; M)
1. { Trường hợp danh sách rỗng } If L=R=Ø then begin Write(‘ danh sach rong ‘) Return end Ngô Công Thắng
Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 03 3.37 37
b) Loại bỏ một nút ra khỏi danh sách liên kết kép
2. {Ngắt kết nối với nút M} Case
M = L= R: Begin {Danh sach chỉ còn 1 nút M} L:=R:= Ø; end
M=L: Begin { Nút cực trái bị loại } L := right(L) left(L) := Ø end Ngô Công Thắng
Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 03 3.38 38
b) Loại bỏ một nút ra khỏi danh sách liên kết kép
M=R: Begin { Nút cực phải bị loại } R := left(R) right(R) := Ø end ELSE: begin right(left(M)):=right(M) left(right(M)):=left(M) end; End Case 3.{Hủy nút M} Return Ngô Công Thắng
Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 03 3.39 39
c) Duyệt danh sách liên kết kép và
đưa ra các phần tử của danh sách - Vào: L, R - Ra: Không có
{Thủ tục này duyệt danh sách từ trái sang phải} Procedure DLDisplay(L, R); 1) P:= L; 2) While P # Ø do begin Write(infor(P)); P := right(P); end; Return Ngô Công Thắng
Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 03 3.40 40
5. Sử dụng cấu trúc lưu trữ
phân tán cho ngăn xếp và hàng đợi
Sử dụng cấu trúc lưu trữ phân tán cho ngăn xếp
Các phần tử dữ liệu của ngăn xếp được
lưu trữ trong các nút nhớ nằm rải rác khắp
nơi trong bộ nhớ, mỗi nút nhớ có cấu trúc gồm 2 trường
Nút dưới cùng (nút đáy) có link bằng Ø Ngô Công Thắng
Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 03 3.41 41
Cấu trúc lưu trữ phân tán của ngăn xếp infor link x T x Khi ngăn xếp rỗng, T=Ø x Ø Ngô Công Thắng
Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 03 3.42 42
5. Sử dụng cấu trúc lưu trữ
phân tán cho ngăn xếp và hàng đợi Vào: T, x Ra: Không có
{Thủ tục này bổ sung phần tử x vào ngăn xếp T lưu trữ phân tán} Procedure push(Var T; x) 1) {Tạo nút mới}
N <= AVAIL; infor(N) := x; link(N) := Ø;
2) {Nối nút mới vào trên nút T} link(N) := T;
3) {Cho T trỏ tới nút mới} T := N; Return Ngô Công Thắng
Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 03 3.43 43
5. Sử dụng cấu trúc lưu trữ
phân tán cho ngăn xếp và hàng đợi - Vào: T
- Ra: Phần tử dữ liệu loại bỏ
{Hàm này loại bỏ phần tử đỉnh ngăn xếp T sử dụng cấu trúc
lưu trữ phân tán và trả về phần tử này} Ngô Công Thắng
Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 03 3.44 44
5. Sử dụng cấu trúc lưu trữ
phân tán cho ngăn xếp và hàng đợi Function pop(Var T)
1) {Kiểm tra ngăn xếp rỗng} If T = Ø then begin
write(‘Ngan xep da rong’); return; end;
2) {Giữ lại phần tử đỉnh} tg := infor(T); P:=T;
3) {Cho T trỏ xuống nút bên dưới} T := link(T);
4) {Hủy nút đỉnh và trả về phần tử đỉnh} P => AVAIL; pop := tg; Return Ngô Công Thắng
Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 03 3.45 45
5. Sử dụng cấu trúc lưu trữ
phân tán cho ngăn xếp và hàng đợi - Vào: T
- Ra: TRUE nếu ngăn xếp rỗng, FALSE nếu không rỗng
{Hàm kiểm tra ngăn xếp T lưu trữ phân tán, trả về TRUE
nếu n.xếp rỗng và FALSE nếu chưa rỗng} Function isEmpty(T) If T = Ø then isEmpty:=TRUE; Else isEmpty:=FALSE; Return Ngô Công Thắng
Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 03 3.46 46
5. Sử dụng cấu trúc lưu trữ
phân tán cho ngăn xếp và hàng đợi - Vào: T
- Ra: Phần tử dữ liệu đỉnh ngăn xếp
{Hàm này trả về phần tử đỉnh ngăn xếp T lưu trữ phân tán} Function top(T)
1) {Kiểm tra ngăn xếp rỗng} If T = Ø then begin
write(‘Ngan xep da rong’); return; end;
2) {Trả về phần tử đỉnh} top := infor(T); Return Ngô Công Thắng
Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 03 3.47 47
5.2. Sử dụng cấu trúc lưu trữ phân tán cho hàng đợi
Trong cấu trúc lưu trữ phân tán, các phần
tử dữ liệu của hàng đợi được lưu trữ trong
các nút nhớ, mỗi nút nhớ có cấu trúc gồm
2 trường, trường infor chứa phần tử dữ
liệu, trường link chứa địa chỉ của nút đứng sau. infor link Ngô Công Thắng
Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 03 3.48 48
Cấu trúc lưu trữ phân tán của hàng đợi x x x Ø F R x N Ngô Công Thắng
Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 03 3.49 49
5.2. Sử dụng cấu trúc lưu trữ phân tán cho hàng đợi - Vào: (F, R), x - Ra: Không có
{Thủ tục này bổ sung phần tử x vào lối sau của hàng đợi (F, R)
sử dụng cấu trúc lưu trữ phân tán} Procedure QInsert(Var F,R; x) 1) {Tạo nút mới} N <= AVAIL; infor(N) := x; link(N) := Ø;
2) {Nối nút mới vào sau R}
If F=R=Ø Then F:=N Else link(R) := N;
3) {Cho R trỏ tới nút mới} R := N; Return Ngô Công Thắng
Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 03 3.50 50
5.2. Sử dụng cấu trúc lưu trữ phân tán cho hàng đợi - Vào: (F, R)
- Ra: Phần tử dữ liệu loại bỏ
{Hàm này loại bỏ phần tử ở lối trước của hàng đợi
(F, R) lưu trữ phân tán và trả về phần tử loại bỏ} Function QDelete(Var F, R)
{Kiểm tra hàng đợi rỗng} If F=R=Ø then begin
write(‘Hàng đợi đã rỗng.’); return; end; Ngô Công Thắng
Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 03 3.51 51
5.2. Sử dụng cấu trúc lưu trữ phân tán cho hàng đợi
{Giữ lại nút lối trước (nút đầu hàng)} tg := infor(F); P := F;
{Cho F trỏ tới nút đứng sau} If F=R then F:=R:=Ø Else F := link(F);
{Hủy nút và trả về phần tử dữ liệu} P => AVAIL; QDelete := tg; Return Ngô Công Thắng
Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 03 3.52 52
5.2. Sử dụng cấu trúc lưu trữ phân tán cho hàng đợi - Vào: (F, R)
- Ra: True - rỗng, False - không rỗng
{Hàm này kiểm tra hàng đợi rỗng} Function QIsEmpty(F, R)
If F=R=Ø then QIsEmpty := True Else QIsEmpty := False; Return Ngô Công Thắng
Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 03 3.53 53 Bài tập
(ctdlgt-nganxep2.cpp) Cài đặt cấu trúc dữ
liệu ngăn xếp lưu trữ phân tán có phần tử
là ký tự. Ứng dụng chuyển số nguyên hệ 10 sang hệ 16. Ngô Công Thắng
Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 03 3.54 54