You are on page 1of 80

B GIAO THNG VN TI

TRNG I HC HNG HI
B MN: KHOA HO C MA Y TI NH
KHOA: CNG NGH THNG TIN




BI GING

CU TRC D LIU




TN HC PHN : CU TRC D LIU
M HC PHN : 17207
TRNH O TO : I HC CHNH QUY
DNG CHO SV NGNH : CNG NGH THNG TIN















HI PHNG - 2008

i

MC LC
CHNG 1. CC KHI NIM M U .............................................................................. 1
1.1. Gii thut v cu trc d liu. ......................................................................................... 1
1.2. Cu trc d liu v cc vn lin quan. ....................................................................... 1
1.3. Ngn ng din t gii thut. .......................................................................................... 2
1.4. Kiu d liu, cu trc d liu, kiu d liu tru tng ................................................... 3
CHNG 2. CC KIU D LIU TRU TNG C BN ............................................... 6
2. 1. Ngn x p - Stack ............................................................................................................ 6
2.1.1 Khi nim .................................................................................................................. 6
2.1.2 Cc thao tc cua ngn xp ......................................................................................... 6
2.1.3 Vi du v hot ng cua mt stack ............................................................................. 7
2.1.4 Ci t stack bng mng ............................................................................................ 7
2.1.5 ng dung cua stack ................................................................................................. 10
2.2. Hng i - Queue .......................................................................................................... 12
2.2.1 Khi nim ................................................................................................................ 12
2.2.2 Cc thao tc c bn cua mt hng i ..................................................................... 13
2.2.3 Ci t hng i s dung mng ............................................................................... 13
2.2.4 Vi du v hot ng cua hng i vi ci t bng mng vong tron ........................ 16
2.2.5 ng dung cu

a ha

ng i ........................................................................................... 16
2.3. Danh sa

ch lin k t Linked list .................................................................................... 17


2.3.1 i nh nghi

a ............................................................................................................... 17
2.3.2 Cc thao ta

c trn danh sa

ch lin k t. ....................................................................... 17
2.3.3 Ci t danh sch lin kt s dung con tro .............................................................. 18
2.3.4 Cc kiu danh sch lin kt khc ............................................................................. 25
2.3.5 M t s vi

du s

du ng c u tru

c danh sa

ch lin k t .................................................... 26
2.3.6. Ci t stack v queue bng con tro ....................................................................... 26
2.4. Bi tp p dung ............................................................................................................. 26
CHNG 3. CY (TREE). ..................................................................................................... 28
3.1. i nh nghia ..................................................................................................................... 28
3.1.1. thi (Graph) ........................................................................................................ 28
3.1.2. Cy (tree) ................................................................................................................ 29
3.3. Cy ti

m ki m nhi phn (Binary Search Tree - BST) .................................................... 31


3.3.1. i nh nghi

a .............................................................................................................. 31
3.3.2. Kh

i ta o cy r ng ................................................................................................... 32
3.3.3. Chen thm mt nt mi vo cy ............................................................................. 32
3.3.4. Xoa bo khoi cy mt nt ........................................................................................ 33
3.3.5. Tim kim trn cy ................................................................................................... 34
3.3.6. Duy t cy ................................................................................................................ 35
3.3.7. Ci t cy BST ...................................................................................................... 36
3.4.Cy cn bng AVL ..................................................................................................... 39
CHNG 4. BNG BM (HASH TABLE) .......................................................................... 54
4. 1. inh nghia bng bm ................................................................................................... 54
4.1.1.inh nghia : ............................................................................................................. 54
4.1.2.Kich thc cua bng bm : ...................................................................................... 55
4.1.3. Phn loi : ............................................................................................................... 55
4.1.4.Cc php ton trn bng bm : ................................................................................ 57
4.2.Hm bm v cc loi hm bm : .................................................................................... 57
4.2.1.Hm bm (Hash Function): ..................................................................................... 57
4.2.2.Mt s loi hm bm : ............................................................................................. 58

ii

4.3.Xung t v cch x l xung t ................................................................................... 61
4.3.1. inh nghia : ............................................................................................................ 61
4.3.2.H s ti (Load Factor - ) : .................................................................................... 61
4.3.3.Mt s phng php x l xung t : ..................................................................... 61
4.3.4. nh gi : ............................................................................................................... 71
4.4.4.Kt lun : ..................................................................................................................... 72
4.5. Bi tp p dung ............................................................................................................. 72
TI LIU THAM KHO. ....................................................................................................... 75





iii

Tn hc phn: Cu trc d liu Loi hc phn: 2
B mn ph trch ging dy: Khoa hc My tinh Khoa ph trch: CNTT
M hc phn: 17207 Tng s TC: 3

TS tit L thuyt Thc hnh/Xemina T hc Bi tp ln n mn hc
60 30 30 0 0 0

iu kin tin quyt:
Sinh vin phi hc xong cc hc phn sau mi c ng k hc phn ny:
Ton cao cp, Ton ri rc, Ngn ng C, Tin hc i cng.

Mc tiu ca hc phn:
Cung cp kin thc v ren luyn k nng thc hnh cu trc d liu cho sinh vin.

Ni dung ch yu
- Nhng vn c bn v cu trc d liu;
- Cc cu trc d liu c bn
- Danh sch lin kt;
- Ngn xp, hng i;
- Cu trc cy;
- Bng bm, ...

Ni dung chi tit ca hc phn:


TN CHNG MC
PHN PHI S TIT
TS LT TH/Xemina BT KT
Chng I : Khi nim lin quan n CTDL 2 2 0
1.1. Gii thut v cu trc d liu.
1.2. Gii thut v cc vn lin quan.
1.3. Ngn ng din t gii thut.
1.4. Kiu d liu, cu trc d liu, kiu d liu tru
tng.

Chng II : Cc kiu d liu tru tng c bn 12 6 6
2.1. Danh sch
2.1.1. Khi nim danh sch
2.1.2. Cc php ton trn danh sch
2.1.3. Ci t danh sch
2.1.4. Cc dng danh sch lin kt (DSLK): DSLK
n, vong, kp,

2.2. Ngn xp (stack)
2.2.1. Khi nim
2.2.2. Ci t ngn xp bi mng, DSLK
2.2.3. ng dung
2.3. Hng i (queue)
2.3.1. Khi nim
2.3.2. Ci t hng i bi mng, DSLK
2.3.3. ng dung
2.4. Bi tp p dung
Chng III: Cy (tree). 18 9 8 1
3.1. Khi nim.
3.2. Cy tng qut.

iv


TN CHNG MC
PHN PHI S TIT
TS LT TH/Xemina BT KT
3.2.1. Biu din cy tng qut.
3.2.2. Duyt cy tng qut.
3.2.3. Vi vi du p dung.
3.3. Cy nhi phn.
3.3.1. inh nghia v tinh cht
3.3.2. Lu tr cy.
3.3.3. Duyt cy.
3.3.4. Cy nhi phn ni vong.
3.4. Cc php ton thc hin trn cy nhi phn.
3.4.1. Dng cy
3.4.2. Duyt cy tim kim
3.4.3. Sp xp cy nhi phn
3.5. Cy tim kim nhi phn (binary search tree)
3.5.1. Khi nim, ci t.
3.5.2. Cy AVL
3.6. Bi tp
Chng IV: Bng bm (hash table) 14 7 6 1
4.1. Khi nim
4.2. Cc loi hm bm
4.3. Cc phng php gii quyt xung t
4.4. nh gi hiu qu cc phng php bm
4.5. Bi tp p dung

Nhim v ca sinh vin :
Tham d cc bui thuyt trinh cua gio vin, t hc, t lm bi tp do gio vin giao,
tham d cc bi kim tra inh k v cui k.

Ti liu hc tp :
1. inh Mnh Tng, Cu trc d liu v thut ton, Nh xut bn H QG H Ni,
2004.
2. Xun Li, Cu trc d liu v gii thut, Nh xut bn H QG H Ni, 2004.
3. Robert Sedgewick, Cm nang thut ton, NXB Khoa hc k thut, 2000.

Hnh thc v tiu chun nh gi sinh vin:
- Hinh thc thi cui k : Thi vit.
- Sinh vin phi m bo cc iu kin theo Quy ch cua Nh trng v cua B

Thang im: Thang im ch A, B, C, D, F

im nh gi hc phn: Z = 0,3X + 0,7Y.
Bi ging ny l ti liu chnh thc v thng nht cua B mn Khoa hc my tinh,
Khoa Cng ngh thng tin v c dng ging dy cho sinh vin.
Ngy ph duyt: / /20



Trng B mn: ThS. Nguyn Hu Tun (k v ghi r h tn)

1

CHNG 1. CC KHI NIM M U
1.1. Gii thut v cu trc d liu.
gii mt bi ton trong thc t bng my tinh ta phi bt u t vic xc inh bi
ton. Nhiu thi gian v cng sc bo ra xc inh bi ton cn gii quyt, tc l phi tr li
r rng cu hoi "phi lm gi?" sau o l "lm nh th no?". Thng thng, khi khi u, hu
ht cc bi ton l khng on gin, khng r rng. gim bt s phc tp cua bi ton thc
t, ta phi hinh thc hoa no, nghia l pht biu li bi ton thc t thnh mt bi ton hinh
thc (hay con gi l m hinh ton). Co th co rt nhiu bi ton thc t co cng mt m hnh
ton.
Vi du : T mu bn th gii.
Ta cn phi t mu cho cc nc trn bn th gii. Trong o mi nc u c t
mt mu v hai nc lng ging (cng bin gii) thi phi c t bng hai mu khc nhau.
Hy tim mt phng n t mu sao cho s mu s dung l it nht.
Ta co th xem mi nc trn bn th gii l mt nh cua thi, hai nc lng
ging cua nhau thi hai nh ng vi no c ni vi nhau bng mt cnh. Bi ton lc ny tr
thnh bi ton t mu cho thi nh sau: Mi nh u phi c t mu, hai nh co cnh
ni thi phi t bng hai mu khc nhau v ta cn tim mt phng n t mu sao cho s mu
c s dung l it nht.
i vi mt bi ton c hinh thc ho, chng ta co th tim kim cch gii trong
thut ng cua m hinh o v xc inh co hay khng mt chong trinh co sn gii. Nu
khng co mt chng trinh nh vy thi it nht chng ta cng co th tim c nhng gi bit
v m hinh v dng cc tinh cht cua m hinh xy dng mt gii thut tt.
Khi co m hinh thich hp cho mt bi ton ta cn c gng tim cch gii quyt bi
ton trong m hinh o. Khi u l tim mt gii thut, o l mt chi hu hn cc ch thi
(instruction) m mi ch thi co mt nghia r rng v thc hin c trong mt lng thi
gian hu hn.
Nhng xt cho cng, gii thut ch phn nh cc php x l, con oi tng x l
trong my tinh chinh l d liu (data ), chng biu din cc thng tin cn thit cho bi ton:
cc d liu vo, cc d liu ra, d liu trung gian, Khng th noi ti gii thut m khng
nghi ti: gii thut o c tc ng trn d liu no, con xt ti d liu thi phi bit d liu
y cn c gii thut gi tc ng a ra kt qu mong mun.. Nh vy, gia cu trc d
liu v gii thut co mi lin quan mt thit vi nhau.
1.2. Cu trc d liu v cc vn lin quan.
Trong mt bi ton, d liu bao gm mt tp cc phn t c s, c gi l d liu
nguyn t. D liu nguyn t co th l mt ch s, mt k t, cng co th l mt s, mt
xu, ty vo bi ton. Trn c s cc d liu nguyn t, cc cung cch kh di theo o lien
kt chng li vi nhau, s n n cc cu trc d liu khc nhau.
La chn mt cu trc d liu thich hp t chc d liu vo v trn c s o xy
dng c gii thut x l hu hiu a ti kt qu mong mun cho bi ton (d liu ra), l
mt khu quan trng.
Cch biu din mt cu trc d liu trong b nh c gi l cu trc lu tr. y chinh
l cch ci t cu trc y trn my tinh v trn c s cc cu trc lu tr ny m thc hin
cc php x l. Co th co nhiu cu trc lu tr khc nhau cho cng mt cu trc d liu v
ngc li.
Khi cp ti cu trc lu tr, cn phn bit: cu trc lu tr tng ng vi b nh
trong lu tr trong; cu trc lu tr ng vi b nh ngoi lu tr ngoi. Chng co c
im v cch x l ring.

2

1.3. Ngn ng din t gii thut.
Vic s dung mt ngn ng lp trinh bc cao din t gii thut, nh Pascal, C, C++,
s gp mt s hn ch sau:
- Phi lun tun thu cc quy tc cht ch v c php cua ngn ng khin cho vic trinh
by v gii thut v cu trc d liu co thin hng nng n, go bo.
- Phi phu thuc vo cu trc d liu tin inh cua ngn ng nn co lc khng th hin
c y u cc v cu trc m ta mun biu t
Mt khi co m hnh thch hp cho bi ton, ta cn hinh thc ho mt gii thut, mt
cu trc d liu trong thut ng cua m hinh o. Khi u l vit nhng mnh tng qut
ri tinh ch dn thnh nhng chui mnh cu th hn, cui cng l cc ch thi thich hp
trong mt ngn ng lp trinh.
bc ny, noi chung, ta co mt gii thut, mt cu trc d liu tng oi r rng, no
gn ging nh mt chng trinh c vit trong ngn ng lp trinh, nhng no khng phi l
mt chng trinh chy c vi trong khi vit gii thut ta khng ch trng nng n c php
cua ngn ng v cc kiu d liu con mc tru tng ch khng phi l cc khai bo ci t
kiu trong ngn ng lp trinh.
Chng hn vi gii thut t mu thi GREEDY, gi s thi l G, gii thut s xc
inh mt tp hp Newclr cc nh cua G c t cng mt mu, m ta gi l mu mi C
trn. tin hnh t mu hon tt cho thi G thi gii thut ny phi c gi lp li cho n
khi ton th cc nh u c t mu.
void GREEDY ( GRAPH *G, SET *Newclr )
{
Newclr = ; /*1*/
for (mi nh v cha t mu cua G) /*2*/
if (v khng c ni vi mt nh no trong Newclr) /*3*/
{
nh du v c t mu; /*4*/
thm v vo Newclr; /*5*/
}
}

Trong thu tuc bng ngn ng gi ny chng ta dng mt s t kho cua ngn ng C
xen ln cc mnh ting Vit. iu c bit na l ta dng cc kiu GRAPH, SET co v xa
l, chng l cc "kiu d liu tru tng" m sau ny chng ta s vit bng cc khai bo thch
hp trong ngn ng lp trinh cu th. Di nhin, ci t thu tuc ny ta phi cu th ho dn
nhng mnh bng ting Vit trn cho n khi mi mnh tng ng vi mt don m
thich hp cua ngn ng lp trinh. Chng hn mnh if /*3*/ co th chi tit ho hn na
nh sau:
void GREEDY ( GRAPH *G, SET *Newclr )
{
Newclr= ; /*1*/
for (mi nh v cha t mu cua G) /*2*/
{
int found=0; /*3.1*/
for (mi nh w trong Newclr) /*3.2*/
if (co cnh ni gia v v w) /*3.3*/
found=1; /*3.4*/
if (found==0)/*3.5*/
{
nh du v c t mu; /*4*/
thm v vo Newclr; /*5*/
}

3

}
}
GRAPH v SET ta coi nh tp hp. Co nhiu cch biu din tp hp trong ngn ng
lp trinh, n gin ta xem cc tp hp nh l mt danh sch (LIST) cc s nguyn biu
din ch s cua cc nh v kt thc bng mt gi tri c bit NULL. Vi nhng qui c nh
vy ta co th tinh ch gii thut GREEDY mt bc na nh sau:
void GREEDY ( GRAPH *G, LIST *Newclr )
{
int found;
int v,w ;
Newclr= ;
v= nh u tin cha c t mu trong G;
while (v<>null)
{
found=0;
w=nh u tin trong newclr;
while( w<>null) && (found=0)
{
if ( co cnh ni gia v v w )
found=1;
else w= nh k tip trong newclr;
}
if (found==0 )
{
nh du v c t mu;
Thm v vo Newclr;
}
v= nh cha t mu k tip trong G;
}
}
1.4. Kiu d liu, cu trc d liu, kiu d liu tru tng
Khi nim tru tng ha
Trong tin hc, tru tng hoa nghia l n gin hoa, lm cho no sng sua hn v d hiu
hn. Cu th tru tng hoa l che di nhng chi tit, lm ni bt ci tng th. Tru tng hoa
co th thc hin trn hai khia cnh l tru tng hoa d liu v tru tng hoa chng trinh.
Tru tng ha chng trnh
Tru tng hoa chng trinh l s inh nghia cc chng trinh con to ra cc php
ton tru tng (s tng qut hoa cua cc php ton nguyn thuy). Chng hn ta co th to ra
mt chng trinh con Matrix_Mult thc hin php ton nhn hai ma trn. Sau khi
Matrix_mult c to ra, ta co th dng no nh mt php ton nguyn thuy (chng hn
php cng hai s).
Tru tng hoa chng trinh cho php phn chia chng trinh thnh cc chng trinh
con. S phn chia ny s che du tt c cc lnh ci t chi tit trong cc chng trinh con.
cp chng trinh chinh, ta ch thy li gi cc chng trinh con v iu ny c gi l s
bao gi.
Vi du nh mt chng trinh qun l sinh vin c vit bng tru tng hoa co th
l:
void main()
{
Nhap(Lop);

4

Xu_ly (Lop);
Xuat (Lop);
}
Trong chng trinh trn, Nhap, Xu_ly, Xuat l cc php ton tru tng. Chng che du
bn trong rt nhiu lnh phc tp m cp chng trinh chinh ta khng nhin thy c.
Con Lop l mt bin thuc kiu d liu tru tng m ta s xt sau.
Chng trinh c vit theo cch gi cc php ton tru tng co l thuc vo cch
ci t kiu d liu khng?
Tru tng ha d liu
Tru tng hoa d liu l inh nghia cc kiu d liu tru tng
Mt kiu d liu tru tng l mt m hnh ton hc cng vi mt tp hp cc php
ton (operator) tru tng c nh ngha trn m hnh . Vi du tp hp s nguyn cng
vi cc php ton hp, giao, hiu l mt kiu d liu tru tng.
Trong mt ADT cc php ton co th thc hin trn cc oi tng (ton hng) khng ch
thuc ADT o, cng nh kt qu khng nht thit phi thuc ADT. Tuy nhin, phi co it nht
mt ton hng hoc kt qu phi thuc ADT ang xt.
ADT l s tng qut ho ca cc kiu d liu nguyn th.
minh ho ta co th xt bn phc tho cui cng cua thu tuc GREEDY. Ta dng
mt danh sch (LIST) cc s nguyn v cc php ton trn danh sch newclr l:
- To mt danh sch rng.
- Ly phn t u tin trong danh sch v tr v gi tri null nu danh sch rng.
- Ly phn t k tip trong danh sch v tr v gi tri null nu khng con phn t k
tip.
- h.
Nu chng ta vit cc chng trinh con thc hin cc php ton ny, thi ta d dng thay
cc mnh hinh thc trong gii thut bng cc cu lnh n gin
Cu lnh Mnh hinh thc
MAKENULL(newclr) newclr=|;
w=FIRST(newclr) w=phn t u tin trong newclr
w=NEXT(w,newclr) w=phn t k tip trong newclr
INSERT( v,newclr) Thm v vo newclr

iu ny cho thy s thun li cua ADT, o l ta co th inh nghia mt kiu d liu tu
cng vi cc php ton cn thit trn no ri chng ta dng nh l cc oi tng nguyn
thu. Hn na chng ta co th ci t mt ADT bng bt k cch no, chng trinh dng
chng cng khng thay i, ch co cc chng trinh con biu din cho cc php ton cua
ADT l thay i.
Ci t ADT l s th hin cc php ton mong mun (cc php ton tru tng) thnh
cc cu lnh cua ngn ng lp trinh, bao gm cc khai bo thich hp v cc thu tuc thc hin
cc php ton tru tng. ci t ta chn mt cu trc d liu thich hp co trong ngn
ng lp trinh hoc l mt cu trc d liu phc hp c xy dng ln t cc kiu d liu c
bn cua ngn ng lp trinh.
S khc nhau gia kiu d liu v kiu d liu tru tng l gi?
Mc d cc thut ng kiu d liu (hay kiu - data type), cu trc d liu (data

5

structure), kiu d liu tru tng (abstract data type) nghe nh nhau, nhng chng co
nghia rt khc nhau.
Kiu d liu l mt tp hp cc gi tri v mt tp hp cc php ton trn cc gi tri o.
Vi du kiu Boolean l mt tp hp co 2 gi tri TRUE, FALSE v cc php ton trn no nh
OR, AND, NOT . Kiu Integer l tp hp cc s nguyn co gi tri t -32768 n 32767
cng cc php ton cng, tr, nhn, chia, Div, Mod
Kiu d liu co hai loi l kiu d liu s cp v kiu d liu co cu trc hay con gi l
cu trc d liu.
Kiu d liu s cp l kiu d liu m gi tri d liu cua no l n nht. Vi du: kiu
Boolean, Integer.
Kiu d liu co cu trc hay con gi l cu trc d liu l kiu d liu m gi tri d liu
cua no l s kt hp cua cc gi tri khc. Vi du: ARRAY l mt cu trc d liu.
Mt kiu d liu tru tng l mt m hinh ton hc cng vi mt tp hp cc php
ton trn no. Co th noi kiu d liu tru tng l mt kiu d liu do chng ta inh nghia
mc khi nim (conceptual), no cha c ci t cu th bng mt ngn ng lp trinh.
Khi ci t mt kiu d liu tru tng trn mt ngn ng lp trinh cu th, chng ta phi
thc hin hai nhim vu:
1. Biu din kiu d liu tru tng bng mt cu trc d liu hoc mt kiu d liu
tru tng khc c ci t.
2. Vit cc chng trinh con thc hin cc php ton trn kiu d liu tru tng m ta
thng gi l ci t cc php ton.
Bi tp:
1. Tim hiu cc kiu d liu c s trong C
2. Tim hiu cc cu trc d liu mng, cu trc trong C v thc hin mt s bi tp c
bn nh nhp, xut

6

CHNG 2. CC KIU D LIU TRU TNG C BN
2. 1. Ngn x p - Stack
2.1.1 Khi nim
Khi nim: Ngn x p (stack) l mt tp hp cc phn t (items) cng kiu c t
ch

c m t ca

ch tu n t (chinh vi th mt s ti liu con inh nghia ngn xp l mt danh sch


tuy n ti

nh ca

c ph n t

i ca

c thao ta

c truy c p ha n ch t

i ca

c ph n t

cu

a danh sa

ch o

)
trong o

ph n t

c thm va

o cu i cu

ng cu

a t p h p se

la

ph n t

bi loa i bo

u tin kho

i
t p h p. Cc ngn xp thng c gi l cc cu trc LIFO (Last In First Out).
V d v ngn x p: Ch ng ta

i li u cu

a m t cng ch

c vn pho

ng, ch ng i

a la

ca

c
vi du v ngn xp.
Ch : Ph n t

duy nh t co

th truy c p t

i cu

a m t ngn x p la

ph n t

i c
thm va

o g n y nh t (theo th

i gian) cua ngn xp.


2.1.2 Cc thao tc ca ngn xp
i vi mt ngn xp ch co 2 thao ta

c c ba

n, thao ta

c th

nh t th c hi n thm m t
ph n t

va

o stack go i la

push, thao ta

c th

hai la

o c gia

tri cu

a m t ph n t

va

loa i bo

no khoi
stack go i la

pop.

nh t qua

n v

i ca

c th vi n ca

i t c u tru

c stack chu n STL (v mt s ti liu


cng phn chia nh vy), ta xa

c i nh ca

c thao ta

c i v

i m t stack g m co

:
1. Thao ta

c push(d) s t phn t d ln i

nh cu

a stack.
2. Thao ta

c pop() loi bo phn t nh stack.


3. Thao ta

c top() s tr v gi tri phn t nh stack.


4. Thao ta

c size() cho bi t s ph n t

hi n ta i ang lu trong stack


Ngoi hai thao tc c bn trn chng ta c n co

m t s thao ta

c phu tr kha

c: ch ng ha n
lm th no bit l mt stack khng co phn t no t

c la

r ng (empty) hay la

y (full)
t

c la

khng th thm va

o b t c

m t ph n t

na

o kha

c n

a. th c hi n i u na

y ng

i ta
th

ng thm hai thao ta

c ti n ha

nh ki m tra la

empty() v full().
a

m ba

o khng xa

y ra ti

nh tra ng go i la

stack overflow (trn stack khng th thm


vo stack bt c phn t no) chng ta co th cho hm push tra

v ch ng ha n 1 trong tr

ng
h p th c hi n tha

nh cng va

0 n u khng tha

nh cng.

7

2.1.3 V d v hot ng ca mt stack
Gi s chng ta co mt stack kich thc bng 3 (co th cha c ti a 3 ph n t

) v
cc phn t cua stack l cc s nguyn trong khong t -100 n 100. Sau y la

minh ho a
cc thao tc i vi stack v kt qu thc hin cua cc thao tc o.
Thao ta

c N i dung stack K t qua


Kh

i ta o ()
push(55) (55) 1
push(-7) (-7, 55) 1
push(16) (16, -7, 55) 1
pop (-7, 55) 16
push(-8) (-8, -7, 55) 1
push(23) (-8, -7, 55) 0
pop (-7, 55) -8
pop (55) -7
pop () 55
pop () 101
2.1.4 Ci t stack bng mng
C u tru

c d

li u stack co

th ca

i t b ng ca

ch s

dung mt mng v mt s nguyn


top_idx ch

a chi

s cu

a ph n t

nh stack.
Ngn x p r ng khi top_idx = -1 v y khi top_idx = n-1 trong o

n la

ki

ch th

c cu

a
mng.
Khi th c hi n thao ta

c push chu

ng ta tng top_idx ln 1 v ghi d liu vo vi tri tng


ng cua mng.
Khi th c hi n thao ta

c pop chu

ng ta chi

vi c gia

m chi

s top_idx i 1.
Vi du v ngn xp ci t bng mng:
Gi s chng ta s dung mng E[0..4] cha cc phn t cua stack va

bi n top_idx
lu ch s cua phn t nh stack. Trong ba

ng sau c t cu i cu

ng k t qua

la

gia

tri tra

v
cua vic gi hm.
Thao ta

c top_idx E[0] E[1] E[2] E[3] E[4] K t qua


kh

i ta o -1 ? ? ? ? ?
push(55) 0 55 ? ? ? ? 1
push(-7) 1 55 -7 ? ? ? 1
push(16) 2 55 -7 16 ? ? 1
pop 1 55 -7 16 ? ? 16
push(-8) 2 55 -7 -8 ? ? 1
pop 1 55 -7 -8 ? ? -8
pop 0 55 -7 -8 ? ? -7
Ch rng trong minh ha ny chng ta thy rng mt s gi tri vn con trong mng
nhng chu

ng c xem nh khng co

trong stack vi

khng co

thao ta

c na

o truy c p t

i chu

ng.
Noi chng thi phn t E[i] c xem la

ra

c n u nh i>top_idx. Ti sao chng ta khng xoa bo


cc phn t ny (ch ng ha n nh t chu

ng bng cc gi tri mc inh no o?).



8

Ci t cua stack bng ngn ng C nh sau (p dung stack cho bi ton chuyn s t
c s 10 sang c s 2):
#include <stdio.h>
#include <stdlib.h>
const int MAX_ELEMENT = 100; // so phan tu toi da cua stack la 100
// khai bao stack chua cac so nguyen
typedef struct
{
int * data; // khai bao mang dong
int top_idx;
} stack;
// ham khoi tao stack rong
void init(stack *s);
void push(stack * s, int d);
void pop(stack *s);
int top(const stack *s);
int size(const stack *s);
int empty(const stack *s);
int full(const stack *s);
// ham giai phong bo nho danh cho stack
void clear(stack *s);

int main()
{
int n;
int bit;
stack s;
init(&s);
printf("Nhap so nguyen n = ");
scanf("%d", &n);
while(n)
{
push(&s, n%2);
n /= 2;
}
while(!empty(&s))
{
bit = top(&s);
pop(&s);
printf("%d", bit);
}
clear(&s);
return 0;

9

}
void init(stack *s)
{
s->data = (int*)malloc(MAX_ELEMENT * sizeof(int));
s->top_idx = -1;
}
void clear(stack *s)
{
if(s->data != NULL)
free(s->data);
s->top_idx = -1;
}
void push(stack *s, int d)
{
s->data[++s->top_idx] = d;
}
void pop(stack *s)
{
s->top_idx --;
}
int top(const stack *s)
{
return s->data[s->top_idx];
}
int size(const stack *s)
{
return s->top_idx+1;
}
int empty(const stack * s)
{
return (s->top_idx==-1)?(1):(0);
}
int full(const stack * s)
{
return (s->top_idx==MAX_ELEMENT-1)?(1):(0);
}
C u tru

c stack co

th ca

i t b ng ma

ng theo ca

c ca

ch kha

c, ho c ca

i t b ng con tro


(chng ta s hc v ph n ca

i t na

y sau ph n danh sa

ch lin k t).
Stack co

th c ca

i t b ng ca

ma

ng va

danh sa

ch lin k t v y khi na

o chu

ng ta s


dung mng v khi no dng danh sch lin kt?
Danh sa

ch lin k t Mng
C

m i ph n t

cu

a stack c n
co thm 2 byte (1 con tro

).
Xin c p pha

t m t vu

ng nh

co

ki

ch
th

c c i nh va

co

th m t ph n

10

N u ki

ch th

c cu

a m t ph n
t

n thi

khng a

ng k
nhng n u la

ki u int thi

ki

ch
th

c se

tng g p i.
trong s o

khng bao gi

c du

ng
n v nu nh kich thc cua mt
ph n t

n thi

vu

ng nh

la

ng phi

na

y
cng rt ln.
Khng co

gi

i ha n v s ph n
t

cu

a stack.
Kich thc ti a cua stack c xc
i nh ngay khi no

c ta o ra.
2.1.5 ng dng ca stack
V d 1
Stack co

th du

ng ki m tra ca

c c p ky

hi u cn b ng trong m t chng tri

nh (ch ng
hn {}, (), []).
Vi du {()} v {()({})} l cc biu thc ng con {((} v {(}) khng pha

i la

ca

c bi u
th

c u

ng.
Chng ta thy rng nu nh mt biu thc l ng thi trong qu trinh c cc k hiu
cua biu thc o nu chng ta thy mt k hiu ong (ch ng ha n ), } hay ]) thi k hiu ny
phi khp vi k hiu m c c thy gn nht (theo th

i gian), v khi o vic s dung


stack cho ca

c ba

i toa

n nh th na

y la

hoa

n toa

n h p ly

.
Chng ta co th s dung thut ton sau y:
while not end of Input
S = next sumbol
if(s is opening symbol)
push(s)
else // s la

d u o

ng ngo c
if(stack.empty)
Bo li
else
R = stack.top()
stack.pop()
if(!match(s,r))
Bo li
If(!stack.empty())
Bo li
Vi du:
1. Input: {()}
s = {, push{,
s = (, push (,
s = ), r = pop = (, r,s match
s = }, r = pop = {, r,s match
End of Input, stack r ng => bi u th

c la

ng.
Vi du: Input = { ( ) ( { ) } } (sai)
Input = { ( { } ) { } ( ) }

11

V d 2
S

du ng Stack chuy n i ca

c dng biu thc i s. Trong vi

du na

y chu

ng ta se


xem xe

t ca

c thu t toa

n s

du ng stack chuy n i t

bi u a i s

da ng trung t (dng thng


th

ng, hay co

n go i la

infix notation) thnh cc biu thc dng tin t (prefix notation, hay
con gi l biu thc Balan Polish notation) v biu thc hu t (postfix notation, hay bi u
th

c Balan ng c).
Bi u th

c a i s la

m t s k t h p u

ng n gi

a ca

c toa

n ha ng (operand) v cc ton
t

(operator). Ton hng l cc s liu co th thc hin c cc thao tc tinh ton ton hc.
Ton hng cng co th l cc bin s x, y, z hay ca

c h ng s . Ton t l mt k hiu ch ra
thao ta

c ti

nh toa

n toa

n ho c hay logic gi

a ca

c toa

n ha ng, ch ng ha n nh ca

c toa

n ha ng +, -, *,
/, ^ (ton t m hoa). Vi c i nh nghi

a ca

c bi u th

c a i s m t ca

ch ch t che

v ly

thuy t la


nh sau:
- M t toa

n ha ng la

m t bi u th

c h p l
- N u expression1 v expression2 l hai biu thc hp l v op l mt ton t thi
m t k t h p h p l gi

a bi u th

c expression 1 v

i bi u th

c expression 2 s

du ng
ton t op s cho ta mt biu thc i s hp l
Theo i nh nghi

a trn ta co

x + y*z la

m t bi u th

c a i s h p l nhng *x y z+
khng pha

i la

m t bi u th

c h p l . Trong ca

c bi u th

c a i s ng

i ta co

th s

du ng ca

c
d u o

ng va

ngo c.
M t bi u th

c a i s co

th c bi u di n b ng 3 dng khc nhau.


Bi u th

c trung t (infix notation): y la

da ng bi u di n ph bi n nh t cu

a ca

c bi u
th

c a i s , trong ca

c bi u th

c trung t , ton t nm gia cc ton hng. Vi du nh 2 + 3 * (7


3)
Bi u th

c ti n t (prefix notation): dng biu din ny do nh ton hc ngi Balan


Jan Lukasiewicz a ra va

o nh

ng nm 1920. Trong da ng bi u di n na

y, ton t ng trc
cc ton hng. Vi du nh + * 2 3 7
Bi u th

c h u t (postfix notation): hay co

n go i la

bi u th

c Balan ng c, ton t

ng sau ca

c toa

n ha ng. Vi du nh 2 3 7 *.
Cu ho

i ma

chu

ng ta co

th t ra ngay l p t

y la

: ti sao li cn s dung ti cc
dng biu din tin t v hu t trong khi chng ta vn quen v vn s dung c cc biu
th

da ng trung t .
L do l cc biu thc trung t khng n gin v d dng khi tinh gi tri cua chng
nh chu

ng ta v n t

ng. ti

nh gia

tri cu

a m t bi u th

c trung t chu

ng ta c n ti

nh t

i u
tin cu

a ca

c toa

n t

cu

a bi u th

c va

ca

c qui t c k t h p. u tin cua cc ton t v cc qui


t c k t h p se

quy t i nh t

i qua

tri

nh ti

nh toa

n gia

tri cu

a m t bi u thc trung t.
Chng ta co bng u tin cua cc ton t thng gp nh sau:
Ton t u tin
()
+ (m t ngi), - (m t ngi), !
+ (c ng), - (tr

)
<, <=, >, >=
==, !=

12

&&
||
Khi a

bi t u tin toa

n t

chu

ng ta co th tinh ton cc biu thc chng hn 2 + 4


* 5 s bng 22 vi trc ht cn ly 4 nhn v

i 5, sau o

k t qua

nh n c em c ng v

i 2 vi
php nhn co u tin cao hn php cng. Nhng v

i bi u th

c 2*7/3 thi ta khng th ti

nh
c vi

phe

p nhn va

phe

p chia co

u tin b ng nhau, khi o

c n s

du ng t

i ca

c qui t c
k t h p ca

c toa

n t

. Qui t c k t h p se

cho chu

ng ta bi t th

t th c hi n ca

c toa

n t

u co

cu

ng
u tin. Ch ng ha n chu

ng ta co

qui t c k t h p tra

i, nghia l cc ton t cng u tin s


c th c hi n t

tra

i qua pha

i, hay qui t c k t h p pha

i. N u theo qui t c k t h p tra

i thi


php ton trn s co kt qu l 4 (l y k t qua

nguyn).
Vi nhng vn lin quan ti u tin ton t v cc qui lut kt hp nn chng ta
th

ng s

du ng ca

c da ng bi u di n ti n t va

h u t trong vi c ti

nh toa

n ca

c bi u th

c a i s .
C biu thc hu t v tin t u co mt u im hn so vi cch biu din trung t:
o

la

khi ti

nh toa

n ca

c bi u th

da ng ti n t va

h u t chu

ng ta khng c n pha

i y

i
u tin toa

n t

va

ca

c lu t k t h p. Tuy nhin so v

i bi u th

c trung t , cc biu thc tin t


v hu t kho hiu hn v vi th nn khi biu din chng ta vn s dung dng biu thc trung
t , nhng khi ti

nh toa

n se

du ng da ng ti n t ho c h u t , i u na

y yu c u c n co

cc thut
ton chuyn i t dng trung t sang dng tin t hoc hu t.
Vi c chuy n i cu

a chu

ng ta co

th th c hi n b ng ca

ch s

du ng c u tru

c stack ho
cy bi u th

c (chng 5), ph n na

y chu

ng ta se

chi

xem xe

t ca

c thu t toa

n s

du ng stack vi


thu t toa

n s

du ng cy bi u th

c kha

ph

c ta p.
Thu t toa

n chuy n i bi u th

c da ng trung t tha

nh da ng h u t s

du ng stack.
V d 3
Phn ti

ch u tin toa

n t


Chng ta co th s dung c u tru

c stack phn ti

ch va

l ng gia

ca

c bi u th

c toa

n
hc kiu nh:
5 * (( (9+8) * (4 * 6) ) + 7)
Tr

c h t chu

ng ta chuy n chu

ng tha

nh da ng h u t (postfix):
5 8 9 + 4 6 * * 7 + *
Sau o

du ng m t stack th c hi n vi c ti

nh toa

n gia

tri cu

a bi u th

c h u t nh n
c.
Ngoi ra cc stack con co th dng ci t cc thut ton qui v kh qui cc
ci t thut ton.
2.2. Hng i - Queue
2.2.1 Khi nim
Hng i l mt tp hp cc phn t cng kiu c t chc mt cch tun t (tuy n
tinh) trong o

ph n t

c thm va

o u tin se

la

ph n t

c loa i bo

u tin kho

i ha

ng
i. Cc hng i thng c gi l cc cu trc FIFO (First In First Out).
Cc vi du thc t v hng i m chng ta co th thy trong cuc sng hng ngy o l
oa

n ng

i x p ha

ng ch

mua ve

t u, danh sa

ch ca

c cu c he n cu

a m t gia

m c, danh sa

ch
cc cng vi c c n la

m cu

a m t ng

i

13

Cng co th inh nghia hng i l mt danh sch tuyn tinh cc phn t ging nhau
v

i m t s thao ta

c ha n ch t

i ca

c ph n t

trn danh sa

ch o

.
2.2.2 Cc thao tc c bn ca mt hng i
Tng t nh c u tru

c ngn x p, chng ta inh nghia cc thao tc trn hng i tun


theo ca

i t chu n cu

a ha

ng i trong th vi n STL va

ca

c ta

i li u kha

c, g m co

:
1. push(d): thm ph n t

d va

o vi tri

cu i ha

ng i.
2. pop(): loi bo phn t u hng i.
3. front(): tr v gi tri phn t u hng i.
4. back(): tr v gi tri phn t cui hng i.
5. size(): tr v s phn t ang trong hng i.
6. empty(): ki m tra ha

ng i co

r ng hay khng.
7. full(): ki m tra ha

ng i y (ch cn khi ci t hng i bng mng).


Vi du:
Thao ta

c N i dung Gi tr tr v
Kh

i ta o ( )
push(7) ( 7 )
push(8) ( 7, 8 )
push(5) ( 7, 8, 5 )
pop() ( 8, 5 ) 7
pop() ( 5 ) 8
2.2.3 Ci t hng i s dng mng
ca

i t c u tru

c ha

ng i chu

ng ta co

th s

du ng ma

ng ho c s

du ng con tro

(ph n
ny s hc sau phn danh sch lin kt):
- Ta lu ca

c ph n t

cu

a ha

ng i trong m t ma

ng data . u cua hng i l phn t


u tin, v ui c ch ra bng cch s dung mt bin tail.
- push(d) c th c hi n m t ca

ch d da

ng: tng tail ln 1 v chen phn t vo vi tri


o


- pop() c th c hi n khng hi u qua

: t t ca

ca

c ph n t

u se

bi d n v u ma

ng
do o

ph

c ta p la

O(n).
Lm th no chng ta co th ci thin tinh hinh ny?
Thay vi

chi

du ng m t bi n chi

s tail chu

ng ta s

dung hai bin tail v head, khi c n


loi bo (pop) m t ph n t

kho

i ha

ng i chu

ng ta se

tng bi n head ln 1:
Tuy v y v n co

n co

v n , o

la

sau n l n push() (n la

ki

ch th

c ma

ng) mng s y
k ca

trong tr

ng h p no gn nh rng v mt logic. gia

i quy t v n na

y chu

ng ta se


dung li cc phn t u mng. Khi push() m t ph n t

i tail se

c tng ln 1 nhng
n u nh no

cu i ma

ng thi

se

t no

b ng 0.
V n m

i ny sinh y l lm th no chng ta co th xc inh c khi no hng


i r ng ho c y?

14

Cch gii quyt n gin l ta s dng mt bin lu s phn t thc s cua hng i
gii quyt cho tt c cc thao tc ki m tra ha

ng i r ng, y ho c l y s ph n t

cu

a ha

ng
i.
#include <stdio.h>
#include <stdlib.h>
const int MAX_ELEMENT = 100; // so phan tu toi da cua queue la 100
// khai bao queue chua cac so nguyen
typedef struct
{
int * data; // khai bao mang dong
int head;
int tail;
int cap; // luu so phan tu cua hang doi
} queue;
// ham khoi tao queue rong
void init(queue *q);
void push(queue * s, int d);
void pop(queue *q);
int front(const queue *q);
int back(const queue *q);
int size(const queue *q);
int empty(const queue *q);
int full(const queue *q);
// ham giai phong bo nho danh cho queue
void clear(queue *q);
int main()
{
int a[] = {3, 5, 1, 8};
int n = 4;
int i;
int d;
queue q;
init(&q);
for(i=0;i<n;i++)
push(&q, a[i]);
while(!empty(&q))
{
d = front(&q);
printf("%d ", d);
pop(&q);
}
clear(&q);
return 0;

15

}
void init(queue *q)
{
q->data = (int*)malloc(MAX_ELEMENT * sizeof(int));
q->head = q->tail = -1;
q->cap = 0;
}
void clear(queue *q)
{
if(q->data != NULL)
free(q->data);
q->head = q->tail = -1;
q->cap = 0;
}
void push(queue *q, int d)
{
q->tail = (q->tail + 1) % MAX_ELEMENT;
q->data[q->tail] = d;
if(q->cap==0)
// neu hang doi rong thi sau khi push
// ca head va tail deu chi vao 1 phan tu
q->head = q->tail;
q->cap++;
}
void pop(queue *q)
{
q->head = (q->head + 1)%MAX_ELEMENT;
q->cap--;
if(q->cap==0)
q->head = q->tail = -1;
}
int front(const queue *q)
{
return q->data[q->head];
}
int back(const queue *q)
{
return q->data[q->tail];
}
int size(const queue *q)
{
return q->cap;
}

16

int empty(const queue *q)
{
return (q->cap==0)?(1):(0);
}
int full(const queue *q)
{
return (q->cap==MAX_ELEMENT-1)?(1):(0);
}
2.2.4 V d v hot ng ca hng i vi ci t bng mng vong tron
Ta gia

ma

ng lu ca

c ph n t

cu

a ha

ng i la

E[0..3], cc bin head, tail lu vi tri


cua phn t u v cui hng i, c t R la

c t k t qua

th c hi n ca

c thao ta

c trn ha

ng i,
cc du ? tng

ng v

i gia

tri b t ky

.
Thao ta

c head tail E[0] E[1] E[2] E[3] R


Kh

i ta o -1 -1 ? ? ? ?
push(55) 0 0 55 ? ? ?
push(-7) 0 1 55 -7 ? ?
push(16) 0 2 55 -7 16 ?
pop() 1 2 55 -7 16 ? 55
push(-8) 1 3 55 -7 16 -8
pop() 2 3 55 -7 16 -8 -7
pop() 3 3 55 -7 16 -8 16
push(11) 3 4 11 -7 16 -8
2.2.5 ng dng ca hng i
Trong ca

c h i u ha

nh:
- Hng i cc cng vic hoc cc tin trinh ang i c thc hin
- Hng i cc tin trinh ch cc tin hiu t cc thit bi IO
- Cc file c g

i t

i ma

y in
M pho

ng ca

c h th ng ha

ng i th

i trong th c t .
- Cc khch hng trong cc ca hng tp hoa, trong ca

c h th ng ngn ha

ng
- Cc n t hng cua mt cng ty
- Phong cp cu
- Cc cuc gi in thoi ho c ca

c t ha

ng ve

ma

y bay , cc t hng cua khch


hng
Cc ng dung khc:
Th

t topo: v

i m t t p ca

c s ki n, v cc cp (a, b) trong o

s ki n a co

u tin
cao hn so v

i s ki n b (bi ton lp lich), duyt thi theo chiu rng (Breadth First
Search).
Bi tp: Hy vit chng trinh chuyn i mt biu thc dng infix (dng thng
th

ng) n gia

n (khng ch

a ca

c d u ()) thnh mt biu thc dng tin t (prefix). Vi du ny


xem nh m t ba

i t p sinh vin t la

m.

17

2.3. Danh sa

ch lin k t Linked list


2.3.1 i nh nghi

a
Danh sa

ch lin k t (linked list) l mt tp hp tuyn tinh cc phn t cng kiu gi l


cc nt (node), m i nu

t co

ca

c c i m sau y:
- M i nu

t co

t nh t hai tr

ng (field) m t tr

ng go i la

tr

ng d

li u (data) v
tr

ng co

n la i la

tr

ng lin k t (link) tro ti (point to) (th

ng go i la

next).
- Tr

ng lin k t cu

a ph n t

th

i cu

a danh sa

ch se

tro ti phn t th (i+1) cua


danh sa

ch
- Ph n t

u tin cu

a danh sa

ch lin k t c go i la

head va

ph n t

cu i cu

ng
c go i la

tail. Head khng ch

a d

li u va

tr

ng next cu

a tail se

chi

va

o NULL.
- Tr

ng data la

tr

ng ch

a d

li u ma

chu

ng ta th c s lu trong danh sa

ch lin
k t
- Gi tri NULL v vic thc hin tro ti (point to) cua mi lin kt thc s din ra
nh th na

o phu thu c nhi u va

o vi c ca

i t cu th danh sa

ch lin k t.

Co nhiu loi danh sch lin kt khc nhau ty thuc vo cu trc cua mi phn t
trong danh sa

ch (s tr

ng lin k t v

i ca

c ph n t

kha

c trong danh sa

ch) nhng c ba

n nh t
l danh sch lin kt n (single linked list), mi phn t co mt trng lin kt nh trn hinh
v minh ha, v khi chng ta noi n danh sch lin kt, n u khng co

ca

c chu

gia

i i ke

m thi


ng m hi u o

la

danh sa

ch lin k t n.
2.3.2 Cc thao tc trn danh sch lin kt.
Tng t nh ca

c c u tru

c c ba

n stack va

queue, chng ta inh nghia cc thao tc cua


danh sa

ch lin k t d a trn ca

i t chu n cu

a c u tru

c danh sa

ch lin k t trong th vi n STL:


1. push_front(d): thm m t ph n t

va

o u danh sch.
2. push_back(d): thm m t ph n t

va

o cu i danh sa

ch.
3. pop_front(): loi bo phn t u danh sch.
4. pop_back(): loi bo phn t cui danh sch.
5. erase(): xoa bo mt phn t khoi danh sch.
6. insert(): chen mt phn t mi vo mt vi tri cu th cua danh sch.
7. size(): cho bi t s ph n t

trong danh sa

ch.
8. empty(): ki m tra danh sa

ch r ng.
9. begin(): tr v phn t u danh sch.
10. end(): tr v phn t cui danh sch.
11. sort(): s p x p danh sa

ch theo tr

ng kho

a (l mt trng con cua trng d liu).


12. merge(): tr n danh sa

ch v

i m t danh sa

ch kha

c.
13. clear(): xoa bo ton b cc phn t cua danh sch.
14. find(): tim kim mt phn t trong danh sch theo khoa tim kim.

18

Cc thao ta

c kha

c cu

ng co

th c ca

i t v

i m t danh sa

ch lin k t la

m cho cng
vi c cu

a ca

c l p tri

nh vin tr

nn d da

ng hn:
- Di chuy n m t ph n t

trong danh sa

ch
- i hai phn t cho nhau
2.3.3 Ci t danh sch lin k t s

du ng con tro


typedef struct Node
{
// truong du lieu
int data;
struct Node * next;
} NodeType;
Kh

i ta o danh sa

ch:
NodeType * head, * tail;
head = new node;
headnext = NULL;
Cc thao tc trn s to ra mt danh sch lin kt r ng (empty khng ch

a ph n t


no)
Trong ca

i t na

y chu

ng ta cho tail chi

va

o NULL, th

ng c i nh nghi

a la

0. Do o


tr

ng next cu

a m t ph n t

se

la

0, v khi o chng ta bit l chng ta ang phn t tail


cua danh sa

ch.
y tro ti (point to) co nghia l chng ta thc s s dung cc con tro. Chng ta s
s

m th y r ng chu

ng ta khng c n thi t pha

i s

du ng ca

c con tro

th c s ca

i t m t danh
sch lin kt.
Chen mt nt (node) vo danh sch lin kt
D da

ng nh n th y r ng ca

ch n gia

n nh t che

n m t nu

t m

i va

o m t danh sa

ch
lin k t la

t nu

t o

u (ho c cu i) cua danh sch. Ho c cu

ng co

th chu

ng ta mu n che

n
cc phn t vo gi

a danh sa

ch.
Chen X vo gia I v S:
struct node * A;
A = new node;
Akey = X;
Anext = Inext;
Inext = A;



19

th c hi n i u na

y chu

ng ta c n 2 tham chi u t

i hai nu

t trong danh sa

ch va

khng
c n quan tm t

i da

i (s ph n t

) cua danh sch. Tuy nhin th c hi n vi c na

y v

i ca

c
mng chc chn s khc nhiu.
Xa mt nt (node) khoi danh sch lin kt
Xoa mt nt khoi danh sch lin kt rt n gin chng ta ch cn thay i mt con
tro, tuy nhin v n la

chu

ng ta c n bi t nu

t na

o tro

i nu

t ma

chu

ng ta i nh xo

a. Gi s
chng ta bit nt i tro ti nt x v chng ta mun xoa bo x:
inext = xnext;

Ch co mt tham chiu bi thay i khng phu thuc vo da

i cu

a danh sa

ch (so sa

nh
v

i ca

i t b ng ma

ng, tuy v y v n co

v n v

i ca

i t trn).
Di chuy n (move) m t nu

t trong danh sa

ch lin k t
Di chuy n m t nu

t trong danh sa

ch lin k t bao g m hai thao ta

c: xoa bo mt nt sau
o

che

n va

o m t nu

t. Vi du chng ta mun di chuyn nt T t cui danh sch ln u danh


sch:

M t l n n

a chu

ng ta th y r ng thao ta

c di chuy n na

y chi

i ho

i thay i 3 tham
chi u va

khng phu thu c va

o da

i cu

a danh sa

ch (so sa

nh i u na

y v

i ca

i t b ng ma

ng).
Ci t minh ha y u cua danh sch lin kt n:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
// khai bao cau truc cho mot nut cua danh sach
typedef struct Node
{
// truong du lieu
int data;
struct Node * next;

20

} NodeType;
// khai bao kieu danh sach
typedef struct
{
NodeType * head;
NodeType * tail;
// so phan tu cua danh sach
int spt;
}LList;
// ham khoi tao danh sach
void init(LList * list);
// ham them 1 phan tu vao dau danh sach
void push_front(LList *list, int d);
// ham them mot phan tu vao cuoi danh sach
void push_back(LList *list, int d);
// ham xoa phan tu o cuoi danh sach
int pop_back(LList * list);
// ham xoa phan tu o dau danh sach
int pop_front(LList * list);
// ham tra ve phan tu dau tien
int begin(const LList * list);
// ham tra ve phan tu cuoi cung
int end(const LList * list);
void insertAfter(LList * list, NodeType * p);
void insertBefore(LList * list, NodeType * p);
void eraseAfter(LList * list, NodeType * p);
void eraseBefore(LList * list, NodeType * p);
// ham in danh sach
void printList(LList list);
// ham sap xep danh sach
void sort(LList *list);
// ham tim kiem trong danh sach
NodeType * find(LList *, int d);
// giai phong toan bo danh sach
void clear(LList * list);
// ham tron hai danh sach, ket qua luu trong danh sach thu nhat
void merge(LList *list1, const LList *list2);
// ham kiem tra danh sach lien ket co rong khong
int empty(const LList *list);
int main()
{
LList myList;
LList list2;

21

init(&myList);
init(&list2);
push_front(&myList, 10);
push_front(&myList, 1);
push_front(&myList, 12);
push_back(&myList, 20);
push_back(&myList, 23);
push_back(&myList, 25);
sort(&myList);
printList(myList);
push_front(&list2, 14);
push_front(&list2, 9);
merge(&myList, &list2);
printList(myList);
printList(list2);
clear(&myList);
printList(myList);
return 0;
}
void init(LList * list)
{
list->head = list->tail = NULL;
list->spt = 0;
}
void printList(LList list)
{
NodeType * tmp;
tmp = list.head;
while(tmp!=NULL)
{
printf("%d ", tmp->data);
tmp = tmp->next;
}
printf("\n");
}
void push_front(LList * list, int d)
{
NodeType * tmp = (NodeType *)malloc(sizeof(NodeType));
tmp->data = d;
if(list->spt==0)
{
tmp->next = NULL;
list->head = list->tail = tmp;

22

}
else
{
tmp->next = list->head;
list->head = tmp;
}
list->spt = list->spt+1;
}
void push_back(LList * list, int d)
{
NodeType * tmp = (NodeType *)malloc(sizeof(NodeType));
tmp->data = d;
tmp->next = NULL;
if(list->spt==0)
list->head = list->tail = tmp;
else
{
list->tail->next = tmp;
list->tail = tmp;
}
list->spt = list->spt+1;
}
NodeType * find(LList * list, int d)
{
NodeType * tmp = list->head;
while(tmp!=NULL)
{
if (tmp->data==d)
break;
tmp = tmp->next;
}
return tmp;
}
int pop_back(LList * list)
{
NodeType * p, * q;
int ret = -1;

if(list->spt>0)
{
p = list->head;
q = NULL;
while(p->next!=NULL)

23

{
q = p;
p = p->next;
}
if(q!=NULL)
{
// danh sach chi co 1 phan tu
q->next = NULL;
list->tail = q;
}
else
list->head = list->tail = NULL;
ret = p->data;
free(p);
list->spt = list->spt-1;
}
return ret;
}
int pop_front(LList * list)
{
int ret=-1;
NodeType * tmp;
if(list->spt>0)
{
tmp = list->head;
if(list->spt==1)
{
// danh sach chi co 1 phan tu
ret = list->head->data;
list->head = list->tail = NULL;
}else
list->head = list->head->next;
free(tmp);
list->spt = list->spt - 1;
}
return ret;
}
// sap xep dung thuat toan doi cho truc tiep (interchange sort)
void sort(LList * list)
{
// s

du ng thu t toa

n s p x p n i bo t Bubble sort
NodeType * p, * q;
int tmp;

24


p = list->head;
while(p!=NULL)
{
q = p->next;
while(q!=NULL)
{
if(q->data < p->data)
{
tmp = q->data;
q->data = p->data;
p->data = tmp;
}
q = q->next;
}
p = p->next;
}
}
void clear(LList * list)
{
NodeType * p, * q;
if(list->spt>0)
{
p = list->head;
list->head = list->tail = NULL;
list->spt = 0;
while(p)
{
q = p->next;
free(p);
p = q;
}
}
}
void merge(LList *list1, const LList *list2)
{
NodeType * tmp;
tmp = list2->head;
while(tmp)
{
push_back(list1, tmp->data);
tmp = tmp->next;
}

25

}
int empty(const LList *list)
{
return (list->spt==0)?(1):(0);
}
int begin(const LList * list)
{
return list->head->data;
}
int end(const LList * list)
{
return list->tail->data;
}
So sa

nh gi

a danh sa

ch lin k t va

ma

ng
Danh sa

ch lin k t co

s ph n t

co

th thay i va

khng c n ch r kich thc ti a


cua danh trc. Ng c la i ma

ng la

ca

c c u tru

c co

ki

ch th

c c i nh
Chng ta co th sp xp li, thm va

xo

a ca

c ph n t

kho

i danh sa

ch lin k t chi

i
m t s c i nh ca

c thao ta

c. V

i ma

ng ca

c thao ta

c na

y th

ng tng ng v

i ki

ch th

c
mng.
ti

m n ph n t

th

i trong m t danh sa

ch lin k t chu

ng ta c n pha

i do

qua i-1
ph n t

ng tr

c no

trong danh sa

ch (i-1 thao ta

c) trong khi v

i ma

ng la

m i u na

y chi


m t 1 thao ta

c.
Tng t ki

ch th

c cu

a m t danh sa

ch khng pha

i hi n nhin ma

bi t c trong khi
chng ta lun bit r kich thc cua mt mng trong chng trinh (tuy nhin co

m t ca

ch n
gin khc phuc iu na

y).
2.3.4 Cc kiu danh sch lin kt khc
Danh sch lin kt i (double linked list) ging nh mt danh sch lin kt n ngoi
tr vic mi nt c thm mt trng previous tro vo nt ng trc n.

Vi danh sch lin kt i cc thao tc nh tim kim, xa bo mt nt khoi danh sch
thc hin d dng hn nhng ng thi cng mt nhiu b nh hn v s lng cc lnh
thc hin mt thao tc trn danh sch lin kt i chc chn cng xp x gp i so vi danh
sch lin kt i.
Ngoi ra cn c mt loi danh sch lin kt khc c gi l danh sch lin kt vng
(circular-linked list).
Nt cui cng tro ti nt u tin
Danh sch lin kt vng c th l danh sch lin kt n hoc danh sch lin kt i
N c th c ci t vi mt u (head) c inh hoc thay i

26


Vic ci t danh sch lin kt c th khng cn thit s dung ti cc con tro. Thay
vo o chng ta co th s dung cc mng ci t cc danh sch lin kt, y chng ta
khng i su vo xem xt cu th ci t mt danh sch lin kt bng mng nh th no nhng
cng khng qu kho hnh dung cch thc hot ng cua cc danh sch kiu nh th.

Kt lun:
Danh sch lin kt l cc cu trc d liu rt ging vi cc mng
Cc thao tc chinh thng c s dung i vi mt danh sch lin kt l thm, xa
v tm kim trn danh sch
Thao tc chn v xa c th thc hin vi thi gian hng s
Vic tm mt phn t trong danh sch lin kt thng mt thi gian tuyn tnh (xp x
di danh sch) v trng hp xu nht l ng bng di cua danh sch. y cng chinh
l mt trong nhng nhc im ln nht cua danh sch lin kt.
2.3.5 M t s vi

du s

du ng c u tru

c danh sa

ch lin k t
Cc bi ton m danh sch lin kt thng c s dung l cc bi ton trong o vi c
s

du ng ma

ng se

la

khng thu n l i, ch ng ha n m t ba

i toa

n yu c u ca

c thao ta

c thm, xoa
bo xy ra thng xuyn thi la chn thng minh s l s dung danh sch lin kt . M t vi

du
n

a la

khi ta la

m vi c v

i ca

c thi tha (cc cnh it) l

n (nhng s i

nh nhi u), thay vi

du

ng
m t ma

ng hai chi u, ta se

du

ng m t ma

ng ca

c danh sa

ch lin k t, m i danh sa

ch lin k t ch

a
cc nh lin k cua mt nh cua thi.
2.3.6. Ci t stack va

queue b ng con tro


V ba

n ch t, cc cu trc d liu stack v queue l cc cu trc danh sch lin kt hn


ch , cc thao tc c gii hn so vi cu trc danh sch lin kt . Vi th co th coi mt stack
hay queue la

m t danh sa

ch lin k t, v co th li dung ci t bng con tro cua danh sch lin


k t ca

i t ca

c c u tru

c stack va

queue (s

du ng con tro

). Ph n na

y c la i xem nh
m t ba

i t p cu

a sinh vin.
2.4. Bi tp p dng
1. Vit khai bo v cc chng trinh con ci t danh sch bng mng. Dng cc
chng trinh con ny vit:
a. Chng trinh con nhn mt y cc s nguyn nhp t bn phim, lu tr no trong
danh sch theo th t nhp vo.
b. Chng trinh con nhn mt y cc s nguyn nhp t bn phim, lu tr no trong

27

danh sch theo th t ngc vi th t nhp vo.
c. Vit chng trinh con in ra mn hinh cc phn t trong danh sch theo th t cua
n trong danh sch.
2. Tng t nh bi tp 1. nhng ci t bng con tro.
3. Vit chng trinh con sp xp mt danh sch cha cc s nguyn, trong cc
trng hp:
a. Danh sch c ci t bng mng (danh sch c).
b. Danh sch c ci t bng con tro (danh sch lin kt).
4. Vit chng trinh con thm mt phn t trong danh sch co th t sao cho ta vn
co mt danh sch co th t bng cch vn dung cc php ton co bn trn danh sch
5. Vit chng trinh con tim kim v xoa mt phn t trong danh sch co th t.
6. Vit chng trinh con nhn vo t bn phim mt y s nguyn, lu tr no trong
mt danh sch co th t khng gim, theo cch sau: vi mi phn t c nhp vo chng
trinh con phi tim vi tri thich hp xen no vo danh sch cho dng th t. Vit chng trinh
con trn cho trng hp danh sch c ci t bng mng v ci t bng con tro v trong
trng hp tng qut (dng cc php ton c bn trn danh sch)
7. Vit chng trinh con loi bo cc phn t trng nhau (gi li duy nht 1 phn t)
trong mt danh sch co th t khng gim, trong hai trng hp: ci t bng mng v ci t
bng con tro.
8. Vit chng trinh con nhn vo t bn phim mt y s nguyn, lu tr no trong
mt danh sch co th t tang khng co hai phn t trng nhau, theo cch sau: vi mi phn t
c nhp vo chng trinh con phi tim kim xem no co trong danh sch cha, nu cha co
thi xen no vo danh sch cho ng th t. Vit chng trinh con trn cho trng hp danh
sch c ci t bng mng v ci t bng con tro.
9. Vit chng trinh con trn hai danh sch lin kt cha cc s nguyn theo th t
tng c mt danh sch cng co th t tng.
10. Vit chng trinh con xo khoi danh sch lu tr cc s nguyn cc phn t l s
nguyn l, cng trong hai trng hp: ci t bng mng v bng con tro.
11. Vit chng trinh con tch mt danh sch cha cc s nguyn thnh hai danh
sch: mt danh sch gm cc s chn con ci kia cha cc s l.




28

CHNG 3. CY (TREE).
3.1. i nh nghi

a
3.1.1. th (Graph)
Tr

c khi xem xe

t kha

i ni m th na

o la

m t cy (tree) chng ta nhc li khi nim thi


(graph) a

c ho c trong ho c ph n Toa

n r

i ra c : thi G bao gm hai thnh phn chinh: t p


cc nh V (Vertices) v tp cc cung E (hay ca nh Edges ), th

ng vi t

da ng G = <V, E>.
Trong o

t p ca

c i

nh V la

t p ca

c i t ng cu

ng loa i , c l p, ch ng ha n nh ca

c i m trn
m t ph ng to a , ho c t p ca

c tha

nh ph , t p ca

c tra ng tha

i cu

a m t tro

chi , m t i t ng
th c nh con ng

i , t t ca

u co

th la

ca

c i

nh cu

a m t thi na

o o

. T p ca

c cung E la


t p ca

c m i quan h hai ngi gi

a ca

c i

nh cu

a thi , i v

i i

nh la

ca

c i m thi

y co

th
l quan h v khoa

ng ca

ch, t p i

nh la

ca

c tha

nh ph thi

y co

th la

quan h v

ng i (co
t n ta i

ng i tr c ti p na

o gi

a ca

c tha

nh ph hay khng ), ho c n u i

nh la

ca

c tra ng tha

i
cua mt tro chi thi cnh co th l cch bin i (transform) i t trng thi ny sang mt
trng thi khc , qu trinh chi chinh l bin i t trng thi ban u ti trng thi ich (co
nghia l i tim mt ng i).
V d v th:

Hinh 5.1. thi co 6 i

nh va

7 cnh, tham kha

o t

wikipedia.
Co rt nhiu vn lin quan ti thi , phn ny chng ta chi nhc li mt s khi
ni m lin quan.
M t thi c go i la

n thi (simple graph) n u nh khng co

ng i gi

a hai
i

nh b t ky

cu

a thi bi l p la i , ng c la i n u nh co

ng i na

o o

bi l p la i ho c t n ta i
khuyn (self-loop), m t da ng cung i t

1 i

nh n chi

nh i

nh o

, thi thi c gi l a
thi (multigraph).
Gi

a hai i

nh u , v trong thi co

ng i tr c ti p thi

u , v c go i la

li n k v

i
nhau, cnh (u, v) c go i la

lin thu c v

i hai i

nh u, v.
thi c gi l thi co hng (directed graph) n u nh ca

ng i gi

a hai i

nh
b t ky

trong thi phn bi t h

ng v

i nhau, khi o

ca

c quan h gi

a ca

c i

nh c go i chi

nh
xc l cc cung , ng c la i n u khng phn bi t h

ng gi

a ca

c i

nh trong ca

c ca nh n i
gi

a hai i

nh thi thi c gi l thi v hng (undirected graph), khi o

ta no

i t p E la


t p ca

c ca nh cu

a thi .
Cc cung hay cc cnh cua thj co th c gn cc gi tri gi l cc trng s
(weight), m t thi co

th l thi co trng s hoc khng co trng s . Vi du nh i vi


thi m cc nh l cc thnh ph ta co th gn trng s cua cc cung l di ng i ni
gi

a ca

c tha

nh ph ho c chi phi

i trn con

ng o


M t

ng i (path) trong thi la

m t da

y ca

c i

nh v
1
, v
2
, , v
k
, trong o

ca

c i

nh v
i
,
v
i+1
l lin k vi nhau . ng i co nh u trng vi nh cui c gi l chu trinh
(cycle).
Gi

a hai i

nh cu

a thi co

th co cc ng i trc tip nu chng lin k vi nhau ,


ho c n u co

m t

ng i gi

a chu

ng (gin tip ) thi hai nh o c gi l lin thng


(connected) v

i nhau. M t thi c go i la

lin thng n u nh hai i

nh b t ky

cua no u

29

lin thng v

i nhau. N u thi khng lin thng thi

lun co

th chia no

tha

nh ca

c tha

nh ph n
lin thng nho

hn.
3.1.2. Cy (tree)
Co nhiu cch inh nghia cy khc nhau nhng y chng ta s inh nghia khi ni m
cy theo ly

thuy t thi (graph theory).


Cy la

m t thi v h

ng , khng co

tro ng s , lin thng va

khng co

chu tri

nh . Vi du
hinh v sau l mt cy:

Hinh 5.2. Cy, tham kha

o t

wikipedia
C u tru

c cy la

m t c u tru

c c s dung rt rng ri trong cuc sng hng ngy v


trn ma

y ti

nh, ch ng ha n c u tru

c t ch

c cu

a m t cng ty la

m t cy phn c p , c u tru

c cu

a
m t web site cu

ng tng t :

Hinh 5.3. C u tru

c web site wikipedia, tham kha

o t

wikipedia.
C u tru

c t ch

c th mu c cu

a h i u ha

nh la

m t cy
Trong cy lun co

m t nu

t c bi t go i la

g c cu

a cy (root), cc nh trong cy c
gi l cc nt (nodes). T

g c cu

a cy i xu ng t t ca

ca

c i

nh li n k v

i no

, cc nh ny
gi l con cua gc , n lt cc con cua gc li co cc nt con (child nodes) khc, nh v y
quan h gi

a hai nu

t li n k nhau trong cy la

quan h cha con , m t nu

t la

cha (parent), m t
nt l con (child), nt cha cua cha cua mt nt c gi l t tin (ancestor) cua nt o.
Cc nt trong cy c phn bit lm nhiu loi : cc nt co it nht 1 nt con c gi l
cc nt trong (internal nodes hay inner nodes), cc nu

t khng co

nu

t con c go i la

ca

c nu

t la


(leaf nodes ). Cc nt l khng co cc nt con nhng thun tin trong qu trinh ci t
ng

i ta v n coi ca

c nu

t la

co

hai nu

t con gia

, r ng (NULL) o

ng vai tro

li

nh canh, gi la

ca

c
nt ngoi (external nodes).
Cc nt trong cy c phn chia thnh cc tng (level), nt gc thuc tng 0 (level 0),
sau o

ca

c t ng ti p theo se

c tng ln 1 n vi so v

i t ng phi

a trn no

cho n t ng cu i
cng. cao (height) cua cy c tinh bng s tng cua cy , cao cu

a cy se

quy t i nh
ph

c ta p (s thao ta

c) khi th c hi n ca

c thao ta

c trn cy.
M i nu

t trong cu

a cy t ng qua

t co

th co

nhi u nu

t con , tuy nhin ca

c ngh in c

u cu

a
ngnh khoa hc my tinh cho thy cu trc cy quan trng nht cn nghin cu chinh l
cc cy nhi phn (binary tree), l cc cy l mi nt ch co nhiu nht hai nt con . M t cy
t ng qua

t lun co

th phn chia tha

nh ca

c cy nhi phn.

30

Cc nt con cua mt nt trong cy nhi phn c gi l nt con tri (left child) v nt
con pha

i (right child).
Trong chng na

y chu

ng ta se

nghin c

u m t s loa i cy nhi phn c ba

n va

ng
dung r ng ra

i nh t , o

la

cy ti

m ki m nhi phn BST (Binary Search Tree), cy bi u th

c
(expression tree hay syntax tree) v cy cn bng (balanced tree) AVL.
Hoc mt cch nh ngha khc (c thm)
Cy l mt tp hp cc phn t gi l nt (nodes) trong o co mt nt c phn bit
gi l nt gc (root). Trn tp hp cc nt ny co mt quan h, gi l mi quan h cha - con
(parenthood), xc dinh h thng cu trc trn cc nt. Mi nt, tr nt gc, co duy nht
mt nt cha. Mt nt co th co nhiu nt con hoc khng co nt con no. Mi nt biu din
mt phn t trong tp hp dang xt v no co th co mt kiu no o bt k, thng ta biu
din nt bng mt ki t, mt chi hoc mt s ghi trong vong tron. Mi quan h cha con
c biu din theo qui c nt cha dng trn nt con dng di v c ni bi mt
don thng. Mt cch hinh thc ta co th dinh nghia cy mt cch qui nh sau:
nh ngha
- Mt nt n dc l mt cy. Nt ny cng chinh l nt gc cua cy.
- Gi s ta co n l mt nt n c v k cy T1,.., Tk vi cc nt gc tng ng l n1,..,
nk thi co th xy dng mt cy mi bng cch cho nt n l cha cua cc nt n1,.., nk. Cy mi
ny co nt gc l nt n v cc cy T1,.., Tk c gi l cc cy con. Tp rng cng c coi
l mt cy v gi l cy rng ki hiu .
V d: Xt muc luc cua mt quyn sch. Muc luc ny co th xem l mt cy. Xt
cu trc th muc trong
tin hc, cu trc ny
cng c xem nh
mt cy.











Hnh III.1 - Cy muc luc mt quyn sch
Nu n
1
,.., n
k
l mt chi cc nt trn cy sao cho n
i
l nt cha cua nt n
i+1
, vi i=1..k-
1, thi chi ny gi l mt dng di trn cy (hay ngn gn l dng di ) t n
1
n n
k
. di
dng di c dinh nghia bng s nt trn dng di tr 1. Nh vy d di dng di t mt
nt n chinh no bng khng.
Nu co dng di t nt a n nt b thi ta noi a l tin bi (ancestor) cua b, con b gi l
hu du (descendant) cua nt a. R rng mt nt va l tin bi va l hu du ca chnh n.
Tin bi hoc hu du cua mt nt khc vi chinh no gi l tin bi hoc hu du thc s.
Trn cy nt gc khng co tin bi thc s. Mt nt khng co hu du thc s gi l nt l
(leaf). Nt khng phi l l ta con gi l nt trung gian (interior). Cy con cua mt cy l mt
nt cng vi tt c cc hu du cua no.
Chiu cao ca mt nt l d di dng di ln nht t nt o ti l. Chiu cao ca cy
l chiu cao cua nt gc. su ca mt nt l d di dng di t nt gc n nt o. Cc
nt co cng mt d su i ta gi l cc nt co cng mt mc i. Theo dinh nghia ny thi nt gc
mc 0, cc nt con cua nt gc mc 1.
V d: i vi cy trong hinh III.1 ta co nt C2 co chiu cao 2. Cy co chiu cao 3. nt
Sch
C1 C2
C3
1.1 1.2 2.2
2.1.1 2.1.2
2.1
3.2

31

C3 co chiu cao 0. Nt 2.1 co d su 2. Cc nt C1,C2,C3 cng mc 1.
Th t cc nt trong cy

Nu ta phn bit th t cc nt con cua cng mt nt thi cy gi l cy co th t, th
t qui c t tri sang phi. Nh vy, nu k th t thi hai cy sau l hai cy khc nhau:





Hnh III.2: Hai cy co th t khc nhau
Trong trng hp ta khng phn bit r rng th t cc nt thi ta gi l cy khng co
th t. Cc nt con cng mt nt cha gi l cc nt anh em rut (siblings). Quan h "tri sang
phi" cua cc anh em rut co th m rng cho hai nt bt k theo qui tc: nu a, b l hai anh
em rut v a bn tri b thi cc hu du cua a l "bn tri" mi hu du cua b.
3.3. Cy ti

m ki m nhi phn (Binary Search Tree - BST)


3.3.1. i nh nghi

a
M i nu

t trong cy b t ky

u ch

a ca

c tr

ng thng tin , trn m t cy ti

m ki m nhi phn
m i nu

t la

m t struct (bn ghi record) g m ca

c tr

ng: tr

ng d

li u data, tr

ng kho

a key
so snh vi cc nt khc, cc lin kt ti cc nt con cua nt left v right.
t p trung va

o ca

c v n thu t toa

n ta bo

qua tr

ng d

li u , ch xem nh mi nt
trn cy ti

m ki m nhi phn g m co

m t tr

ng kho

a key v hai trng lin kt left v right.


V

i ca

c gia

thi t trn ta i nh nghi

a cy ti

m ki m nhi phn nh sau:


Cy ti

m ki m nhi phn la

m t cy nhi phn (binary tree) m mi nt x trong cy thoa


mn bt ng thc kp sau:
( _ ( )) ( ) ( _ ( )) key left child x key x key right child x < <
Trong o

left _child(x), right_child(x) l cc nt con tri v phi cua nt x , key() l hm


tr v gi tri khoa nt tng ng.
Vi du:

Hinh 5.4. Cy ti

m ki m nhi phn BST, tham kha

o t

wikipedia.
Nhn xt:
- Trn cy BST khng c hai nt cng kho.
- Cy con cua mt cy BST l cy BST.
u i m chi

nh cu

a cy ti

m ki m nhi phn la

: no cung c p thu t toa

n s p x p va

ti

m
ki m d a trn ki u duy t th

t gi

a (in-order) m t ca

ch r t hi u qua

, v l cu trc d liu c
bn cho cc cu trc d liu cao cp hn (tr

u t ng hn) nh t p h p (set), cc mng lin k t


B C
A
C B
A

32

(associative array), cc nh x map, v cc cy cn bng ti u nh AVL , cy o

en. Chng
ta se

xem xe

t ta i sao cy ti

m ki m nhi phn la i hi u qua

nh v y.
3.3.2. Kh

i ta o cy rng
Thao ta

c u tin la

khai ba

o c u tru

c cy va

kh

i ta o m t cy r ng b t u th c hi n
cc thao tc khc.
y ta gi s cy tim kim nhi phn ch cha cc khoa l cc s nguyn dng .
Khai ba

o cy ti

m ki m nhi phn trong ngn ng

C nh sau:
// khai bao cau truc cay tim kiem nhi phan
typedef struct tree
{
int key;
struct tree *left,*right;
}BSTree;
kh

i ta o m t cy r ng ta khai ba

o g c cu

a cy va

ga

n cho g c o

b ng NULL :
// cay
BSTree **root;
*root = NULL;
3.3.3. Chen thm mt nt mi vo cy
che

n m t nu

t m

i va

o cy ta xu t pha

t t

g c cu

a cy , ta go i o

la

nu

t ang xe

t . N u
nh nu

t ang xe

t co

kho

a b ng v

i kho

a c n che

n va

o cy thi

xa

y ra hi n t ng tru

ng kho

a ,
thu t toa

n k t thu

c v

i thng bo trng khoa. N u nh nu

t ang xe

t la

m t nu

t ngoa

i (external
nodes) thi ta to mt nt mi v gn cc trng thng tin tng ng cho nt o , gn cc con
cua nt o bng NULL.
// them mot nut moi vao cay, gia tri khoa cua nut moi luu trong bien toan cuc newkey
void insert(BSTree **root)
{
if(*root==NULL)
{
*root=calloc(1,sizeof(BSTree));
(*root)->key = newkey;
(*root)->left=NULL;
(*root)->right=NULL;
}else{
if((*root)->key>newkey)
insert(&((*root)->left));
else
if((*root)->key<newkey)
insert(&((*root)->right));
else
printf("\nError: Duplicate key");
}
}
Thu t toa

n trn s

du ng b nh


O
(log n) trong tr

ng h p trung bi

nh va


O
(n) trong
tr

ng h p t i nh t . phc tp thut ton bng vi cao cua cy , t

c la

O(log n) trong
tr

ng h p trung bi

nh i v

i h u h t ca

c cy, nhng se

la


O
(n) trong tr

ng h p x u nh t.
Cng nn ch l cc nt mi lun c chen vo cc nt ngoi cua cy tim kim nhi
phn, g c cu

a cy khng thay i trong qua

tri

nh che

n thm nu

t va

o cy.

33

3.3.4. Xa bo khoi cy mt nt
Khi xo

a bo

m t nu

t X kho

i cy (d a trn gia

tri khoa), chng ta chia ra mt s trng


h p sau:
- X la

m t nu

t la

: khi o

vi c xo

a nu

t khng la

m a

nh h

ng t

i ca

c nu

t kha

c , ta chi

vi c
xoa bo nt o khoi cy.
- X chi

co

m t nu

t con (tri hoc phi ): khi o

ta a nu

t con duy nh t cu

a X ln thay
cho nu

t X va

xo

a bo

X.
- Con nu X l mt nt trong v co hai con, ta se

co

hai l a cho n, m t la

ti

m nu

t h u du
nho nht bn nhnh phi cua X (gi l Y), thay kho

a cu

a Y ln X va

xo

a bo

Y. Cch th

hai la


tim nt hu du ln nht bn nhnh tri cua X (gi l Z), thay kho

a cu

a Z ln X va

xo

a bo

Z .
Cc thao tc vi Y hoc Z c lp li tng t nh i vi X.
Hinh minh ha:

Hinh 5.5. Xoa nt trn cy BST, tham kha

o t

wikipedia
Do ca

c nu

t th c s bi xo

a trong tr

ng h p th

ba se

co

th ri va

o tr

ng h p 1 ho c 2
(l cc nt l hoc cc nt ch co 1 con), ng th

i nu

t bi xo

a se

co

kho

a nho

hn hai con cu

a
X nn trong ca

i t ta nn tra

nh chi

du ng m t phng pha

p , vi co th dn ti tinh hung
m t ti

nh cn b ng cu

a cy.
Vi c ca

i t thu t toa

n xo

a m t nu

t trn cy ti

m ki m nhi phn khng n gia

n nh vi c
m ta

thu t toa

n xo

trn . Tr

c h t ta se

xu t pha

t t

g c cu

a cy i ti

m nu

t ch

a kho

a
c n xo

a trn cy . Trong qua

tri

nh na

y i u quan tro ng la

ta xa

c i nh ro

nu

t c n xo

a (bi n p
trong oa n ma

chng tri

nh bn d

i ) l mt nt l, hay la

m t nt ch co mt con, hay la

nu

t
co y u c hai con. D trong trng hp no thi chng ta cng cn xc inh nt cha cua nt
p (nt q), v p l con tri hay con phi cua q . xa

c i nh ca

c tr

ng h p trn ta s

du ng m t
bi n c

f, f b ng 0 tng

ng v

i vi c nu

t c n xo

a la

g c cu

a cy , f b ng 1 tng

ng v

i p la


con pha

i cu

a q, v f bng 2 tng

ng v

i p la

con tra

i cu

a q.
Ci t bng C cua thao tc xoa mt nt khoi cy BST:
// xoa bo mot khoa khoi cay
void del(BSTree ** root, int key)
{
BSTree *p, *q, *r;
int f=0;
p = *root;
q = NULL;
while(p!=NULL&&p->key!=key)
{
q = p;
if(p->key<key)
{

34

f = 1;
p = p->right;
}
else
{
f = 2;
p = p->left;
}
}
if(p!=NULL)
{
if(p->right==NULL)
{
if(f==1)
{
q->right=p->left;
free(p);
}
else if(f==2)
{
q->left=p->left;
free(p);
}else
{
*root = p->left;
free(p);
}
}else
{
q = p->right;
r = NULL;
while(q->left)
{
r = q;
q = q->left;
}
p->key = q->key;
if(r==NULL)
p->right = q->right;
else
r->left = q->right;
free(q);
}
}
}
M c du

vi c xo

a cy khng pha

i lun o

i ho

i pha

i duy t t

g c xu ng th c hi n

m t
nt l nhng tinh hung ny lun co th xy ra (duy t qua t

ng nu

t t

i m t nu

t la

), khi o


ph

c ta p cu

a thu t toa

n xo

a cy tng ng v

i cao cu

a cy (tinh hung ti nht).


3.3.5. Tm kim trn cy
Vi c ti

m ki m trn cy nhi phn ti

m ki m gi ng nh khi ta thm m t nu

t m

i va

o cy .
D a trn kho

a ti

m ki m key ta xu t pha

t t

g c , gi nt ang xt l X. N u kho

a cu

a X b ng

35

v

i key, thi kt thc v tr v X . N u X la

m t nu

t l thi kt qu tr v NULL (cng chinh l


X). N u kho

a cu

a X nho

hn key thi

ta l p la i thao ta

c ti

m ki m v

i nu

t con pha

i cu

a X ,
ng c la i thi

ti n ha

nh ti

m ki m v

i nu

t con tra

i cu

a X.
phc tp cua thut ton n y b ng v

i ph

c ta p cu

a thu t toa

n che

n m t nu

t m

i
vo cy.
Ci t cua thut ton c li nh mt bi tp dnh cho cc bn c gi.
3.3.6. Duy t cy
Duy t cy (tree travel) l thao tc duyt qua (n thm) t t c cc nt trn cy.
Co nhiu cch duyt mt cy , ch ng ha n nh duy t theo chi u su (DFS), duy t theo
chi u r ng (BFS), nhng

y ta phn chia ca

c ca

ch duy t m t cy BST d a trn th

t n
thm nu

t g c, nt con tri, v nt con phi cua gc.


Cu th co ba cch duyt mt cy BST: duy t th

t tr

c, th

t gi

a, th

t sau.
minh ho a k t qua

cu

a ca

c ca

ch duy t cy ta xe

t cy vi

du sau :

Hinh 5.6. Cy ti

m ki m nhi phn, tham kha

o t

wikipedia
Duy t th

t tr

c (pre-order traversal):
- Thm g c (visit root).
- Duy t cy con tra

i theo th

t tr

c
- Duy t cy con pha

i theo th

t tr

c.
Cu th thut ton c ci t nh sau:
// duyet theo thu tu truoc
void pre_order(BSTree *node)
{
if(node!=NULL)
{
visit(node); // ham tham mot nut, don gian la in gia tri khoa
pre_order(node->left);
pre_order(node->right);
}
}
K t qua

duy t cy theo th

t tr

c: 8, 3, 1, 6, 4, 7, 10, 14, 13.


Trong ca

ch duy t theo th

t trc, g c cu

a cy lun c thm u tin.


Duy t th

t gi

a (in-order traversal):
- Duy t cy con tra

i theo th

t gi

a
- Thm g c

36

- Duy t cy con pha

i theo th

t gi

a.
K t qua

duy t cy theo th

t tr

c: 1, 3, 4, 6, 7, 8, 10, 13, 14.


M t i u d nh n th y la

ca

c kho

a cu

a cy khi duy t theo th

t gi

a xu t hi n theo th


t tng d n.
Duy t th

t sau (post-order traversal):


- Duy t cy con tra

i theo th

t sau
- Duy t cy con pha

i theo th

t sau
- Thm g c
K t qua

duy t cy theo th

t sau: 1, 4, 7, 6, 3, 13, 14, 10, 8.


Trong ca

ch duy t na

y, g c c thm sau cu

ng.
Nhn xt: - Khi duyt trung t (InOrder) cy BST ta c mt dy co th t tng.
Ci t bng C cua hai cch duyt sau c dnh cho cc bn c gi nh mt bi tp.
3.3.7. Ci t cy BST
Cy TKNP, trc ht, l mt cy nhi phn. Do o, ta co th p dung cc cch ci t
nh trinh by trong phn cy nhi phn. S khng co s khc bit no trong vic ci t cu
trc d liu cho cy TKNP so vi cy nhi phn, nhng tt nhin, s co s khc bit trong cc
gii thut thao tc trn cy TKNP nh tim kim, thm hoc xo mt nt trn cy TKNP
lun m bo tinh cht cu cy TKNP.
Mt cch ci t cy TKNP thng gp l ci t bng con tro. Mi nt cua cy nh l
mt mu tin (record) co ba trng: mt trng cha kho, hai trng kia l hai con tro tro
n hai nt con (nu nt con vng mt ta gn con tro bng NIL)
Khai bo nh sau
typedef <kiu d liu cua kho> KeyType;
typedef struct Node
{
KeyType Key;
Node* Left,Right;
}
typedef Node* Tree;
Khi to cy TKNP rng
Ta cho con tro qun l nt gc (Root) cua cy bng NULL.
void MakeNullTree(Tree *Root)
{
(*Root)=NULL;
}
Tm kim mt nt c kha cho trc trn cy TKNP
tim kim 1 nt co kho x trn cy TKNP, ta tin hnh t nt gc bng cch so snh
kho cua nt gc vi kho x.
- Nu nt gc bng NULL thi khng co kho x trn cy.
- Nu x bng kho cua nt gc thi gii thut dng v ta tim c nt cha kho x.
- Nu x ln hn kho cua nt gc thi ta tin hnh (mt cch qui) vic tim kho x
trn cy con bn phi.
- Nu x nho hn kho cua nt gc thi ta tin hnh (mt cch qui) vic tim kho x
trn cy con bn tri.
V d: tm nt c kho 30 trong cy trong hnh III.15
- So snh 30 vi kho nt gc l 20, vi 30 > 20 vy ta tim tip trn cy con bn phi,
tc l cy co nt gc co kho l 35.
- So snh 30 vi kho cua nt gc l 35, vi 30 < 35 vy ta tim tip trn cy con bn

37

tri, tc l cy co nt gc co kho l 22.
- So snh 30 vi kho cua nt gc l 22, vi 30 > 22 vy ta tim tip trn cy con bn
phi, tc l cy co nt gc co kho l 30.
- So snh 30 vi kho nt gc l 30, 30 = 30 vy n y gii thut dng v ta tim
c nt cha kho cn tim.
- Hm di y tr v kt qu l con tro tro ti nt cha kho x hoc NULL nu
khng tim thy kho x trn cy TKNP.
Tree Search(KeyType x,Tree Root)
{
if (Root == NULL) return NULL; //khng tim thy kho x
else if (Root->Key == x) /* tim thy kho x */
return Root;
else if (Root->Key < x) //tim tip trn cy bn phi
return Search(x,Root->right);
else
//tim tip trn cy bn tri
return Search(x,Root->left);
}
Cu hoi n tp:
Cy tim kim nhi phn c t chc nh th no qu trinh tim kim c
hiu qu nht?
Nhn xt: gii thut ny s rt hiu qu v mt thi gian nu cy TKNP c t chc
tt, ngha l cy tng i "cn bng". V ch d cy cn bng cc bn c th tham kho
thm trong cc ti liu tham kho ca mn ny.
Thm mt nt c kha cho trc vo cy TKNP
Theo dinh nghia cy tim kim nhi phn ta thy trn cy tim kim nhi phn khng co
hai nt co cng mt kho. Do o, nu ta mun thm mt nt co kho x vo cy TKNP th
trc ht ta phi tim kim xc dinh co nt no cha kho x cha. Nu co thi gii thut kt
thc (khng lm gi c!). Ngc li, s thm mt nt mi cha kho x ny. Vic thm mt
kho vo cy TKNP l vic tim kim v thm mt nt, tt nhin, phi m bo cu
trc cy TKNP khng bi ph v. Gii thut cu th nh sau:
Ta tin hnh t nt gc bng cch so snh khoa cu nt gc vi kho x.
- Nu nt gc bng NULL thi kho x cha co trn cy, do o ta thm mt nt mi
cha kho x.
- Nu x bng kho cua nt gc thi gii thut dng, trng hp ny ta khng thm nt.
- Nu x ln hn kho cua nt gc thi ta tin hnh (mt cch qui) gii thut ny trn
cy con bn phi.
- Nu x nho hn kho cua nt gc thi ta tin hnh (mt cch qui) gii thut ny trn
cy con bn tri.
V d: thm kho 19 vo cy trong hnh III.15
So snh 19 vi kho cua nt gc l 20, vi 19 < 20 vy ta xt tip n cy bn tri, tc
l cy co nt gc co kho l 10.
- So snh 19 vi kho cua nt gc l 10, vi 19 > 10 vy ta xt tip n cy bn phi,
tc l cy co nt gc co kho l 17.
- So snh 19 vi kho cua nt gc l 17, vi 19 > 17 vy ta xt tip n cy bn phi.
Nt con bn phi bng NULL, chng to rng kho 19 cha co trn cy, ta thm nt mi cha
kho 19 v nt mi ny l con bn phi cua nt co kho l 17, xem hinh III.16

Hnh III.16: Thm kho 19 vo cy hnh III.15

Thu tuc sau dy tin hnh vic thm mt kho vo cy TKNP.
void InsertNode(KeyType x,Tree *Root ){
if (*Root == NULL){ /* thm nt mi cha kho x */

38

(*Root)=(Node*)malloc(sizeof(Node));
(*Root)->Key = x;
(*Root)->left = NULL;
(*Root)->right = NULL;
}
else
if (x < (*Root)->Key)
InsertNode(x,Root->left);
else if (x>(*Root)->Key) InsertNode(x,Root->right);
}
Xa mt nt c kha cho trc ra khoi cy TKNP
Gi s ta mun xo mt nt co kho x, trc ht ta phi tim kim nt cha kho x trn
cy.
Vic xo mt nt nh vy, tt nhin, ta phi bo m cu trc cy TKNP khng bi ph
v. Ta co cc trng hp nh hinh III.17:
Hinh III.17 Vi du v gii thut xoa nt trn cy
- Nu khng tim thy nt cha kho x thi gii thut kt thc.
- Nu tim gp nt N co cha kho x, ta co ba trng hp sau (xem hinh III.17)
- Nu N l l ta thay no bi NULL.
- N ch co mt nt con ta thay no bi nt con cua no.
- N c hai nt con ta thay no bi nt ln nht trn cy con tri cua no (nt cc phi cua
cy con tri) hoc l nt b nht trn cy con phi cua no (nt cc tri cua cy con phi).
Trong gii thut sau, ta thay x bi kho cua nt cc tri cua cy con bn phi ri ta xo nt
cc tri ny. Vic xo nt cc tri cua cy con bn phi s roi vo mt trong hai trng hp
trn.
Gii thut xo mt nt c kho nho nht
Hm di dy tr v kho cua nt cc tri, dng thi xo nt ny.
KeyType DeleteMin (Tree *Root )
{
KeyType k;
if ((*Root)->left == NULL){
k=(*Root)->key;
(*Root) = (*Root)->right;
return k;
}
else return DeleteMin(Root->left);
}
Th tc xa mt nt c kho cho trc trn cy TKNP
void DeleteNode(key X, Tree *Root)
{
if ((*Root)!=NULL)
if (x < (*Root)->Key)
DeleteNode(x,Root->left)
else if (x > (*Root)->Key)
DeleteNode(x,Root->right) else
if ((*Root)->left==NULL)&&((*Root)->right==NULL)
(*Root)=NULL;
else
if ((*Root)->left == NULL)
(*Root) = (*Root)->right ;
else if ((*Root)->right==NULL)
(*Root) = (*Root)->left;

39

else (*Root)->Key = DeleteMin(Root->right);
}
3.4.Cy cn bng AVL
Trong khoa hc my tinh, mt cy AVL l mt cy tim kim nhi phn t cn bng, v l cu
trc d liu u tin co kh nng ny. Trong mt cy AVL, ti mi nt chiu cao cua hai cy
con sai khc nhau khng qu mt. Hiu qu l cc php chen (insertion), v xoa (deletion)
lun ch tn thi gian O(log n) trong c trng hp trung binh v trng hp xu nht. Php
b sung v loi bo co th cn n vic ti cn bng bng mt hoc nhiu php quay.
3.4.1. Cy nh phn cn bng hon ton
a. nh ngha
Cy cn bng hon ton l cy nhi phn tim kim m ti mi nt cua no, s nt cua cy con
tri chnh lch khng qu mt so vi s nt cua cy con phi.
b. nh gi
Mt cy rt kho t c trng thi cn bng hon ton v cng rt d mt cn bng vi khi
thm hay huy cc nt trn cy co th lm cy mt cn bng (xc sut rt ln), chi phi cn bng
li cy ln vi phi thao tc trn ton b cy.
Tuy nhin nu cy cn i thi vic tim kim s nhanh. i vi cy cn bng hon ton, trong
trng hp xu nht ta ch phi tim qua log
2
n phn t (n l s nt trn cy).
Sau y l vi du mt cy cn bng hon ton (CCBHT):

2
n. y chinh l l do cho php bo m kh nng tim
kim nhanh trn CTDL ny.
Do CCBHT l mt cu trc km n inh nn trong thc t khng th s dung. Nhng u im
cua no li rt quan trng. Vi vy, cn a ra mt CTDL khc co c tinh ging CCBHT
nhng n inh hn.
Nh vy, cn tim cch t chc mt cy t trng thi cn bng yu hn v vic cn bng li
ch xy ra phm vi cuc b nhng vn phi bo m chi phi cho thao tc tim kim t mc
O(log
2
n).
3.4.2. CY NH PHN CN BNG (AVL)

40

a. nh ngha:
Cy nhi phn tim kim cn bng l cy m ti mi nt cua no cao cua cy con tri v cua
cy con phi chnh lch khng qu mt.
Di y l vi du cy cn bng (lu , cy ny khng phi l cy cn bng hon ton):


D dng thy CCBHT l cy cn bng. iu ngc li khng ng.
b. Lch s cy cn bng (AVL Tree)
AVL l tn vit tt cua cc tc gi ngi Nga a ra inh nghia cua cy cn bng Adelson-
Velskii v Landis (1962). Vi l do ny, ngi ta gi cy nhi phn cn bng l cy AVL. T
nay v sau, chng ta s dng thut ng cy AVL thay cho cy cn bng.
T khi c gii thiu, cy AVL nhanh chong tim thy ng dung trong nhiu bi ton
khc nhau. Vi vy, no mau chong tr nn thinh hnh v thu ht nhiu nghin cu. T cy
AVL, ngi ta pht trin thm nhiu loi CTDL hu dung khc nh cy o-en (Red-
Black Tree), B-Tree,
c. Chiu cao ca cy AVL
Mt vn quan trng, nh cp n phn trc, l ta pji khng inh cy AVL n nt
phi co chiu cao khong log
2
(n).
nh gi chinh xc v chiu cao cua cy AVL, ta xt bi ton: cy AVL co chiu cao h s
phi co ti thiu bao nhiu nt ?
Gi N(h) l s nt ti thiu cua cy AVL co chiu cao h.

41

Ta c N(0) = 0, N(1) = 1 v N(2) = 2.
Cy AVL ti thiu co chiu cao h s co 1 cy con AVL ti thiu chiu cao h-1 v 1 cy con
AVL ti thiu chiu cao h-2. Nh vy:
N(h) = 1 + N(h-1) + N(h-2) (1)
Ta li co: N(h-1) > N(h-2)
Nn t (1) suy ra:
N(h) > 2N(h-2)
N(h) > 2
2
N(h-4)

N(h) > 2
iN
(h-2i)
h/2-1

2
(N(h)) + 2
Nh vy, cy AVL co chiu cao O(log
2
(n)).
Vi du: cy AVL ti thiu co chiu cao h=4

d. Cu trc d liu cho cy AVL
Ch s cn bng ca mt nt:
nh ngha: Ch s cn bng cua mt nt l hiu cua chiu cao cy con phi v cy con tri
cua no.
i vi mt cy cn bng, ch s cn bng (CSCB) cua mi nt ch co th mang mt trong ba
gi tri sau y:
CSCB(p) = 0 <=> cao cy tri (p) = cao cy phi (p)

42

CSCB(p) = 1 <=> cao cy tri (p) < cao cy phi (p)
CSCB(p) =-1 <=> cao cy tri (p) > cao cy phi (p)
tin trong trinh by, chng ta s k hiu nh sau:
p->balFactor = CSCB(p);
cao cy tri (p) k hiu l hL
cao cy phi(p) k hiu l hR
kho st cy cn bng, ta cn lu thm thng tin v ch s cn bng ti mi nt. Lc o,
cy cn bng co th c khai bo nh sau:
typedef struct tagAVLNode {
char balFactor; //Ch s cn bng
Data key;
struct tagAVLNode* pLeft;
struct tagAVLNode* pRight;
}AVLNode;
typedef AVLNode *AVLTree;
tin cho vic trinh by, ta inh nghia mt s hng s sau:
#define LH -1 //Cy con tri cao hn
#define EH -0 //Hai cy con bng nhau
#define RH 1 //Cy con phi cao hn
e. nh gi cy AVL
Cy cn bng l CTDL n inh hn hn CCBHT vi ch khi thm huy lm cy thay i chiu
cao cc trng hp mt cn bng mi co kh nng xy ra.
Cy AVL vi chiu cao c khng ch s cho php thc thi cc thao tc tim thm huy vi
chi ph O (log
2
(n)) v bo m khng suy bin thnh O(n).
f. Cc thao tc c bn trn cy AVL
Ta nhn thy trng hp thm hay huy mt phn t trn cy co th lm cy tng hay gim
chiu cao, khi o phi cn bng li cy. Vic cn bng li mt cy s phi thc hin sao cho
ch nh hng ti thiu n cy nhm gim thiu chi phi cn bng. Nh noi trn, cy cn

43

bng cho php vic cn bng li ch xy ra trong gii hn cuc b nn chng ta co th thc
hin c muc tiu va nu.
Nh vy, ngoi cc thao tc binh thng nh trn CNPTK, cc thao tc c trng cua cy
AVL gm:
Thm mt phn t vo cy AVL.
Hy mt phn t trn cy AVL.
Cn bng li mt cy va b mt cn bng.
g. CC TRNG HP MT CN BNG
Ta s khng kho st tinh cn bng cua 1 cy nhi phn bt k m ch quan tm n cc kh
nng mt cn bng xy rakhi thm hoc huy mt nt trn cy AVL.
Nh vy, khi mt cn bng, lch chiu cao gia 2 cy con s l 2. Ta co 6 kh nng sau:
Trng hp 1: cy T lch v bn tri (c 3 kh nng)

Trng hp 2: cy T lch v bn phi
Ta co cc kh nng sau:

44


Ta co th thy rng cc trng hp lch v bn phi hon ton i xng vi cc trng hp
lch v bn tri. Vi vy ta ch cn kho st trng hp lch v bn tri. Trong 3 trng hp
lch v bn tri, trng hp T1 lch phi l phc tp nht. Cc trng hp con li gii quyt
rt n gin.
Sau y, ta s kho st v gii quyt tng trng hp nu trn.
T/h 1.1: cy T1 lch v bn tri. Ta thc hin php quay n Left-Left

T/h 1.2: cy T1 khng lch. Ta thc hin php quay n Left-Left


45

T/h 1.3: cy T1 lch v bn phi. Ta thc hin php quay kp Left-Right
Do T1 lch v bn phi ta khng th p dung php quay n p dung trong 2 trng hp
trn vi khi o cy T s chuyn t trng thi mt cn bng do lch tri thnh mt cn bng do

Hinh v di y minh ha php quay kp p dung cho trng hp ny:

Lu rng, trc khi cn bng cy T co chiu cao h+2 trong c 3 trng hp 1.1, 1.2 v 1.3.
Sau khi cn bng, trong 2 trng hp 1.1 v 1.3 cy co chiu cao h+1; con trng hp 1.2
cy vn co chiu cao h+2. V trng hp ny cng l trng hp duy nht sau khi cn bng

Thao tc cn bng li trong tt c cc trng hp u co phc tp O(1).
Vi nhng xem xt trn, xt tng t cho trng hp cy T lch v bn phi, ta co th xy
dng 2 hm quay n v 2 hm quay kp sau:
//quay n Left-Left
void rotateLL(AVLTree &T)
{ AVLNode* T1 = T->pLeft;
T->pLeft = T1->pRight;
T1->pRight = T;
switch(T1->balFactor) {
case LH: T->balFactor = EH;

46

T1->balFactor = EH; break;
case EH: T->balFactor = LH;
T1->balFactor = RH; break;
}
T = T1;
}
//quay n Right-Right
void rotateRR(AVLTree &T)
{ AVLNode* T1 = T->pRight;
T->pRight = T1->pLeft;
T1->pLeft = T;
switch(T1->balFactor) {
case RH: T->balFactor = EH;
T1->balFactor = EH; break;
case EH: T->balFactor = RH; break;
T1->balFactor = LH; break;
}
T = T1;
}
//quay kp Left-Right
void rotateLR(AVLTree &T)
{ AVLNode* T1 = T->pLeft;
AVLNode* T2 = T1->pRight;
T->pLeft = T2->pRight;
T2->pRight = T;
T1->pRight = T2->pLeft;

47

T2->pLeft = T1;
switch(T2->balFactor) {
case LH: T->balFactor = RH;
T1->balFactor = EH; break;
case EH: T->balFactor = EH;
T1->balFactor = EH; break;
case RH: T->balFactor = EH;
T1->balFactor = LH; break;
}
T2->balFactor = EH;
T = T2;
}
//quay kp Right-Left
void rotateRL(AVLTree &T)
{ AVLNode* T1 = T->pRight;
AVLNode* T2 = T1->pLeft;
T->pRight = T2->pLeft;
T2->pLeft = T;
T1->pLeft = T2->pRight;
T2->pRight = T1;
switch(T2->balFactor) {
case RH: T->balFactor = LH;
T1->balFactor = EH; break;
case EH: T->balFactor = EH;
T1->balFactor = EH; break;
case LH: T->balFactor = EH;

48

T1->balFactor = RH; break;
}
T2->balFactor = EH;
T = T2;
}
thun tin, ta xy dng 2 hm cn bng li khi cy bi lch tri hay lch phi nh sau:
//Cn bng khi cy bi lch v bn tri
int balanceLeft(AVLTree &T)
{ AVLNode* T1 = T->pLeft;
switch(T1->balFactor) {
case LH: rotateLL(T); return 2;
case EH: rotateLL(T); return 1;
case RH: rotateLR(T); return 2;
}
return 0;
}
//Cn bng khi cy bi lch v bn phi
int balanceRight(AVLTree &T)
{ AVLNode* T1 = T->pRight;
switch(T1->balFactor) {
case LH: rotateRL(T); return 2;
case EH: rotateRR(T); return 1;
case RH: rotateRR(T); return 2;
}
return 0;
}

49

h. Thm mt phn t trn cy AVL
Vic thm mt phn t vo cy AVL din ra tng t nh trn CNPTK. Tuy nhin, sau khi
thm xong, nu chiu cao cua cy thay i, t vi tri thm vo, ta phi ln ngc ln gc
kim tra xem co nt no bi mt cn bng khng. Nu co, ta phi cn bng li nt ny.
Vic cn bng li ch cn thc hin 1 ln ti ni mt cn bng. (Ti sao ? Hd: ch nhng
kh nng mt cn bng c th)
Hm insert tr v gi tri 1, 0, 1 khi khng u b nh, gp nt c hay thnh cng. Nu sau khi
thm, chiu cao cy bi tng, gi tri 2 s c tr v:
int insertNode(AVLTree &T, DataType X)
{ int res;
if(T) {
if(T->key == X) return 0; // co
if(T->key > X) {
res = insertNode(T->pLeft, X);
if(res < 2) return res;
switch(T->balFactor) {
case RH: T->balFactor = EH;
return 1;
case EH: T->balFactor = LH;
return 2;
case LH: balanceLeft(T); return 1;
}
}else {
res = insertNode(T-> pRight, X);
if(res < 2) return res;
switch(T->balFactor) {
case LH: T->balFactor = EH;
return 1;

50

case EH: T->balFactor = RH;
return 2;
case RH: balanceRight(T); return 1;
}
}
}
T = new TNode;
if(T == NULL) return -1; //thiu b nh
T->key = X; T->balFactor = EH;
T->pLeft = T->pRight = NULL;
return 2; // thnh cng, chiu cao tng
}
i. Hy mt phn t trn cy AVL
Cng ging nh thao tc thm mt nt, vic huy mt phn t X ra khoi cy AVL thc hin
ging nh trn CNPTK. Ch sau khi huy, nu tinh cn bng cua cy bi vi phm ta s thc hin
vic cn bng li.
Tuy nhin vic cn bng li trong thao tc huy s phc tp hn nhiu do co th xy ra phn
ng dy chuyn. (Ti sao ?)
Hm delNode tr v gi tri 1, 0 khi huy thnh cng hoc khng co X trong cy. Nu sau khi
hu, chiu cao cy bi gim, gi tri 2 s c tr v:
int delNode(AVLTree &T, DataType X)
{ int res;
if(T==NULL) return 0;
if(T->key > X) {
res = delNode (T->pLeft, X);
if(res < 2) return res;
switch(T->balFactor) {
case LH: T->balFactor = EH;

51

return 2;
case EH: T->balFactor = RH;
return 1;
case RH: return balanceRight(T);
}
}
if(T->key < X) {
res = delNode (T->pRight, X);
if(res < 2) return res;
switch(T->balFactor) {
case RH: T->balFactor = EH;
return 2;
case EH: T->balFactor = LH;
return 1;
case LH: return balanceLeft(T);
}
}else { //T->key == X
AVLNode* p = T;
if(T->pLeft == NULL) {
T = T->pRight; res = 2;
}else if(T->pRight == NULL) {
T = T->pLeft; res = 2;
}else { //T c c 2 con
res=searchStandFor(p,T->pRight);
if(res < 2) return res;
switch(T->balFactor) {

52

case RH: T->balFactor = EH;
return 2;
case EH: T->balFactor = LH;
return 1;
case LH: return balanceLeft(T);
}
}
delete p;
return res;
}
}
//Tim phn t th mng
int searchStandFor(AVLTree &p, AVLTree &q)
{ int res;
if(q->pLeft) {
res = searchStandFor(p, q->pLeft);
if(res < 2) return res;
switch(q->balFactor) {
case LH: q->balFactor = EH;
return 2;
case EH: q->balFactor = RH;
return 1;
case RH: return balanceRight(T);
}
}else {
p->key = q->key;

53

p = q;
q = q->pRight;
return 2;
}
}
k. Nhn xt
Thao tc thm mt nt co phc tp O(1).
Thao tc huy mt nt co phc tp O(h).
Vi cy cn bng trung binh 2 ln thm vo cy thi cn mt ln cn bng li; 5 ln huy thi
cn mt ln cn bng li.
Vic hu 1 nt co th phi cn bng dy chuyn cc nt t gc cho n phn t bi hu trong
khi thm vo ch cn 1 ln cn bng cuc b.
di ng tim kim trung binh trong cy cn bng gn bng cy cn bng hon ton
log
2
n, nhng vic cn bng li n gin hn nhiu.
Mt cy cn bng khng bao gi cao hn 45% cy cn bng hon ton tng ng d
s nt trn cy l bao nhiu.
Bi tp
1. Vit chng trinh to cy BST vi thng tin ti mi nt l cc s nguyn
2. Vit chng trinh tim kim mt nt trong cy BST cu 1
3. Vit chng trinh xoa mt nt trong cy BST cu 1
4. Ci t hon thin cc hm cua cy AVL


54

CHNG 4. BNG BM (HASH TABLE)
Php bm l mt thut ton c xut v hin thc trn my tinh t nhng nm 50
cua th k 20. Thut ton ny da trn tng l chuyn i kho thnh mt s v s dung s
ny nh ch s cho bng d liu.
Nh chng ta bit cc php ton da trn cc cu trc nh cy, danh sch chu
yu c thc hin thng qua vic so snh cc phn t co cu trc. Do vy thi gian thc thi
lu v phu thuc vo kich thc cc phn t ny. khc phuc ngi ta a ra thut ton s
dung bng bm (Hash Table). Cc php ton trn bng bm co phc tp l O(1) v khng
phu thuc vo kich thc bng. Di y l mt s vn chinh m chng ta cn quan tm
trong bng bm :
- inh nghia bng bm.
- Hm bm v cc loi hm bm.
- Xung t v cch x l xung t
4. 1. nh ngha bng bm
4.1.1.nh ngha :
Bng bm l mt kiu d liu tru tng cho php lu tr d liu mt cch nhanh
chong v hiu qu. V thc cht bng bm l mt mng co ch s l bt c loi d liu no.
Trong khi mt mng thng thng yu cu ch s cua no phi l s nguyn thi ch s bng
bm li co th l mt s thc, mt xu, mt mng khc hay thm chi l mt dng cu trc d
liu. Cc ch s ny ngi ta gi chung l kho ( Key ) v ni dung ch inh bi cc ch s
ny gi l cc gi tri ( Value ).
Vy bng bm l mt cu trc d liu lu tr mt cp d liu Key/Value v cho php
tm Key mt cch nhanh chong.
Bng bm s dung mt hm cho php bin i bt k i tng no thnh ch s ph
hp cua mng. Hm ny c gi l hm bm (Hash Function)
Bng bm co th c m t nh sau:
- Gi K l tp cc kho.
- M l tp cc ia ch.
- HF(k) l hm bm dng nh x mt kho k t tp kho k thnh mt ch s trong tp
ia ch M.





55



Hnh 2.1 : M t v hm bm
Sau y l vi du v mt bng bm (Hm bm trong trng hp ny co dng : h(k) = k
mod 8 trong o k l kho).

Hnh 2.2 : Mt bng bm n gin



Trong bng bm nhiu kho co gi tri khc
nhau co th c bm thnh cng mt ch s cua mng. Hin tng ny gi l xung t v
gii quyt xung t chinh l muc tiu cua bt c bng bm no. Vn ny chng ta s cp
n trong phn 3 cua chng ny.
4.1.2.Kch thc ca bng bm :
Kich thc mt bng bm cho bit s muc vo ti a m bng bm co th lu tr c.
Thng thng cc gi tri cua kho c lu tr va u lp y bng nhng i khi cc gi tri
ny li vt qu gii hn cua mng. Gii php a ra l buc cc khong gi tri ny nm
trong gii hn kich thc cua bng.
Kich thc bng phi c lu tr mt cch ngu nhin vi cc phng php gii quyt
xung t trong bng bm co mt s iu kin v kich thc bng nht inh m bo thc
thi chinh xc. Tuy nhin hu ht cc trng hp kich thc bng bm thng c la chn
l lu tha cua 2 ( 2
n
)hay mt s nguyn t.
Bng bm co kich thc l lu tha cua 2 ch l mt k vng ln. Bi vi kich thc ny
cho php vic tinh ton ia ch c thc hin d dng hn v kt qu co c nhanh hn.
Cch buc cc gi tri nm trong khong lu tha cua 2 mt cch nhanh chong l s dung
hm mt n.
Kich thc bng bm thng c s dung l mt s nguyn t. Li do l vi cc php
bm nhin chung l kho hiu v cc php bm yu cu thm cc bc chia cua s nguyn t
c trn ln vi nhau. Mt khc mt s phng php x l xung t cng yu cu kiu kich
thc ny.
4.1.3. Phn loi :
Co rt nhiu loi bng bm khc nhau. Thng thng bng bm c phn loi theo
cu trc hoc theo cch x l xung t.
1.3.1.Phn loi theo cu trc :

56

Bng bm phn loi theo cu trc gm co :
- Bng bm ch nht.
- Bng bm tam gic (tam gic trn v tam gic di ).
- Bng bm ng cho.
Gi i, j l cc kho tng ng vi phn t hng i, ct j. Khi o mt phn t trong bng
bm c xc inh bi cp i, j.
a.Bng bm ch nht :
Mt phn t cua bng c xc inh bi kho i hng i v kho j hng j. Tng qut
vi tri cua phn t ny co th xc inh qua cng thc :
f(i,j) = n*i + j (n l s ct cua bng ch nht)




Bng bm hinh ch nht c m t bi mt danh sch k :
0 1 2 n-1 n n+1 m*n
b.Bng bm tam gic :
- Bng bm tam gic trn n ct:





- Bng bm tam gic di m hng:




Mi phn t trn bng tam gic tng ng vi hng i, ct j (i > j) v ia ch cua no c
xc inh qua hm bm :
f (i,j) = i*(i + 1)/2 + j
c.Bng bm ng cho :
Mt s loi bng bm ng cho co dng sau :
1.3.2.Phn loi theo cch x l xung t :

57

Bng bm phn loi theo cch ny gm :
- Bng bm s dung phng php ni kt trc tip
- Bng bm vi phng php ni kt hp nht
- Bng bm vi phng php do tuyn
- Bng bm vi phng php do cn bc 2
- Bng bm vi phng php bm kp
4.1.4.Cc php ton trn bng bm :
- Khi to (Initialize ): Khi to bng bm, cp pht vng nh, quy inh s phn t cua
bng ( kich thc cua bng ).
- Kim tra rng ( Empty ): Kim tra liu bng bm co rng hay khng.
- Ly kich thc bng bm (Size): Ly s phn t hin thi co trong bng bm.
- Tim kim ( Search ): Tim mt phn t theo mt kho k cho trc.
- Thm mi mt phn t ( Insert ): Chen thm mt phn t vo mt vi tri trng cua bng
bm.
- Xo ( Delete / Removal ): Loi bo mt phn t khoi bng bm.
- Sao chp (Copy ): To mt bng bm mi trn c s mt bng bm co.
- Duyt ( Traverse ): Duyt cc phn t cua bng theo mt th t nht inh.
4.2.Hm bm v cc loi hm bm :
4.2.1.Hm bm (Hash Function):
Hm bm l hm s dung nh x tp cc kho i din cho cc muc d liu trong
bng thnh ia ch ni cha muc d liu o.

Hnh 2.3 : M hnh hm bm

Kho trong bng bm co th l dng s hoc chui (
xu k t ). Nu kho l dng s thi trc khi p dung php bm ta phi la chn cc ch s,
gii hn gi tri, p dung cc thut ton. Cc kho dng s thng c chn co kiu s
nguyn.
Nu kho dng xu k t thi trc khi p dung php bm no cn c bin i thnh
dng ph hp ( Vi du ly gi tri m ASCII cua cc k t chng hn ), chn la nhng phn
c lp v co nghia nht trong kho v la chn mt hm bm ph hp nht vi cu trc
cua kho.
Hm bm c chia lm hai dng chinh : Dng bng tra v dng cng thc.
- Hm bm dng bng tra :

58

Gi s co bng tra co kho l b ch ci ting Anh.Bng co 26 ia ch co gi tri t 0..25.
Kho a ng vi ia ch 0, kho b ng vi ia ch 1 kho z ng vi ia ch 25.
Kho ia ch Kho ia ch Kho ia ch Kho ia ch
a 0 h 7 o 14 v 21
b 1 i 8 p 15 w 22
c 2 j 9 q 16 x 23
d 3 k 10 r 17 y 24
e 4 l 11 s 18 z 25
f 5 m 12 t 19
g 6 n 13 u 20

Bng 2.1 : Hm bm dng bng tra
- Hm bm dng cng thc : Hm bm dng cng thc thng co dng tng qut l
HF(k) trong o k l kho. Hm bm dng ny rt a dng v khng bi rng buc bi bt c
tiu chun no.
4.2.2.Mt s loi hm bm :
Mt hm bm tt phi tho mn mt s iu kin sau :
- Tinh ton nhanh chong v n gin.
- Cc kho phn b u trong bng.
- t xy ra xung t gia cc kho.
- Gi P(k) l xc sut kho k xut hin trong bng. Khi o vi mi i = 0, 1, , m
- 1 th ta c :


- Gi tri bm phi c lp vi bt c phn no cua d liu nghia l no phi ph hp
v co tinh ngu nhin.
Sau y l mt s hm bm n gin v ph bin.
2.2.1.Hm bm s dng phng php chia :
Hm bm ny co cc c im sau :
- Mt kho c nh x vo mt trong m cua bng thng qua hm:
HF(k) = k mod m
Trong o : k l kho, m l kich thc bng.
- Ch s dung php chia n do o tc tinh ton nhanh.
- Vn t ra l phi chn mt gi tri m ph hp.

= e
=
i k H k
m
k P
) (
1
) (

59

o m chn khng tt khi no co mt trong cc gi tri sau :
+ m = 2
P
, khi o h(k) s chn cng gi tri l p bit cui cua k.
+ m = 10
P
, khi o hm bm khng phu thuc vo tt c cc s thp phn cua kho.
+ m = 2
P
1. Nu kho l mt xu k t c dich thnh cc gi tri l lu tha cua 2, thi
hai xu co th c bm thnh cng mt gi tri ia ch trn bng.
o Gi tri cua m l tt khi no l mt s nguyn t v khng qu gn vi gi tri l lu
tha cua 2.
- Vi du v ci t mt hm bm s dung php chia :
Public Function Hash(ByVal Key As Long) As Long
Hash = Key Mod HashTableSize
End Function
2.2.2.Hm bm s dng phng php nhn :
Phng php nhn co hai bc :
- Kho k c nhn vi hng s A nm trong khong 0 < A < 1. Sau o ngi ta s s
dung phn phn s cua k*A.
- Phn phn s noi trn c nhn vi m sau o ly phn nguyn. Do o hm bm co
dng :
HF(k) = m * (k*A mod 1 )
Trong o : k l kho, m l kich thc bng, A l hng s.
Mt hm bm s dung php nhn mun co hiu qu cao phi la chn gi tri m v A
cho ph hp.
- m thng c chn l m = 2
p
.
- A c chn phu thuc vo c trng cua d liu. Mt gi tri A tt c xut co
gi tri l :
A = ) 2 / ) 5 1 /(( 1 + = 2 / ) 1 5 ( ~ 0.6180339887
- Vi du v ci t mt hm bm s dung php chia :
Private Const S As Long = 64
Private Const N As Long = 1023
Public Function Hash(ByVal Key As Long) As Long
Hash = ((K * Key) And N) \ S
End Function
2.2.3.Hm bm s dng php nghch o :
y l phng php trong o hm bm co dng :
HF(k) = A / ( B*k + C ) mod m

60

Trong o : k l kho, m l kich thc bng, A, B, C l cc hng s.
2.2.4.Hm bm s dng phng php cng xu :
bm mt xu co chiu di thay i, mi k t c thm vo xu s c chia ly
d cho 256 cho n tn k t cui cng. Gi tri bm, nm trong khong 0..255, c tinh nh
sau :
Public Function Hash(ByVal S As String) As Long
Dim h As Byte
Dim i As Long
h = 0
For i = 1 to Len(S)
h = h + Asc(Mid(S, i, 1))
Next i
Hash = h
End Function
2.2.5.Hm bm s dng phng php XOR xu :
Trong cc xu thng xut hin mt chui k t tng t nhau hay o ng. Do o
vic thc hin php XOR cc Byte trong xu s gip khc phuc hin tng ny v gip t
c cc gi tri bm nm trong khong 0..255. Kt qu cua mi php XOR to ra mt thnh
phn ngu nhin.
Private Rand8(0 To 255) As Byte
Public Function Hash(ByVal S As String) As Long
Dim h As Byte
Dim i As Long
h = 0
For i = 1 To Len(S)
h = Rand8(h Xor Asc(Mid(S, i, 1)))
Next i
Hash = h
End Function
2.2.6.Php bm ph qut (Universal Hashing):
Nh chng ta thy co nhiu loi hm bm khc nhau. Xong chng ta cn phi chn
c mt hm bm thich hp hn ch hin tng xung t gia cc kho. Gii php a ra
l s dung hm bm ph qut.
Bm ph qut nghia l chng ta chn ngu nhin mt hm bm h trong mt tp cc
hm bm H khi thut ton bt u. Hm bm c chn phi m bo :

61

- Co tinh cht ngu nhin.
- m bo cc kho it xy ra xung t.
Gi H l tp hu hn cc hm bm nh x mt tp cc kho U thnh cc gi tri nm
trong khong {0, 1, , m - 1}. H gi l ph qut nu :
- Mi cp kho ring bit x, y e U s hm bm h e H cho kt qu h(x) = h(y) l |H| /
m.
- Noi cch khc vi mi hm bm ngu nhin t H kh nng xung t gia x v y ( x=y
) chnh xc l 1/m( m l kich thc bng bm cho trc ).
Tp H s c xy dng nh sau :
- Chn kich thc bng m l mt s nguyn t.
- Phn tch kho x thnh r + 1 byte x co dng x = {x
1
, x
2
, ..., x
r
}.
- Gi tri ln nht cua chui sau khi phn tich < m.
- Gi o = {o
1
, o
2
,, o
r
} biu thi cho mt chui r + 1 phn t c chn trong khong
{0, 1,, m - 1}.
- Hm bm h e H tng ng c inh nghia nh sau :
h
o
(x) =
x a i
r
i
i

=0
mod m
Theo inh nghia trn H c m
r+1
phn t.
4.3.Xung t v cch x l xung t
4.3.1. nh ngha :
Xung t trong php bm c hiu l trng thi khi hai kho khc nhau c bm
thnh cng mt gi tri ia ch. Tng qut ta co:
k1 = k2 th ta ni k1 v k2 l hai kho xung t khi: HF(k1) = HF(k2)
4.3.2.H s ti (Load Factor - ) :
Gi s co bng bm co kich thc m vi n muc d liu. Khi o t s = n/m c
gi l h s ti. H s ti cho bit trng thi lp y cua bng. Vi du mt bng bm co h s
ti l 0.25 thi co nghia l bng bm ny s dung 25% kich thc bng lu d liu.
H s ti quyt inh xc sut xy ra tng tranh cua cc kho. Do o cn phi chn
mt h s ti thich hp gim thiu xung t. Gi tri cua h s ti thng c s dung l
nho hn hoc bng 30%.
4.3.3.Mt s phng php x l xung t :
Co hai cch tip cn chu yu gii quyt xung t : s dung bng bm ia ch m v
cu trc li bng bm.

62

gii quyt xung t thng qua bng bm ia ch m ngi ta co cc phng php :
do tuyn tinh, do cn bc hai, bm kp v bm li.
i vi cch tip cn thay i cu trc bng ngi ta co cc phng php : Moc ni
trc tip, s dung cc Bucket.
Ngoi ra i vi trng hp d liu co kich thc ln ngi ta co th s dung cc
phng php bm khc nh : bm li, bm m rng.
Di y l chi tit v cc phng php ny.
3.3.1.Bm theo a ch m (Open-adressing hashing) :
Bm theo ia ch m gii quyt xung t bng cch lu tt c cc muc d liu trong
chinh bng bm. Phng php ny kh thich hp khi chng ta co th c lng c s muc
vo. Khi o chng ta co th co u cc vi tri lu tt c cc muc trong bng (k c cc vi tri
s dung ngn cch) v vn gim c khng gian lu tr nhiu hn so vi phng php
moc ni.
Ngi ta inh nghia mt hm bm chung cho phng php bm theo ia ch m. Nh
vy hm bm lc ny gm co 2 tham s : kho k v s ln do tim p , trong o 0 s p s m-1.
Tham s p s dung gii hn s ln do v cho php chng ta bit khi no thut ton dng.
Sau y chng ta xt mt s phng php bm theo ia ch m cu th.
3.3.1.1.Phng php d tuyn tnh :
Do tuyn tinh l m hinh ia ch m n gin nht. Phng php ny gm cc thao
tc: tim kim, chen thm mt muc d liu.
Hm bm s dung cho phng php ny co dng :
h(k,p) = ( h(k) + p )mod m
Thao tc tim kim :
Khi xung t xy ra phng php ny n gin l do mt vi tri trng trong bng. tim
mt muc d liu trc ht ta phi thc hin bm kho cua muc d liu ny tim ra ch s
cua no trong bng. Nu muc d liu khng co ti vi tri cua ch s m chng ta thu c thi
chng ta bt u thc hin do theo tuyn ti vi tri ny. Co 3 kh nng co th xy ra :
1. Vi tri tip theo co cha muc d liu v tim kim kt thc thnh cng.
2. Vi tri tip theo trng, d liu khng tim thy, qu trinh tim kim kt thc khng thnh
cng.
3. Vi tri tip theo bi chim gi nhng cc kho li khng ph hp vi th vi tri tip theo
o s c do.
S cc vi tri cn do trong phng php ny phu thuc vo 2 yu t :
+ Hm bm c chn nh th no.
+ Bng s dung bao nhiu khng gian lu d liu.

63

Nu chng ta chn c mt hm bm thich hp v bng s dung khong 30% - 50%
thi s m bo c s vi tri cn do l nho nht co th.
Chng ta co mt vi du v cch ci t thao tc tim kim o l :
int jsw_find ( void *key, int len )
{
unsigned h = hash ( key, len ) % N;
void *save = table[h];
while ( table[h] != NULL ) {
if ( compare ( key, table[h] ) == 0 )
return 1;
h = ( h + 1 ) % N;
if ( compare ( table[h], save ) == 0 )
return 0;
}
return 0;
}
Thao tc chn :
chen thm mt muc mi chng ta cn thc hin :
- Tinh cc gi tri bm cho cc kho thng qua hm bm chn.
- Nu vi tri co gi tri bm co d liu thi thao tc do c thc hin t vi tri ny.
Thao tc do c thc hin cho n khi tim c mt vi tri trng. Thao tc ny s do tip vi
tri u nu no t n vi tri cui cua tuyn.
- Khi tim c mt trng thi muc d liu s c chen vo.
Thao tc ny co th ci t nh sau :
void jsw_insert ( void *key, int len )
{
unsigned h = hash ( key, len ) % N;
while ( table[h] != NULL )
h = ( h + 1 ) % N;
table[h] = key;
}
Thao tc xo :
Thao tc nay khng n gin nh hai thao tc trn. Vic xo trc tip mt muc khoi
bng l khn th vi cc php do tip theo o co th nhn ra cc kho bi bo i v nu mt
bucket rng c to ra trong khi mt buket khc vn y thi qu trinh tim kim co th khng

64

chinh xc. Nh vy thao tc xo co th ph v cu trc d liu cua bng. Gii php a ra l
khi xo mt kho trn mt on cua bucket thi ta li chen kho vo on tng t cua no.
Nhng cch ny dng nh kh phc tp.
Sau y l mt vi du v thao tc xo :
void jsw_remove ( void *key, int len )
{
unsigned h = hash ( key, len ) % N;
while ( table[h] != NULL )
h = ( h + 1 ) % N;
table[h] = DELETED;
}
nh gi :
Trong phng php ny cc kho co khuynh hng bi a vo cc on gi l Cluster
( bo cum ). iu ny co nghia l nhiu phn trong bng co th y ln nhanh chong trong khi
cc phn khc vn con trng. Do phng php ny cn s dung mt lng ln cc Bucket
rng nm xen k vi cc Bucket s dung nn vic bo cum s lm cho nhiu Bucket bi
duyt qua trc khi tim c mt Bucket rng. Vi vy thao tc tim kim s bi chm i v ko
theo cc thao tc chen v xo cng chm. Mt bng bm co h s ti cng ln thi kh nng bo
cum xy ra cng ln. Do o mt hm bm tt v kich thc bng l mt s nguyn t s ci
thin c vn ny.
3.3.1.2.Phng php d cn bc 2 :
khc phuc vn bo cum chinh ngi ta a ra phng php do cn bc hai.
Phng php ny s dung hm bm co dng :
h(k,p) = ( h(k) + c
1
p + c
2
p
2
) mod m
Cc gi tri c
1
, c
2
, m xc inh liu ton b bng co c s dung hay khng.
Thao tc tim kim :
Theo hm bm nh trn tim kim mt muc trong bng ngi ta s bt u t vi tri
u tin trong bng c xc inh bi hm bm, gi l vi tri i v tip tuc do ti cc vi tri i +
1
2
, i + 2
2
, , i + ( m - 1 )
2
( tt c u mod m ). C nh vy qu trinh tim kim c thc
hin cho n khi tim thy muc d liu trong bng ( kt thc thnh cng ) hoc gp mt vi tri
trng ( kt thc khng thnh cng ).
Thut ton s dung cho phng php ny co phn phc tp hn phng php do tuyn
tinh. Di y l vi du cu th :
int jsw_search ( void *key, int len )
{

65

unsigned h = hash ( key, len ) % N;
unsigned step;
for ( step = 1; table[h] != NULL; ++step ) {
if ( compare ( key, table[h] ) == 0 )
return 1;
h = ( h + step * step ) % N;
}
return 0;
}
Thao tc chn :
void jsw_insert ( void *key, int len )
{
unsigned h = hash ( key, len ) % N;
unsigned step;
for ( step = 1; table[h] != NULL; ++step )
h = ( h + step * step ) % N;
table[h] = key;
}
Thao tc xo :
void jsw_remove ( void *key, int len )
{
unsigned h = hash ( key, len ) % N;
unsigned step;
for ( step = 1; table[h] != NULL; ++step )
h = ( h + step * step ) % N;
table[h] = DELETED;
}
nh gi :
Phng php do theo cn bc hai gim ng k hin tng bo cum chinh. Tuy nhin vi
chui do tim lun bt u cng bucket ( mt cua bng) nn chng ta li gp phi hin
tng bo cum th cp ( Secondary Clustering ). y khng phi l mt hin tng ng quan
tm nh bo cum chinh. Nhng do phng php do cn bc hai ch hot ng khi h s ti <
0.5 v kich thc cua bng l mt s nguyn t nn hin tng ny li lm chm ng k tc
tim kim.

66

Noi chung phng php ny nhanh v trnh c hin tng bo cum chinh nhng li it
c s dung trong thc t vi s gii hn v thi gian. Phng php ny ch m bo hot
ng hiu qu khi kich thc bng l s nguyn t v dung lng bng s dung cha qu
mt na.
3.3.1.3.Phng php bm kp :
Phng php ny l mt gii php ng lu thay cho phng php do theo cn bc
hai. No co th khc phuc c hin tng bo cum chinh m khng chiu s gii hn no.
Phng php ny s dung hai hm bm c lp nhau. Hm bm th nht c s
dung nh binh thng ( theo mt trong hai phng php k trn ). Hm bm th hai c
s dung to ra kich thc bc do. Do bn thn kho co th xc inh c bc do nn
trnh c hin tng bo cum chinh. Phng php ny co thut ton kh n gin nhng co 2
iu cn ch m bo phng php ny hot ng chinh xc :
- Hm bm th hai khng c tr v gi tri 0 trnh hin tng lp v hn.
- Ging nh do theo tuyn, kich thc bng phi l mt s nguyn t hoc l mt gi tri
lu tha cua 2 vi kt qu hm bm th hai tr v l mt s l.
Nh vy cch ci t cho phng php ny cng tng t nh cc phng php bm
theo ia ch m khc. Mt vi du minh ho cu th l :
Thao tc tim kim :
int jsw_search ( void *key, int len )
{
unsigned h = hash ( key, len ) % N;
unsigned h2 = hash2 ( key ) % ( N - 1 ) + 1;
while ( table[h] != NULL ) {
if ( compare ( key, table[h] ) == 0 )
return 1;
h = ( h + h2 ) % N;
}
return 0;
}
Thao tc chn :
void jsw_insert ( void *key, int len )
{
unsigned h = hash ( key, len ) % N;
unsigned h2 = hash2 ( key ) % ( N - 1 ) + 1;
while ( table[h] != NULL )

67

h = ( h + h2 ) % N;
table[h] = key;
}
Thao tc xo :
void jsw_remove ( void *key, int len )
{
unsigned h = hash ( key, len ) % N;
unsigned h2 = hash2 ( key ) % ( N - 1 ) + 1;
for ( table[h] != NULL )
h = ( h + h2) % N;
table[h] = DELETED;
}
3.3.2.Cu trc li bng bm :
Phng php ny gii quyt xung t bng cch thay i cu trc cua bng bm. Theo
o mt vi tri co th cha c nhiu hn mt muc d liu. Sau y l mt s phng php
cu trc li bng bm.
3.3.2.1.S dng Bucket :
Trong phng php ny bn thn mi phn t trong bng bm l mt mng c gi
l ngn cha( Bucket ). Cc kho c bm v cng mt vi tri s c t trong cc ct tng
ng vi cc vi tri ny. Vi du :
0 1 2 3 4 5 6 7 8 9 10

K
1
k3 k5 k5 k7 k8

K
2
k4 k9


Bng 2.2 : M hnh mt Bucket
Gi s co hai kho k1, k2 l hai kho xung t. Kt qu sau khi bm hai kho ny l 2.
Vy ta xp k1 v k2 vo ct 1 tng ng vi vi tri th 2. Tng t nh vy nu kt qu bm
cc kho khc cho vi tri 2 thi cc kho s ln lt c xp vo ct ny.
Nh vy co th thy phng php ny cn nhiu khng gian lu tr hn thc t d
liu yu cu.
Trong phng php ny, tim mt kho nht inh ngi ta phi kim tra tt c cc
ct lin quan ti vi tri cua kho ny ( it nht l cho n khi chng ta tim c mt vi tri trng

68

). Nu cc kho co th t, chng ta nn lu cc kho theo trt t tng dn. Nh vy chng ta
co th loi bt cc ct cn kim tra. phc tp trung binh cua thao tc tim kim phu thuc
vo s vi tri trong Bucket c in. Do o khi no bng cha c in y khi o kh
nng xung t vn co th xy ra.
3.3.2.2.Phng php mc ni trc tip :
Theo phng php ny bng bm l mt mng cc danh sch lin kt. Phng php
ny t cc kho bi xung t vo cng mt danh sch lin kt ti vi tri l kt qu sau khi bm.
Mt bng bm theo phng php ny co th m t nh sau :


Hnh 2.3 : Bng bm theo
phng php mc ni


Vn t ra y l danh sch lin kt c cu trc nh th no. Khi vic tim kim
cua bng bm phu thuc vo vic tim kim trn danh sch lin kt thi mt danh sch c sp
xp l mt cu trc ng lu . Cu trc ny co hiu qu it hn vi thao tc chen v thao tc
tim kim thnh cng hoc khng thnh cng ( tinh trung binh ). Khi o mt na s danh sch
lin kt s c tim kim. Nu danh sch khng c sp xp thi mt ln tim kim khng
thnh cng co th duyt qua ton b cc danh sch lin kt.
Tuy nhin iu noi trn ch ng v mt l thuyt. Trn thc t con co nhiu thao tc
hn cn thit. Vi vi mt hm bm tt cc chui ( danh sch lin kt ) phi m bo u ngn
thy c s khc nhau gia danh sch c sp xp v danh sch cha c sp xp.
Chng ta gi s rng hu ht thi gian thc hin phng php ny s dung thc
hin so snh gia kho tim kim vi cc kho khc trong danh sch. Chng ta cng gi s
thi gian cn thit bm ti danh sch thich hp v xc inh khi no n vi tri cui cua danh
sch tng ng vi mt so snh.
Nh vy tt c cc thao tc cn 1 + S so snh (ln).
Gi s bng bm co kich thc m v c n muc c chen vo bng. Khi o mi danh
sch trung binh s cha n/m muc. y ta co th thy s muc trung binh trn mt danh sch
chinh l h s ti = n/m.
Sau y l mt s thao tc chinh cua phng php ny.
Thao tc tim kim :
Khi tim mt kho trong bng, kho s c bm v tr v kt qu l ch s ni co danh
sch lin kt s c tim kim. Nh vy hm bm s quyt inh phi tim danh sch no.

69

Khi tim kim thnh cng thut ton s thc hin bm v tim ti danh sch thich hp.
Tnh trung binh thi mt na s muc s c kim tra trc khi mt muc chinh xc c tim
thy. Do o thi gian tim kim l : 1 + /2.
Trong trng hp tim kim khng thnh cng, nu danh sch khng co trt t thi tt c
cc muc s c kim tra v thi gian tim kim l : 1 + .
Sau y l ci t cua thao tc ny :
struct jsw_node {
void *key;
struct jsw_node *next;
};
struct jsw_node *table[N];
int jsw_find ( void *key, int len )
{
unsigned h = hash ( key, len ) % N;
if ( table[h] != NULL ) {
struct jsw_node *it = table[h];

while ( it != NULL ) {
if ( compare ( key, it->key ) == 0 )
return 1;
it = it->next;
}
}
return 0;
}
Thao tc chn :
Chen vo mt danh sch lin kt n gin hn tim kim. Khi cn chen thm mt muc d
liu vo bng thi kho s c bm v cho kt qu l vi tri cua danh sch cn chen. Mt nt
s c thm vo danh sch ( to phn header cua nt nu cn thit ) sau o kho v gi tri s
c y vo phn trc cua nt ny.
Vic chen mt nt vo cui danh sch lin kt kh n gin. Nu mt nt c chen vo
phia u cua danh sch lin kt thi danh sch lin kt s c s dung nh mt ngn xp vi
tinh cht truy cp tun t. Trn thc t chen mt nt vo trc danh sch l cch n gin v
t hiu qu tt nht.Vi du v ci thao tc ny l :
int jsw_insert ( void *key, int len )

70

{
unsigned h = hash ( key, len ) % N;
struct jsw_node *it = malloc ( sizeof *it );
if ( it == NULL )
return 0;
it->key = key;
it->next = table[h];
table[h] = it;
return 1;
}

Thao tc xo :
Khi xo mt muc d liu thi cn thc hin thao tc tim kho c.
int jsw_remove ( void *key, int len )
{
unsigned h = hash ( key, len ) % N;
struct jsw_node *save;
if ( table[h] == NULL )
return 0;
if ( compare ( key, table[h]->key ) == 0 ) {
save = table[h]->next;
table[h]->next = table[h]->next;
free ( save );
}
else {
struct jsw_node *it = table[h];
while ( it->next != NULL ) {
if ( compare ( key, it->next->key ) == 0 )
break;
it = it->next;
}
if ( it->next == NULL )
return 0;
save = it->next;
it->next = it->next->next;

71

free ( save );
}
return 1;
}
nh gi :
Phng php moc ni trc tip l phng php x l xung t ph bin nht vi no kh
linh hot. Ni dung cua phng php ny n gin v no co mt s u im sau :
- Gii hn kich thc bng khng qu cng nhc.
- Vic thc thi trnh ti a hin tng xung t.
- Bng d dng x l cc kho trng lp.
- Thao tc xo n gin v co th thc hin thng xuyn.
Tuy nhin vic ci t phng php ny phc tp hn cc phng php khc. No cng
co mt s nhc im :
- Phi xy dng li bng khi vic thay i kich thc gp kho khn.
- S dung nhiu khng gian nh hn cho cc lin kt.
- Tc x l co th chm hn do s tham chiu qua li cua cc lin kt.
3.3.3.Cc phng php bm khc :
Bm li :
Chng ta thy rng tt c cc phng php trn ch hiu qu khi h s ti < 2/3, tc l
bng khng qu y. Khi bng bm bi lp y cc phng php ny khng con hiu qu na.
Gii php a ra l to ra mt bng mi co kich thc ln gp i bng ban u. Sau o tt c
cc kho s c bm li.
phc tp cua phng php ny l O(n) do o phng php ny ch s dung khi
kich thc d liu ln. C bit trong phng php do theo cn bc hai chng ta phi bm li
khi bng c s dung.
Bm m rng :
y l mt phng php h tr hu hiu cho vic s dung co hiu qu khng gian lu
tr.
4.3.4. nh gi :
Khi xy dng bng bm nu chng ta bit trc s muc d liu s c chen vo bng
thi m hinh bm theo ia ch m vi h s ti < s cho kt qu tt nht.
Mt khc nu chng ta khng bit trc co bao nhiu muc d liu c chen vo bng
thi phng php moc ni trc tip co hiu qu hn.

72

Khi h s ti tng s dung phng php bm theo ia ch m s gp nhng bt li chu
yu trong thc thi. Nhng i vi phng php moc ni hiu qu cua no ch bi gim tuyn
tinh khi h s ti tng. Do o nu khng chc chn v h s ti thi phng php c la
chn l phng php moc ni.
4.4.4.Kt lun :
Bng bm l mt cu trc d liu thich hp cho vic lu tr v tim kim d liu
khng co trt t. Tuy phi x l xung t nhng hu ht cc thao tc cua bng bm u d
thc hin v cc thao tc ny co hiu qu gn nh khng i trong hu ht cc trng hp.
Hm bm nh x cc kho d liu vo trong cc co sn cua bng. Mt bng bm co
hiu qu khi chng ta chn c mt hm bm tt. Vn ct yu l :
- S dung bng bm co kich thc l mt s nguyn t.
- S dung hm bm co th m bo cc kho c phn b u trong bng.Tuy nhin
ngay c trong trng hp chng ta chn c hm bm tt nht thi hin tng xung t vn
co th xy ra.
Bm theo ia ch m l mt trong cc phng php gii quyt xung t. Trong o :
- Phng php do tuyn tinh : s dung nu cc c duyt ton b v tim vi tri thnh
cng. Nhng phng php ny co th gy ra hin tng bo cum.
- Phng php do cn bc 2 : Phng php ny tt hn do co th gim xc sut xy ra
hin tng bo cum.
- H s ti nn < trnh lm gim hiu qu thc hin cua phng php.
Moc ni cng l mt bin php x l xung t hiu qu. Xong phng php ny oi hoi
khng gian lu tr ln.
4.5. Bi tp p dng
1. To cc bng bm cha cc s nguyn theo tng loi gii quyt xung t
2. To cc bng bm cha h tn sinh vin theo tng loi gii quyt xung t
3. To t in n gin
Mt s thi tham kho
1
Cu 1: Cho biu thc (a+b-c)*(d-e*f)-(x+y)/z
Hy v cy nhi phn tng ng v suy ra dng tin t v dng hu t cua biu thc o.
Cu 2:
a) Khai ba

o c u tru

c d

li u danh sa

ch lin k t n ch

a ca

c thng tin v nhn s g m co


cc trng thng tin:
- H v tn
- Thm nin cng ta

c (tinh theo nm)


- H s lng
- Lng c ba

n.
b) Vi t ha

m thm m t ba

n ghi ch

a thng tin nhn s cu

a m t ng

i va

o cu i danh sa

ch
a

khai ba

ph n a.

73

c) Vi t ha

m ti

nh xem co

bao nhiu nhn vin pha

i o

ng thu thu nh p bi t r ng lng


cua mt ngi trong mt thng c tinh bng cng thc : h s lng * lng c ba

n
+ thm nin * 200 (ngn ng) v ngi ong thu thu nhp l ngi co thu nhp 1
nm l

n hn 1000000000.
2
Cu 1:
a) Chen cc khoa sau l n l t va

o m t cy ti

m ki m nhi phn r ng: 20, 5, 1 17, 30, 24, 7,


18, 23, 9, 32, 25. Xoa khoi cy cc nt cha cc khoa sau: 24, 10, 7.
b) Khai ba

o c u tru

c cy nhi phn ch

a ca

c thng tin nh

ph n a cu

a cu 2 v vit hm
duy t cy theo th

t tr

c.
Chuy n bi u th

c trung t sau tha

nh cy bi u th

c : x*y + z*(t-u). Trong o

z, y, z, t, u la

ca

c
bi n (ton hng).
Cu 2:
Khai ba

o danh sa

ch lin k t n ch

a ca

c tr

ng thng tin v m t kha

ch ha

ng nh
sau:
- M khch hng,
- H v tn khch hng,
- S i n thoa i cu

a kha

ch ha

ng (13 ch

s ).
a) Vi t ha

m co

input la

danh sa

ch a

c khai ba

ph n a va

m t xu sdt la

m t ph n
s i n thoa i trong tr

ng i n thoa i cu

a m t kha

c h ha

ng na

o o

. Vi t ha

m tra

v nu

t
u tin trong danh sa

ch lin k t co

ph n u tr

ng s i n thoa i tru

ng v

i xu sdt.
b) Vi t ha

m s p x p danh sa

ch kha

ch ha

ng trn theo chi u tng d n cu

a tn kha

ch ha

ng.
3
Cu 1:
a) Hy chen cc khoa sau vo mt cy tim kim nhi phn rng m cc nt cha cc s
nguyn: 17, 4, 19, 27, 7, 18, 8, 30, 15. Xoa khoi cy ln lt cc nt cha cc khoa :
19, 8, 17.
b) Chuy n bi u th

c trung t sau tha

nh bi u th

c ti n t : 12 7*(3+9 2*5).
c) Hy khai bo cu trc cy tim kim nhi phn cha cc trng thng tin v sinh vin
nh sau:
- M sinh vin,
- H v tn,
- i m trung bi

nh.
trong o

ma

sinh vin la

tr

ng kho

a.
Vi t ha

m che

n thm m t sinh vin vo cy va khai bo.


Cu 2:
a) Khai ba

o danh sa

ch lin k t n ch

a ca

c s th c.
b) Vi t ha

m a

o ng c danh sa

ch lin k t n ch

a ca

c s th c c khai ba

ph n a.
c) Vi t ha

m s p x p danh sa

ch s th c trn theo chi u tng d n.


4:
Cu 1:
a) Hy chen cc khoa sau vo mt cy tim kim nhi phn rng m cc nt cha cc s
nguyn: 20, 17, 29, 15, 80, 6, 19, 51, 32. Xoa khoi cy ln lt cc nt cha cc khoa :
29, 20, 17.
b) Chuy n bi u th

c trung t sau tha

nh bi u th

c h u t :
5 * ( 2 + 3 ) 2 * ( 15 - 10 ) + 21.
c) Hy khai bo cu trc cy tim kim nhi phn cha cc trng thng tin v nhn s
nh sau:
- H v tn
- M nhn vin

74

- Lng
trong o

ma

nhn vin la

tr

ng kho

a.
Vi t ha

m tinh trung binh cng lng cua cc nhn vin trong mt cy va khai bo.
Cu 2:
a) Khai ba

o danh sa

ch lin k t n ch

a ca

c tr

ng thng tin v ha

ng ho

a nh sau:
- Tn m t ha

ng
- Gi mt hng
- S l ng co

n trong kho
b) Hy ci t hm s p x p danh sa

ch trn theo chi u tng d n cu

a gia

m t ha

ng , n u
cng gi thi theo tn.
c) Vi t ha

m nh n input la

m t danh sa

ch c khai ba

o nh trn va

hai s nguyn dng


x < y, in ra tn ca

c m t ha

ng co

s l ng co

n trong kho l

n hn x va

nho

hn y.
5:
Cu 1:
a) Khai ba

o danh sa

ch lin k t n ch

a ca

c tr

ng thng tin v ph n m m nh sau:


- Tn ph n m m
- Dung l ng (tinh bng Mb)
- i a chi

download
b) Hy ci t hm thm mt phn t vo cui danh sch trn.
c) Vi t ha

m ti

nh dung l ng trung bi

nh cu

a ca

c ph n m m trong danh sa

ch lin k t trn.

Cu 2:
a) Hy chen cc khoa sau vo mt cy tim kim nhi phn rng m cc nt cha cc s
nguyn: 19, 7, 1, 9, 25, 21, 70, 30, 8. Xoa khoi cy nt gc. a ra k t qua

duy t cy
theo th

t tr

c va

th

t sau.
b) Chuy n bi u th

c h u t sau tha

nh bi u th

c ti n t va

ti

nh gia

tri cu

a no

:
11 2 3 * + 4 5 * 8 + 7 / +
c) Hy khai bo cu trc cy tim kim nhi phn ch

a ca

c tr

ng thng tin v nhn s


nh sau:
- H v tn
- M nhn vin
- Lng
trong o

ma

nhn vin la

tr

ng kho

a.
Vi t ha

m ti

m nu

t ch

a thng tin v nhn vin co

lng th p nh t.





75

TI LIU THAM KHO.
1. inh Mnh Tng, Cu trc d liu v thut ton, NXB i hc Quc gia H
ni, 2002
2. Xun Li, Cu trc d liu v gii thut, NXB Khoa hc v K thut, 1997
3. Nguyn Quc Lng, Hong c Hi ,Cu trc d liu + gii thut = chng
trnh, NXB Gio duc, 1996
4. Hoare, C.A.R, Note on date Structuring in structured Programming Dahl,
Dijkstra, and Hoare, pp 83-174.
5. Robert Sedgewick , Cm nng thut ton, NXB KH K thut, 2000

You might also like