CHƯƠNG 2
MNG DANH CH
Ngô Công Thng
B môn Công ngh phn mm
Khoa Công ngh thông tin
Website: dse.vnua.edu.vn/ncthang
Email: ncthang@vnua.edu.vn
1. Mng
lMng làmttphpcóthtgmmtsc
địnhcphntcùngkiu.
lMtphntmng đượcchrabichs, th
hinthtcaphnttrongmng. Véctơ
mng1 chiucó1 chs(i). Ma trnlàmng
2 chiucó2 chs(i, j). Khônggian3 chiu
mng3 chiucó3 chs. Khônggiann chiu
làmngn chiucón chs.
1. Mng
lĐể truy nhp trc tiếp các phn t, mng ch
dùng được cu trúc lưu tr kế tiếp.
lCó các phép to lp mng, tìm kiếm 1 phn
t t mng, truy nhp mt phn t mng.
lKhông cho phép b sung hoc loi b mt
phn t mng.
lMng 2 chiu m = 2 hàng, n = 3 ct. Tính
ch s k truy nhp vào ô nh cha phn t aij.
4 5 9
7 10 1
4 5 9 7 10 1 => k = (i-1)*n + j
2. Danh sách
2.1. Khái nim
lDanh sách là mt tp hp có th t gm mt
s biến động các phn t cùng kiu.
lPhép loi b, b sung 1 phn t là phép
thường xuyên tác động lên danh sách.
l d: Tp hp người đến khám bnh cho ta
mt danh sách. Người đến xếp hàng khám b
sung phía sau, người được khám s ra khi
hàng ( loi b ) phía trước.
2.1. Khái nim
lDanh sách tuyến tính: Mt danh sách mà quan h ln
cn gia các phn t được xác định ràng thì được gi
là danh sách tuyến tính. Véc tơ mt danh sách tuyến
tính.
lDanh sách tuyến tính hoc rng (không có phn t nào)
hoc có dng (a1, a2, ..., an) vi ai , 1 i n các
phn t.
lTrong danh sách tuyến tính tn ti phn t đầu là a1,
phn t cui là an, phn t th i là ai . Vi ai bt k 1 i
n thì ai+1 gi là phn t sau ai ; 2 i n thì phn t
ai-1 là phn t trước ca ai .
2.1. Khái nim
ln là độ dài (kích thước) ca danh sách, n có th
thay đổi.
lMt phn t trong danh sách thường là mt bn
ghi (gm mt hoc nhiu trường).
l d 1: Danh mc đin thoi là mt danh sách
tuyến tính, mi phn t ca nó là mt thuê bao
gm 3 trường: H tên ch h, địa ch, s đin
thoi.
l d 2: Tp(File) mt danh sách có kích
thước ln được lưu tr b nh ngoài.
2.2. Các phép toán trên danh sách
lPhép b sung: Có th b sung phn t vào
danh sách.
lPhép loi b: có th loi b mt phàn t ra khi
danh sách.
lPhép ghép: th ghép hai hay nhiu danh
sách thành mt danh sách.
lPhép tách: có th tách mt danh sách thành
nhiu danh sách.
lPhép cp nht: cp nht giá tr cho các phn t
ca danh sách.
2.2. Các phép toán trên danh sách
lPhép sao chép: có th sao chép mt danh sách.
lPhép sp xếp: Có th sp xếp các phn t ca
danh sách theo mt th t nht định.
lPhép tìm kiếm: Tìm kiếm trong danh sách mt
phn t mt trường nào đó giá tr n định.
d 1: Minh ho cho các phép toán trên danh
sách được cài đặt trên mng. Cho danh sách các
s nguyên, thêm vào 1 s nguyên và loi b mt
s nguyên.
2.3. Lưu tr kế tiếp cho danh sách
tuyến tính
lDùng mng mt chiu làm cu trúc lưu tr danh
sách tuyến tính. Tc là dùng vector lưu tr (Vi)
vi 1i m để lưu tr mt danh sách tuyến tính
(a1,a2,...,an). Phn t ai được cha Vi .
a1 a2... ai... an
V1 V2 ... Vi ... Vn ... Vm
2.3. Lưu tr kế tiếp cho danh sách
tuyến tính
lDo s phn t ca danh sách tuyến tính luôn
biến động, tc là kích thước n luôn thay đổi, do
vy m = max(n).
lMt khác, n không th xác định chính xác mà ch
d đoán. Bi vy, nếu max(n) ln s lãng phí b
nh cũng như lãng phí thi gian để thc hin
các thao tác để dn các phn t xung khi ta
thêm mt phn t vào danh sách tuyến tính.
N Công Thng Bài ging Cu tc d liu và gii thut -Chương 03 3.10
3. Cu trúc ngăn xếp (Stack)
3.1. Định nghĩa
lStack mt kiu danh sách tuyến tính đặc bit
mà phép b sung và phép loi b luôn luôn thc
hin mt đầu gi là đỉnh (Top).
lPhép b sung và loi b phn t ca ngăn xếp
được thc hin theo nguyên tc ‘Vào sau ra
trước’ (Last in -First out, viết tt là LIFO).
lStack th rng hoc bao gm mt s phn
t.
3.2. Lưu tr Stack bng mng
l th lưu tr Stack bi mt vector S gm n ô
nh kế tiếp nhau ch s t 1 đến n. Nếu T
ch s phn t đỉnh ca stack thì T s có giá tr
biến đổi khi stack hot động.
lKhi b sung 1 phn t T s tăng lên 1. Khi 1
phn t b loi khi stack thì T gim đi 1.
lTa quy ước khi stack rng T=0.
3.3. Các phép toán trên ngăn xếp
lB sung mt phn t vào stack
-Vào: phn t X, ngăn xếp (S,T)
-Ra: không
{Th tc y b sung phn t X vào ngăn
xếp được lưu tr bi véc tơ S có kích thước
là n, có ch s đinh T.}
Th tc b sung mt phn t vào stack
Procedure Push(S, T, X)
1) Kim tra ngăn xếp đã đầy chưa?
If T= n then Begin Write(‘Stack đãđầy‘)
Return
End;
2) Thay đổi ch s
T := T+1
3)B sung phn t mi X
S[T] := X
Return
N Công Thng Bài ging Cu tc d liu và gii thut -Chương 03 3.14
3.3. Các phép toán trên ngăn xếp
lLoi b mt phn t ra khi stack
-Vào: Ngăn xếp (S, T)
-Ra: giá tr phn t loi b (đỉnh)
{Hàm này thc hin vic loi b phn t
đỉnh ngăn xếp (S,T) và tr v phn t y.}
Hàm loi b phn t khi ngăn xếp
Function Pop(S,T)
1)Kim tra xem stack rng?
If T= 0 then Begin
Write(‘Stack rng‘)
Return;
End
2) Tg := S[T];
3)Thay đổi ch s đỉnh
T := T-1
4) Đưa phn t b loi ra
Pop := Tg;
Return
N Công Thng Bài ging Cu tc d liu và gii thut -Chương 02 2.16
Hàm tr v phn t đỉnh ngăn xếp
Function Top(S,T)
1){Kim tra xem stack rng?}
If T= 0 then Begin
Write(‘Stack rng‘)
Return;
End
2){Tr v phn t đỉnh}
Top := S[T];
Return
N Công Thng Bài ging Cu tc d liu và gii thut -Chương 02 2.17
Hàm kim tra ngăn xếp rng
Function Empty(S,T)
If T= 0 then Empty:=TRUE
ElseEmpty:=FALSE;
Return
N Công Thng Bài ging Cu tc d liu và gii thut -Chương 02 2.18
Ví d v ng dng ca ngăn xếp
lViết gi mã có s dng ngăn xếp để đổi s
nguyên h 10 sang h 2.
lGii thut: Ly s h 10 chianguyênliên tiếp
cho 2, kết qu là phn dư ca phép chia ly
theo th t ngược li. Ápdng cơ chế vào sau
ra trước,mi ln chia ta ly s dư ca phép chia
đẩy vào stack (th tuc Push). Khi đã kết thúc
phép chia kết qu ly các s dư t stack ra
(hàm loi b phn t khi stack,Pop).
N Công Thng Bài ging Cu tc d liu và gii thut -Chương 02 3.19
Ví d v ng dng ca ngăn xếp
-Vào: n
-Ra: s nh phân
Procedure chuyen_doi(n);
While n<> 0 do Begin
R:=n mod 2
Call Push(S,T,R);
n= n div 2
End;
While S<>NULL do Begin
R:=POP(S,T); {lay R tu dinh T cua Stack S }
Write(R)
End;
Return;
N Công Thng Bài ging Cu tc d liu và gii thut -Chương 02 3.20