You are on page 1of 94

Cu trc d liu - B mn CNPM Khoa CNTT HTN

1
LI NI U

p ng nhu cu hc tp ca cc bn sinh vin, nht l sinh vin
chuyn ngnh cng ngh thng tin, chuyn ngnh tin hc kinh t, chuyn
ngnh in t Vin thng cc tc gi B mn Cng ngh phn mm - Khoa
Cng Ngh Thng Tin - Trng i hc Thi nguyn chng ti tin
hnh bin son tp cc bi ging chnh trong chng trnh hc o to theo
tn ch. Bi gi ng mn Cu Trc D Liu v Thut ton ny c bin
son c bn da trn quyn: Cu trc d liu & thut ton ca tc gi
inh Mnh Tng, Nh xut bn Khoa hc v K thut. Cu trc d liu v
gii thut, ca tc gi Xun Li, Cu trc d liu + gii thut= Chng
trnh ca N. Wirth. Gio trnh ny cng c bin son da trn kinh
nghim ging dy nhiu nm mn Cu Trc D Liu v Gii Thut ca chng
ti.
Ti liu ny c son theo cng chi tit mn Cu Trc D Liu
v t hut t on ca sinh vin chuyn ngnh Cng ngh thng tin ca
Khoa Cng Ngh Thng Tin - Trng i Hc Thi nguyn. Mc tiu ca n
nhm gip cc bn sinh vin chuyn ngnh c mt ti liu c ng dng lm
ti liu hc tp, nhng chng ti cng khng loi tr ton b cc i tng
khc tham kho. Chng ti ngh rng cc bn sinh vin khng chuyn tin v
nhng ngi quan tm ti cu trc d liu v gii thut s tm c trong
ny nhng iu hu ch.
Mc d rt c gng nhiu trong qu trnh bin son gio trnh nhng
chc chn gio trnh s cn nhiu thiu st v hn ch. Rt mong nhn
c s ng gp kin qu bu ca sinh vin v cc bn c tp bi
ging ngy mt hon thin hn v c th tr thnh mt gio trnh thc s
hu ch.

Thi nguyn, 10 / 2009
Cc tc gi

Cu trc d liu - B mn CNPM Khoa CNTT HTN
2
MC LC
PHN TNG QUAN .......................................................................................... 5
Chng 1 M U ........................................................................................... 7
1. 1 T bi ton n chng trnh ...................................................................................... 7
1.2 Cc khi nim c bn .................................................................................................. 11
1.2.1 M hnh d liu ( Data model ) ........................................................................... 11
1.2.2. Khi nim tru tng ha ................................................................................... 13
1.2.3 Kiu d liu tru tng ....................................................................................... 14
1.2.4 D liu .................................................................................................................... 14
1.2.5 Biu din d liu trn my tnh ........................................................................... 14
1.2.6 Kiu d liu ........................................................................................................... 14
1.2.7 Cu trc d liu (Data Structures) ..................................................................... 16
1.2.8 Gii thut ............................................................................................................... 18
1.2.6 Mi quan h gia cu trc d liu v gii thut ................................................ 18
1.3. Phn tch gii thut ................................................................................................... 19
1.3.1 S cn thit phi phn tch gii thut...................................................................... 19
1.3.2 Thi gian thc hin ca gii thut .......................................................................... 20
1.3.3 Khng gian ca gii thut .................................................................................... 23
1.4 Ngn ng din t gii thut ...................................................................................... 23
1.5. quy v gii thut ............................................................................................... 24
1.5.1 Khi nim quy .................................................................................................. 24
1.5.2 Gii thut quy v th tc quy .................................................................... 24
Chng 2 M HNH D LIU DANH SCH ........................................... 26
2.1 Danh sch (List) ........................................................................................................... 26
21.1 Khi nim danh sch ............................................................................................. 26
2.1. 2. Cc php ton c bn trn danh sch ............................................................... 27
2.1.3 Biu din (ci t) danh sch trn my tnh ...................................................... 28
2.1.3.1 Danh sch ci t bng mng ......................................................................... 28
2.1.3.2 Danh sch ci t bi con tr ......................................................................... 33
2.2 Ngn xp (Stack) v ng dng..................................................................................... 41
2.2.1. nh ngha ngn xp ............................................................................................ 41
2.2.2 Cc php ton c bn trn ngn xp: .................................................................. 42
2.2.3. Ci t ngn xp ................................................................................................... 42

Cu trc d liu - B mn CNPM Khoa CNTT HTN
3
2.2.4. ng dng ngn xp .............................................................................................. 43
2.3. Hng i (QUEUE) ................................................................................................ 44
2.3.1. nh ngha hng i ............................................................................................ 44
2.3.2 Cc php ton c bn trn hng .......................................................................... 44
2.3.3 Ci t hng i .................................................................................................... 45
2.3.3.1 Ci t hng bng mng .................................................................................. 45
2.3.3.2. Ci t hng bng danh sch lin kt (ci t bng con tr) ........................ 48
2.3.4. Mt s ng dng ca cu trc hng .................................................................... 49
Chng 3 M hnh d liu Cy ...................................................................... 50
3.1 Cy tng qut ............................................................................................................... 50
3.1.1 nh ngha cy v cc khi nim c bn trn cy .............................................. 50
3.1.2 Cc php ton c bn trn cy ............................................................................ 51
3.1.3 Cc cch thm ( duyt) cy .................................................................................. 51
3.1.4. Ci t cy ............................................................................................................ 55
3.1.4.1 Biu din cy bng danh sch cc con ca mi nh .................................... 55
3.1.4.2 Biu din cy bng con trng v em lin k ca mi nh .......................... 58
3.1.4.3 Biu din cy bi cha ca mi nh ................................................................ 60
3.2 Cy nh phn (binary tree) ......................................................................................... 62
3.2.1 nh ngha ............................................................................................................. 62
3.2.2. Duyt cy nh phn .............................................................................................. 63
3.2.3 Ci t cy nh phn ............................................................................................. 65
3.2.4 Cc php ton c bn trn cy nh phn ............................................................ 65
3.3 Cy tm kim nh phn (binary search tree) ............................................................. 68
3.3.1 nh ngha cy TKNP .......................................................................................... 68
3.3.2 Ci t cy tm kim nh phn ............................................................................ 69
3.3.3 Cc php ton c bn trn cy tm kim nh phn ............................................ 69
CHNG 4 M hnh d liu th (Graph) .......................................... 75
4.1 nh ngha th v cc khi nim ............................................................................ 75
4.2 Cc php ton c bn trn th ................................................................................ 76
4.3 Biu din th ............................................................................................................ 77
4.3.1. Biu din th bng ma trn k ........................................................................ 77
4.3.2. Biu din th bng danh sch cc nh k ..................................................... 77
4.4 Cc php duyt th (TRAVERSALS OF GRAPH) .......................................... 78
4.4.1. Duyt theo chiu su (depth-first search) ........................................................... 78
4.4.2. Duyt theo chiu rng (breadth-first search) ..................................................... 78

Cu trc d liu - B mn CNPM Khoa CNTT HTN
4
4.4. Mt s bi ton ng dng trn th: .................................................................. 78
Chng 5 M hnh d liu Tp hp ............................................................. 79
5.1. Khi nim tp hp....................................................................................................... 79
5. 2 M hnh d liu tp hp ............................................................................................. 80
5.3 Ci t tp hp v ci t cc php ton trn tp hp ........................................... 80
5.3.1.Ci t tp hp bi vect bit ............................................................................... 81
5.3.2 Ci t tp hp bi mng .................................................................................... 82
5.3.3 Ci t bi danh sch lin kt hoc danh sch c sp .................................. 82
5.5 T in (Dictionary) ................................................................................................... 85
5.5.1 T in l g? ......................................................................................................... 85
5.5.2 Cc phng php ci t t in ........................................................................ 85
5.5.3 Cu trc d liu Bng bm, ci t t in bi bng bm ............................... 85
5.5.3.1. Ci t t in bng bng bm m .............................................................. 86
5.5.3.2. Ci t t in bng bng bm ng ........................................................... 90
5.5.3.3 Cc phng php xc nh hm bm ............................................................. 93


Cu trc d liu - B mn CNPM Khoa CNTT HTN
5
PHN TNG QUAN
1. Mc ch yu cu
Mn hc cu trc d liu cung cp cho sinh vin mt khi lng ln cc kin
thc c bn v cc cu trc d liu v cc php ton trn tng cu trc .
Sau khi hc xong mn ny, sinh vin cn phi:

- Nm vng khi nim kiu d liu, kiu d liu tru tng, m hnh d
liu, gii thut v cu trc d liu

- Nm vng v ci t c cc m hnh d liu, kiu d liu tru
tng c bn nh danh sch, ngn xp, hng i, cy, tp hp, bng
bm, th bng mt ngn ng lp trnh cn bn.

- Vn dng c cc kiu d liu tru tng, cc m hnh d liu
gii quyt bi ton n gin trong thc t.

2. i tng s dng

Mn hc cu trc d liu c dng ging dy cho cc sinh vin sau:

- Sinh vin chuyn ngnh cng ngh thng tin (mn bt buc )

- Sinh vin chuyn ngnh tin hc kinh t (mn bt buc)

- Sinh vin chuyn ngnh in t - Vin thng v t ng ha (mn bt
buc)

3. Ni dung ct li
Ni dung gio trnh gm 5 chng v uc trnh by trong 45 tit cho
sinh vin, trong c khong 30 tit l thuyt v 15 tit bi tp m gio vin s
hng dn cho sinh vin trn lp. Bn cnh ti liu ny cn c ti liu thc
hnh cu trc d liu, do vy ni dung gio trnh ch trng v cc cu trc d
liu v cc gii thut trn cc cu trc d liu .
Chng 1:
Trnh by cch tip cn t mt bi ton n chng trnh, n bao gm
m hnh ho bi ton, thit lp cu trc d liu theo m hnh bi ton, vit
gii thut gii quyt bi ton v cc bc tinh ch gii thut a n ci t
c th trong mt ngn ng lp trnh
Chng 2:
Trnh by m hnh d liu danh sch, cc cu trc d liu ci t
danh sch, chng ti tp trung trnh by cu trc danh sch lin kt n, v cu
trc danh sch lin kt kp cho nhng bi ton cn duyt danh sch theo 2 chiu
xui, ngc mt cch thun li. Ngn xp v hng i cng c trnh by
trong chng ny nh l hai cu trc danh sch c bit. Chng ny c
nhiu ci t tng i chi tit cc bn sinh vin mi tip cn vi lp
trnh c c hi nng cao kh nng lp trnh trong ngn ng C ng thi cng
nhm minh ho vic ci t mt kiu d liu tru tng trong mt ngn ng
lp trnh c th.

Cu trc d liu - B mn CNPM Khoa CNTT HTN
6
Chng 3:
Chng ny gii thiu v kiu d liu tru tng cy, khi nim cy
tng qut, cc php duyt cy tng qut v ci t cy tng qut. K n chng
ti trnh by v cy nh phn, cc cch ci t cy nh phn. Cui cng, chng
ti trnh by cy tm kim nh phn nh l mt cu trc dng lu tr v tm
kim d liu hiu qu.
Chng 4:
Trnh by m hnh d liu th, cc cch biu din th hay l ci t
th. y chng ti cng trnh by cc php duyt th bao gm
duyt theo chiu rng v duyt theo chiu su mt th v cp mt s
bi ton thng gp trn th nh l bi ton tm ng i ngn
nht, bi ton tm cy khung ti thiu. . Do hn ch v thi lng ln
lp nn chng ny chng ti ch gii thiu sinh vin tham kho thm v
cch ci t th v cc bi ton trn th.
Chng 5:
. Do hn ch v thi lng ln lp nn chng ti Chng ny Chng
ny dnh ni v m h nh d liu t p hp, cc cch n gin ci t
tp hp nh ci t bng vect bt hay bng danh sch... Phn chnh ca
chng ny trnh by kiu d liu tru tng t in, l tp hp vi ba php
ton thm, xo v tm kim phn t, cng vi cc cu trc lu tr thch hp
cho n l bng bm.

4. Kin thc tin quyt

hc tt mn hc cu trc d liu ny, sinh vin cn phi c cc kin thc c
bn sau:
- Kin thc v k nng lp trnh cn bn.

- Kin thc ton ri rc.

5. Danh mc ti liu tham kho

[1] Aho, A. V. , J. E. Hopcroft, J. D. Ullman. "Data Structure and
Algorihtms", Addison Wesley; 1983
[2] Xun Li . "Cu trc d liu v gii thut". Nh xut bn khoa hc v
k thut. H ni, 1995.
[3] inh Mnh Tng, Cu trc d liu & thut ton, Nh xut bn Khoa
hc v K thut, 2003.
[4] Michel T. Goodrich, Roberto Tamassia, David Mount, Data
Structures and Algorithms in C++. Weley International Edition; 2004.
[5] N. Wirth " Cu trc d liu + gii thut= Chng trnh", 1983.
[6] Nguyn Trung Trc, "Cu trc d liu". BK tp HCM, 1990.
[7] L Minh Trung; Lp trnh nng cao bng Pascal vi cc cu trc d
liu; 1997

Cu trc d liu - B mn CNPM Khoa CNTT HTN
7
Chng 1 M U
Tng quan:
1. Mc tiu

Sau khi hc xong chng ny, sinh vin s:

Nm c cc bc trong lp trnh gii quyt cho mt bi ton.

Nm vng khi nim c bn lin quan n cu trc d liu v gii thut nh: M
hnh d liu, kiu d liu tru tng, kiu d liu, gii thut, ....
Nm vng cc tiu chun la chn cu trc d liu tt cho bi ton


2. Kin thc c bn cn thit

Cc kin thc c bn cn thit hc chng ny bao gm:

Kh nng nhn bit v gii quyt bi ton theo hng tin hc ha.


3. Ni dung chnh

Chng ny chng ta s nghin cu cc vn sau:

- Cch tip cn t bi ton n chng trnh

- Cc khi nim c bn lin quan n cu trc d liu v thut ton
- Cc tiu chun la chn cu trc d liu tt cho bi ton
- K thut quy trong cch gii bi ton
- Ngn ng din t gii thut
1. 1 T bi ton n chng trnh
gii mt bi ton trong thc t bng my tnh ta thng tri qua 2 giai on:
Giai on 1: Xc nh bi ton cn gii quyt v xy dng m hnh ton hc cho
bi ton cn gii quyt. Mc ch tr li hai cu hi: Bi ton cho ci g v yu cu
lm nhng g? sau tr li cu hi thc hin cc yu cu ca bi ton th lm
nh th no
Giai on 2: Ci t chng trnh: S dng ngn ng lp trnh xy dng
chng trnh tng ng vi cch lm ca giai on trc n
1.1.2 Xc nh & m hnh ha bi ton cn gii quyt
Khi gii quyt 1 bi ton thc t, ta phi bt u t vic xc nh bi ton. Nhiu
thi gian v cng sc b ra xc nh bi ton cn gii quyt, tc l phi tr li r
rng cu hi "phi lm g?" sau l "lm nh th no?". Thng thng, khi khi
u, hu ht cc bi ton l khng n gin, khng r rng. gim bt s phc
tp ca bi ton thc t, ta phi hnh thc ha n, ngha l pht biu li bi ton
thc t thnh mt bi ton hnh thc (hay cn gi l m hnh ton). C th c rt
nhiu bi ton thc t c cng mt m hnh ton.
V d 1: T mu bn th gii.
Ta cn phi t mu cho cc nc trn bn th gii. Trong mi nc u

Cu trc d liu - B mn CNPM Khoa CNTT HTN
8
c t mt mu v hai nc lng ging (cng bin gii) th phi c t bng hai
mu khc nhau. Hy tm mt phng n t mu sao cho s mu s dng l t nht.
Ta c th xem mi nc trn bn th gii l mt nh ca th, hai nc
lng ging ca nhau th hai nh ng vi n c ni vi nhau bng mt cnh.
Bi ton lc ny tr thnh bi ton t mu cho th nh sau: Mi nh u phi
c t mu, hai nh c cnh ni th phi t bng hai mu khc nhau v ta cn tm
mt phng n t mu sao cho s mu c s dng l t nht. M hnh ton hc
c s dng trong bi ton ny l m hnh th.
V d 2: n giao thng
Cho mt ng nm nh hnh 1.1, trong C v E l cc ng mt chiu theo
chiu mi tn, cc ng khc l hai chiu. Hy thit k mt bng n hiu iu
khin giao thng ti ng nm ny mt cch hp l, ngha l: phn chia cc li i
ti ng nm ny thnh cc nhm, mi nhm gm cc li i c th cng i ng
thi nhng khng xy ra tai nn giao thng (cc li i ny c cc hng i khng ct
nhau), v s lng nhm chia l t nht c th c.












Ta c th xem u vo ca bi ton l tt c cc li i ti ng nm ny, u ra ca
bi ton l cc nhm li i c th i ng thi m khng xy ra tai nn giao thng,
mi nhm s tng ng vi mt pha iu khin ca n hiu, v vy ta phi tm kim
li gii vi s nhm l t nht giao thng khng b tc nghn v phi ch i qu lu.
Trc ht ta nhn thy rng ti ng nm ny c 13 li i: AB, AC, AD, BA,
BC, BD, DA, DB, DC, EA, EB, EC, ED. Tt nhin, c th gii c bi ton ta
phi tm mt cch no th hin mi lin quan gia cc li i ny. Li no vi
li no khng th i ng thi, li no v li no c th i ng thi. V d cp AB v
EC c th i ng thi, nhng AD v EB th khng, v cc hng giao thng ct
nhau. y ta s dng mt s trc quan nh sau: tn ca 13 li i c vit ln
mt phng, hai li i no nu i ng thi s xy ra ng nhau (tc l hai hng i
ct qua nhau) ta ni li bng mt on thng, hoc cong, hoc ngon ngoo tu thch.
Ta s c mt s nh hnh 1.2. Nh vy, trn s ny, hai li i c cnh ni li vi
nhau l hai li i khng th cho i ng thi.
A
B
C
D
E
Hnh 1.1

Cu trc d liu - B mn CNPM Khoa CNTT HTN
9















Vi cch biu din nh vy ta c mt m hnh ton hc th (Graph), trong
mi li i tr thnh mt nh ca th, hai li i khng th cng i ng thi
c ni nhau bng mt on ta gi l cnh ca th. By gi ta phi xc nh cc
nhm, vi s nhm t nht, mi nhm gm cc li i c th i ng thi, n ng
vi mt pha ca n hiu iu khin giao thng. Gi s rng, ta dng mu t
ln cc nh ca th ny sao cho:
- Cc li i cho php cng i ng thi s c cng mt mu: D dng nhn
thy rng hai nh c cnh ni nhau s khng c t cng mu.
- S nhm l t nht: ta phi tnh ton sao cho s mu c dng l
t nht. Tm li, ta phi gii quyt bi ton sau:
"T mu cho th hnh 1.2 sao cho:
- Hai nh c cnh ni vi nhau (hai cn gi l hai nh k nhau) khng cng mu.
- S mu c dng l t nht."
Nh vy:
C hai bi ton trn, ban u c v rt khc nhau, nhng sau khi phn tch hnh thc
ha th chng u c a v m hnh ton hc th, v p dng thut ton t mu
trn th gii quyt cc bi ton ny.
Ch : C rt nhiu cc cu trc ton hc c th lm m hnh d liu trong tin hc, v
d dy, tp hp, nh x, cy, th, ..
- Mt bi ton thc t bt k thng bao gm cc i tng d liu v cc yu cu x
l trn nhng i tng , cho nn trong giai on phn tch v thit k, khi xy dng
m hnh ton hc cho bi ton cn ch trng n hai vn :
+ T chc biu din cc i tng d liu ca bi ton trong m hnh ton hc
nh th no? m hnh ny ta cn gi l m hnh d liu trong tin hc
AB AC AD
BA BC
BD
DA DB DC
EA EB EC ED
Hnh 1.2

Cu trc d liu - B mn CNPM Khoa CNTT HTN
10
+ Xy dng cc thao tc x l trn cc i tng ca m hnh ra sao
1.1.2 Ci t chng trnh cho bi ton cn gii quyt
Khi ci t chng trnh gii quyt bi ton tng ng ta quan tm n hai vn :
(1) Biu din m hnh d liu ca bi ton trn my tnh nh th no my
tnh c th hiu v thc hin cc thao tc trn chng. Giai on ny cn c gi l
xy dng cu trc d liu cho bi ton. Ta c th ci t mt m hnh d liu bi
nhiu cu trc d liu khc nhau. Trong mi cch ci t, mt s php ton trn m
hnh c th c thc hin thun li, nhng cc php ton khc c th li khng thun
li
(2) M ha cc gii thut x l trn cc cu trc d liu tng ng gii quyt
cc yu cu t ra ca bi ton
Ta c th s dng mt ngn ng lp trnh c th no (Pascal,C,...) ci t kt
qu giai on phn tch v thit k chng trnh, bc ny ta dng cc cu trc d
liu c cung cp trong ngn ng, v d Array, Record,... biu din m h nh
d l i u ca bi t on, v m ha gii thut bi cc cu lnh trong ngn ng lp
trnh la chn
Nh vy, ta c th tm tt cc bc t bi ton n chng trnh nh sau:
1) V mt d liu: M hnh d liu -> Kiu d liu tru tng -> Cu trc d liu.
Tht vy: Trong qu trnh pht trin chng trnh, nht l khi pht trin cc h thng
phn mm ln, ta cn n hai dng biu din d liu: Biu din tru tng v biu
din c th
a) Trong giai on xc nh va m hnh ha bi ton: ta cn s dng dng
biu din tru tng: c xc nh bi m hnh d liu l m hnh
ton hc ca cc i tng d liu cng vi cc php ton thc hin trn
cc i tng , v d nh: M hnh cy, danh sch, tp hp, th, m
hnh ERA, > Khi ta dng m hnh d liu vi mt s xc nh cc
php ton no , ta s c mt kiu d liu tru tng , v d: Ngn xp,
hng i, bng bm, .
=> Dng biu din d liu ny khng ph thuc vo ngn ng lp trnh c th
b) Trong giai on ci t chng trnh, ta cn s dng dng biu din c
th ca d liu: L biu din xc nh cch lu tr vt l ca d liu trong
b nh my tnh. Biu din c th ca d liu c xc nh bi cc cu
trc d liu. Cc cu trc d liu c m t trong ngn ng lp trnh c
th m ta s dng
=> Dng biu din ny ph thuc vo ngn ng lp trnh c th
T biu din tru tng, ta c th chuyn dch thnh cc biu din c th khc
nhau, hay ni cch khc, t cc m hnh d liu hoc t cc kiu d liu tru tng, ta
c th chuyn dch thnh cc cu trc d liu khc nhau. V d, ta c th ci t danh
sch bi cu trc d liu mng hoc cu trc d liu danh sch lin kt. Khi ci t m
hnh d liu bi cu trc d liu no , th cc php tan trn m hnh c thc hin
bi cc thao tc cn thit trn cu trc d liu .

Cu trc d liu - B mn CNPM Khoa CNTT HTN
11
2) V mt x l d liu: Gii thut khng hnh thc ->gii thut bng ngn ng gi -
>Gii thut c m ha hon ton bi ngn ng lp trnh c th, v d: Pascal, C,...
Tht vy: T nhng yu cu x l thc t, ta tm cc gii thut trn m hnh d
l i u xy dng. Gii thut c th m t mt cch khng hnh thc ( tc l n
ch nu phng hng gii hoc cc bc gii mt cch tng qut).
Tip theo ta hnh thc ho gii thut bng ngn ng gi, ri chi tit ho dn
("mn ho") cc bc gii tng qut trn ( lm mn dn) . bc ny ta cn dng cc
kiu d liu tru tng (khng phi l cc khai bo ci t trong ngn ng lp trnh
c th) v cc cu trc lnh iu khin trong ngn ng lp trnh (khng ch trng n
c php ngn ng) , kt hp ngn ng t nhin m t gii thut.
Cui cng trong pha ci t, ta tin hnh m ha hon ton gii thut c m
t bi ngn ng gi, s dng ngn ng lp trnh c th, thao tc trn cu trc d liu
c th.
1.2 Cc khi nim c bn
1.2.1 M hnh d liu ( Data model )
M hnh d liu l g?
M hnh d liu c s dng m t cu trc logic ca d liu c x l
bi h thng. L m hnh ton hc cng vi cc php ton c th thc hin trn cc
i tng ca m hnh.
Cc thnh phn d liu thc t a dng, phong ph v thng cha ng nhng quan
h no vi nhau, do cn phi t chc, la chn v xy dng cc m hnh d liu
thch hp nht sao cho va c th phn nh chnh xc cc d liu thc t ny, va c
th d dng dng my tnh x l.
tm ra cu trc ton hc thch hp vi mt bi ton cho, chng ta cn
phi phn tch k bi ton tm ra cu tr li cho cc cu hi sau:
+ Cc thng tin quan trng ca bi ton c th biu din bi cc i tng ton
hc no ?
+ C cc mi quan h no gia cc i tng ?
+ Cc kt qu phi tm ca bi ton c th biu din bi cc khi nim ton hc
no ?
Sau khi c m hnh ton hc m t bi ton, mt cu hi t ra l, ta phi
lm vic vi m hnh nh th no tm ra li gii ca bi ton?
Chng ta s thit k cc thut ton thng qua cc hnh ng, cc php ton thc
hin trn cc i tng ca m hnh
V d:
+ Trong m hnh d liu th, trong s rt nhiu cc php ton, ta c th k ra
mt s php ton sau: Tm cc nh k ca mi nh, xc nh ng i ngn nht ni
2 nh bt k, tm cc thnh phn lin thng, tm cc nh treo, t mu th,
+ Trong m hnh d liu danh sch ta c nhng php ton sau:
- Xc nh di danh sch

Cu trc d liu - B mn CNPM Khoa CNTT HTN
12
- Xen mt phn t mi vo danh sch
- Loi b, sp xp
Ta c th phn loi cc m hnh d liu da trn mi quan h gia cc phn t:
1- M hnh d liu tuyn tnh (danh sch): Dng biu din cc phn t c
quan h 1:1. Cc phn t trong m hnh c quan h tuyn tnh theo th t
xut hin ca chng, tc l, nu m hnh d liu tuyn tnh cha cc phn t
th n phi c phn t u tin v phn t cui cng, mi phn t c ng
mt phn ng ngay trc v mt phn t ng ngay sau. Hnh 1.3 biu
din mt v d v m hnh d liu tuyn tnh.










Hnh 1.3 M hnh d liu danh sch
2- M hnh d liu phn cp (m hnh cy): Dng biu din cc phn t
c quan h 1: n, tc l, mi phn t trong m hnh c nhiu hu bi, nhng
ch c mt tin bi. Hnh 1.4 biu din mt v d c th v m hnh ny. Nu
ta di chuyn t trn xung di trong Hnh 1.4 th mi nt c th tr n
nhiu nt khc, nhng nu ta di chuyn t di ln th mi nt (tr nt
gc) ch c quan h vi 1 nt. M hnh d liu phn cp nh vy thng
c gi l cy, v y l mt loi m hnh d liu quan trng trong khoa
hc my tnh:










Hnh 1.4 M hnh d liu cy
Phn t
cui cng
Phn
t u
tin
Phn t
ng sau A
A
Phn t ng
trc A
A
A ch c 1 tin bi,
c nhiu hu bi
Cc hu
bi ca A
Tin bi
ca A

Cu trc d liu - B mn CNPM Khoa CNTT HTN
13
3 - M hnh d liu th ba l th: y l m hnh d liu phong ph v phc
tp nht. Trong th, cc phn t c mi quan h n:m. Tc l, mi phn t c th c
quan h vi mt hoc nhiu phn t khc. Hnh 1.5 biu din mt v d c th v m
hnh ny.






Hnh 1.5 M hnh d liu th
4 - Loi m hnh d liu cui cng l tp hp. Trong mt tp hp, cc phn t
khng c mi quan h trc tip vi nhau, gia chng ch c mt mi quan h l thnh
vin ca tp hp, ta khng cn quan tm ti v tr chnh xc ca mt phn t no
trong tp hp. Hnh 1.6 biu din mt v d c th v m hnh ny.











Hnh 1.6 M hnh tp hp

Trn y l bn loi m hnh d liu m ta s nghin cu. Ta cng s nghin cu
cc dng biu din ca cc m hnh ny bi cc cu trc d liu khc nhau trong pha
ci t chng trnh. Ni chung, hu ht cc cu trc d liu u ri vo mt trong
bn dng c bn ny.
1.2.2. Khi nim tru tng ha
Trong tin hc, tru tng ha ngha l n gin ha, lm cho n sng sa
hn v d hiu hn. C th tru tng ha l che i nhng chi tit, lm ni bt ci
tng th.



A

Cu trc d liu - B mn CNPM Khoa CNTT HTN
14
1.2.3 Kiu d liu tru tng
Trong M hnh d liu, chng ta c th thc hin mt tp hp cc php ton rt
a dng, phong ph. Song trong nhiu p dng, chng ta ch s dng m hnh vi mt
s xc nh cc php ton no . Khi chng ta s c mt kiu d liu tru tng
Kiu d liu tru tng (abstract data type): l mt m hnh d liu c xt
cng vi mt s xc nh cc php ton no . V d: M hnh d liu danh sch,
ch xt n cc php ton thm vo v ly ra, ta gi l kiu d liu hng i hoc ngn
xp, M hnh tp hp, ch xt n cc php ton: Thm vo, loi b, tm kim ta gi l
kiu d liu tru tng t in, .....
Khi ni n mt kiu d liu cn phi cp n hai c trng c bn sau :
1) Tp cc gi tr thuc kiu.
2) Tp hp cc php ton c th thc hin c trn cc d liu ca kiu.
1.2.4 D liu
Thc t d liu tn ti rt nhiu dng: hnh nh, m thanh, .c rt nhiu dng
khc nhau. Trong mt bi ton, d liu c phn lm ba loi:





1.2.5 Biu din d liu trn my tnh
+ Trong MTT, cc d liu d tn ti nhng hnh thc khc nhau (s, vn bn, hnh
nh, ng / sai,. ) u c biu din di dng nh phn khi a vo MT x l.
Tc l mi d liu c biu din di dng mt dy cc s nh phn 0 hoc 1.V d:
S 10 = 0000 1010
=> Cch biu din ny rt khng thun tin (di, kh, khng gi nh, ) i vi con
ngi. Vic xut hin cc ngn ng lp trnh bc cao ( Pascal, C, gn vi ngn ng
t nhin) gii phng con ngi khi nhng kh khn khi lm vic vi cch biu
din d liu nh phn trong MT
+ Trong cc ngn ng lp trnh bc cao: Cc kiu d liu l s tru tng ho cc tnh
cht ca cc i tng d liu c cng bn cht trong th gii thc (ch ra nhng tnh
cht c trng cho cc i tng thuc phm vi bi ton ang xt)
V d: ng vi cc d liu dng s, tng ng ta c cc kiu d liu s nguyn,
s thc, s phc, trong ngn ng lp trnh, ....
+ Nh vy tt c cc d liu m t trong ngn ng lp trnh bc cao c my tnh x
l u phi thuc mt kiu d liu xc nh.
1.2.6 Kiu d liu
Kiu d liu T c xc nh bi mt b <V,O> , vi :
V : tp cc gi tr hp l m mt i tng kiu T c th lu tr
O : tp cc thao tc x l c th thi hnh trn i tng kiu T.

D liu
D liu vo: Cc i tng cn x l ca bi ton
Kt qu trung gian
D liu u ra: Kt qu x l

Cu trc d liu - B mn CNPM Khoa CNTT HTN
15
V du: Gi s c kiu d liu mu t = <Vc ,Oc> vi
Vc = { a-z,A-Z}
Oc

= { ly m ASCII ca k t, bin i k t
thng thnh k t hoa}
Gi s c kiu d liu s nguyn = <Vi ,Oi> vi
Vi = { -32768..32767}
Oi

= { +, -, *, /, %}
Nh vy: mun s dng mt kiu d liu trong ci t cn nm vng cc thuc tnh
ca kiu d liu . Cc thuc tnh ca 1 kiu d liu bao gm:
- Tn kiu d liu: T kha th hin cho kiu
- Min gi tr: Mt bin c kiu d liu c th nhn cc gi tr trong phm vi
no
- Kch thc lu tr: ti u ha vic s dng kiu d liu ph hp, trnh hin
tng d tha b nh.
- Tp cc ton t tc ng ln kiu d liu: Cc php ton c bn m kiu d liu
cung cp
Ta thy rng, cc loi d liu c bn thng l cc loi d liu n gin, khng c cu
trc. Chng thng l cc gi tr v hng nh cc s nguyn, s thc, cc k t, cc
gi tr logic ... Cc loi d liu ny, do tnh thng dng v n gin ca mnh, thng
c cc ngn ng lp trnh (NNLT) cp cao xy dng sn nh mt thnh phn ca
ngn ng gim nh cng vic cho ngi lp trnh. Chnh v vy i khi ngi ta
cn gi chng l cc kiu d liu nh sn. Thng thng, cc kiu d liu c bn bao
gm :
Kiu c th t ri rc: s nguyn, k t, logic , lit k, min con
Kiu khng ri rc: s thc
Ty ngn ng lp trnh, cc kiu d liu nh ngha sn c th khc nhau i cht v
cc thuc tnh. V d: Vi ngn ng C, cc kiu d liu ny ch gm s nguyn, s
thc, k t. V theo quan im ca C, kiu k t thc cht cng l kiu s nguyn v
mt lu tr, ch khc v cch s dng. Trong khi PASCAL nh ngha tt c cc
kiu d liu c s lit k trn v phn bit chng mt cch cht ch.
Cc kiu c s rt n gin v khng th hin r s t chc d liu trong mt
cu trc, thng ch c s dng lm nn xy dng cc kiu d liu phc tp khc
Tuy nhin trong nhiu trng hp, ch vi cc kiu d liu c s khng
phn nh t nhin v y bn cht ca s vt thc t, dn n nhu cu phi xy
dng cc kiu d liu mi da trn vic t chc, lin kt cc thnh phn d liu c
kiu d liu c nh ngha. Nhng kiu d liu c xy dng nh th gi l
kiu d liu c cu trc. a s cc ngn ng lp trnh u ci t sn mt s kiu c
cu trc c bn nh mng, chui, tp tin, bn ghi...v cung cp c ch cho lp trnh
vin t nh ngha kiu d liu mi.
V d : m t mt i tng sinh vin, cn quan tm n cc thng tin sau:

Cu trc d liu - B mn CNPM Khoa CNTT HTN
16
- M sinh vin: chui k t
- Tn sinh vin: chui k t
- Ngy sinh: kiu ngy thng
- Ni sinh: chui k t
- im thi: s nguyn
Cc kiu d liu c s cho php m t mt s thng tin nh :
Diemthi: integer;
Cc thng tin khc i hi phi s dng cc kiu c cu trc nh :
Masv: string[15];
Tensv: string[15];
Noisinh: String[15];
th hin thng tin v ngy thng nm sinh cn phi xy dng mt kiu d liu c
cu trc bn ghi,
Type Date = record
Ngay: byte;
Thang: byte;
Nm: integer;
End;
Cui cng, ta c th xy dng kiu d liu c cu trc th hin thng tin v mt sinh
vin :
Type SinhVien = Record
Masv: String[15];
Tensv: String[15];
Noisinh: String[15];
Diem thi: Integer;
Ngaysinh: Date
End;
Gi s c cu trc ph hp lu tr mt sinh vin, nhng thc t li cn
qun l nhiu sinh vin, lc ny sinh nhu cu xy dng kiu d liu c cu trc
mi, v d danh sch hoc mng...
Mc tiu ca vic nghin cu cu trc d liu chnh l tm nhng phng cch
thch hp t chc, lin kt d liu, hnh thnh cc kiu d liu c cu trc t nhng
kiu d liu c nh ngha.
1.2.7 Cu trc d liu (Data Structures)
CTDL = { Cc d liu thnh phn}
Trong :
Cc d liu thnh phn c th l d liu n (sn c) hoc l CTDL c
xy dng, chng c lin kt vi nhau theo mt phng php lin kt no , t

Cu trc d liu - B mn CNPM Khoa CNTT HTN
17
nhng CTDL ny ngi ta xy dng cc gii thut tng ng tc ng trn CTDL
mt cch hiu qu nht
V d: Trong ngn ng lp trnh Pascal :
Mng: Bao gm mt dy c th t cc phn t c cng kiu
Bn ghi: Bao gm mt tp cc phn t d liu khc kiu, c mi quan h vi
nhau, v d thng tin v 1 con ngi gm h tn, ngy sinh, chiu cao, cn nng, ...
.
Mt cu trc d liu tt phi tha mn cc tiu chun sau :
1- Phn nh ng thc t :
y l tiu chun quan trng nht, quyt nh tnh ng n ca ton b bi
ton. Cn xem xt k lng cng nh d tr cc trng thi bin i ca d liu
trong chu trnh sng c th chn cu trc d liu lu tr th hin chnh xc i
tng thc t.
V d : Mt s tnh hung chn cu trc lu tr sai :
- Chn mt bin s nguyn integer lu tr tin thng bn hng (c tnh
theo cng thc tin thng bn hng = tr gi hng * 5%), do vy s lm trn
mi gi tr tin thng gy thit hi cho nhn vin bn hng. Trng hp ny
phi s dng bin s thc phn nh ng kt qu ca cng thc tnh thc t.
- Trong trng trung hc, mi lp c th nhn ti a 28 hc sinh. Lp hin c
20 hc sinh, mi thng mi hc sinh ng hc ph 100.000 . Chn mt bin s
nguyn byte ( kh nng lu tr 0 - 255) lu tr tng hc ph ca lp hc
trong thng l khng ph hp v gi tr tng hc ph thu c > 255, vt khi
kh nng lu tr ca bin chn, gy ra tnh trng trn, dn n sai lch.
2 - Ph hp vi cc thao tc trn :
Tiu chun ny gip tng tnh hiu qu ca gii thut, c th l vic pht
trin cc thut ton n gin, t nhin hn; chng trnh t hiu qu cao hn
v tc x l.
V d : Mt tnh hung chn cu trc lu tr khng ph hp:
Cn xy dng mt chng trnh son tho vn bn, cc thao tc x l
thng xy ra l chn, xo sa cc k t trn vn bn. Trong thi gian x l vn
bn, nu chn cu trc lu tr vn bn trc tip ln tp tin th s gy kh khn
khi xy dng cc gii thut cp nht vn bn v lm chm tc x l ca
chng trnh v phi lm vic trn b nh ngoi. Trng hp ny nn tm mt
cu trc d liu c th t chc b nh trong lu tr vn bn sut thi gian
son tho.
LU :
i vi mi ng dng , cn ch n thao tc no c s dng nhiu nht
la chn cu trc d liu cho thch hp.



Cu trc d liu - B mn CNPM Khoa CNTT HTN
18
3 - Tit kim ti nguyn h thng:
Cu trc d liu ch nn s dng ti nguyn h thng va m nhim
c chc nng ca n. Thng thng c 2 loi ti nguyn cn lu tm nht : CPU v
b nh. Tiu chun ny nn cn nhc ty vo tnh hung c th khi vit chng trnh.
Nu cn mt chng trnh c tc x l nhanh th khi chn cu trc d liu yu t
tit kim thi gian x l phi t nng hn tiu chun s dng ti u b nh, v ngc
li.
V d : Mt s tnh hung chn cu trc lu tr lng ph:
- S dng bin integer (2 bytes) lu tr mt gi tr cho bit thng hin hnh . Bit
rng thng ch c th nhn cc gi tr t 1-12, nn ch cn s dng kiu byte l .
- lu tr danh sch hc vin trong mt lp, s dng mng 50 phn t (gii hn s
hc vin trong lp ti a l 50). Nu s lng hc vin tht s t hn 30, th gy lng
ph. Trng hp ny cn c mt cu trc d liu linh ng hn mng, v d danh sch
lin kt ta s cp n trong cc tip theo.
Nh vy:
Kiu d liu phc, hay cn gi l cu trc d liu, l kiu d liu trong cc phn
t ca n c th phn tch thnh cc kiu d liu n hoc kiu d liu phc khc. V
d, kiu d liu phc trong Pascal bao gm: array v record.
1.2.8 Gii thut
Khi c m hnh thch hp cho mt bi ton ta cn c gng tm cch gii quyt
bi ton trong m hnh . Khi u l tm mt gii thut, l mt chui hu
hn cc ch th (instruction) m mi ch th c mt ngha r rng tng ng vi
mt thao tc v thc hin c trong mt lng thi gian hu hn.
Knuth (1973) nh ngha gii thut l mt chui hu hn cc thao tc gii mt
bi ton no . Cc tnh cht quan trng ca gii thut l:
- Hu hn (finiteness): gii thut phi lun lun kt thc sau mt s hu hn
bc.
- Xc nh (definiteness): mi bc ca gii thut phi c xc nh r rng
v phi c thc hin chnh xc, nht qun.
- Hiu qu (effectiveness): cc thao tc trong gii thut phi c thc hin
trong mt lng thi gian hu hn.
Ngoi ra mt gii thut cn phi c u vo (input) v u ra (output).
Ni tm li:
Mt gii thut phi gii quyt xong cng vic khi ta cho d liu vo. C
nhiu cch th hin gii thut: dng ngn ng t nhin, dng lu , dng ngn
ng gi, dng cc cu lnh ca ngn ng lp trnh, ... V mt cch dng ph
bin l dng ngn ng gi, l s kt hp ca ngn ng t nhin v cc cu lnh
ca ngn ng lp trnh.
1.2.6 Mi quan h gia cu trc d liu v gii thut
Trong mt chng trnh:. Gii thut phn nh cc php x l, cn i tng x
l ca gii thut li l d liu, chnh d liu cha ng cc thng tin cn thit thc

Cu trc d liu - B mn CNPM Khoa CNTT HTN
19
hin gii thut. xc nh c gii thut ph hp cn phi bit n tc ng n loi
d liu no (v d lm nhuyn cc ht u , ngi ta dng cch xay ch khng bm
bng dao, v u s vng ra ngoi) v khi chn la cu trc d liu cng cn phi hiu
r nhng thao tc no s tc ng n n (v d biu din cc im s ca sinh vin
ngi ta dng s thc thay v chui k t v cn phi thc hin thao tc tnh trung bnh
t nhng im s ).
Nh vy trong mt chng trnh my tnh, gii thut v cu trc d liu c mi
quan h cht ch vi nhau, c th hin qua cng thc :
Cu trc d liu + Gii thut = Chng trnh
Vi mt cu trc d liu chn, s c nhng gii thut tng ng, ph hp.
Khi cu trc d liu thay i thng gii thut cng phi thay i theo trnh vic x
l gng p, thiu t nhin trn mt cu trc khng ph hp. Hn na, mt cu trc d
liu tt s gip gii thut x l trn c th pht huy tc dng tt hn, va p ng
nhanh va tit kim b nh, gii thut cng d hiu v n gin hn.
* Cu trc lu tr ( Storange structures)
+ CTDL c biu din trong b nh my tnh cn c gi l Cu trc lu tr







1.3. Phn tch gii thut
1.3.1 S cn thit phi phn tch gii thut
Trong khi gii mt bi ton chng ta c th c mt s gii thut khc nhau, vn l
cn phi nh gi cc gii thut la chn mt gii thut tt (nht). Thng
thng th ta s cn c vo cc tiu chun sau:
(1) - Gii thut ng n.
(2) - Gii thut n gin.
(3) - Gii thut hiu qu.
Vi yu cu (1), kim tra tnh ng n ca gii thut chng ta c th ci t gii
thut v cho thc hin trn my vi mt s b d liu mu ri ly kt qu thu
c so snh vi kt qu bit. Thc ra th cch lm ny khng chc chn bi v
c th gii thut ng vi tt c cc b d liu chng ta th nhng li sai vi mt
b d liu no . V li cch lm ny ch pht hin ra gii thut sai ch cha
chng minh c l n ng. Tnh ng n ca gii thut cn phi c chng
minh bng ton hc. Tt nhin iu ny khng n gin v do vy chng ta s
khng cp n y.
+ CTDL c
lu tr :
B nh trong cn gi l cu trc lu tr trong, v d:
Mng, danh sch k tip, .,
B nh ngoi cn gi l cu trc lu tr ngoi, v
d: Tp tin, bng,.

Cu trc d liu - B mn CNPM Khoa CNTT HTN
20
Khi chng ta vit mt chng trnh s dng mt vi ln th yu cu (2) l
quan trng nht. Chng ta cn mt gii thut d vit chng trnh nhanh
chng c c kt qu, thi gian thc hin chng trnh khng c cao v d
sao th chng trnh cng ch s dng mt vi ln m thi.
Khi mt chng trnh c s dng nhiu ln th th yu cu tit kim thi
gian thc hin chng trnh, tit kim khng gian lu tr li rt quan trng, c bit
i vi nhng chng trnh m khi thc hin cn d liu nhp ln do yu cu (3)
s c xem xt mt cch k cng. Ta gi n l hiu qu ca gii thut. Tnh hiu
qu th hin qua hai mt:
- Thi gian (Chng trnh chy nhanh)
- Khng gian (Chng trnh b chim t b nh)
1.3.2 Thi gian thc hin ca gii thut
Thi gian thc hin ca gii thut ph thuc vo nhiu yu t
- Trc ht ph thuc vo ln ca d liu u vo
- Ngoi ra T cn ph thuc vo
o My
o Ngn ng
o K so ca ngi lp trnh,
o ..
Tuy nhin cc yu t ny l khng ng u do vy khng th da vo chng khi xc
lp thi gian thc hin gii thut T(n), vi n l kch thc ca bi ton
a) Thi gian thc hin gii thut l g? n v ca T(n) tnh bng g ? cch tnh?
- Thi gian thc hin mt chng trnh l mt hm ca kch thc d liu
vo, k hiu T(n) trong n l kch thc ( ln) ca d liu vo.
V d 1: Chng trnh tnh tng ca n s c thi gian thc hin l T(n) = c*n trong
c l mt hng s.
- T(n) khng th tnh bng n v c th m tnh bng s ln thc hin cc
lnh ca gii thut.
Mt cu hi t ra l: Cch tnh ny c th hin c tnh nhanh hay chm
ca gii thut hay khng ?
Cu tr li: r rng l c, th d :
o GT1 c thi gian thc hin l t l vi n
GT2 c thi gian thc hin l t l vi n
2

Vi n kh ln th gii thut 1 nhanh hn gii thut 2
Thi gian m ta nh gi nh trn gi l phc tp tnh ton ca gii thut:
gii thut 1 ta ni GT c phc tp tnh ton cp n v k hiu T(n) = O(n)
gii thut 2 th thi gian T() = O(n
2
) hay O(g(n)), g(n) cn c gi l cp
phc tp tnh ton

Cu trc d liu - B mn CNPM Khoa CNTT HTN
21
Hm g(n) thng chn l: logn; n; n
2
; n
3
: ta gi chung l hm a thc; g(n) = 2
n
ta gi
l hm m; cc gii thut c phc tp tnh ton l cp cc hm a thc th chp
nhn c. V d : T(n) = 60n2 + 9n + 9 = O(n)
* Mt s v d nh gi phc tp tnh ton ca GT
V d 1 : Tnh trung bnh cng ca mt dy gm n s c vo t bn phm
1. Nhp vo s n
2. Cho T = 0; d = 1
3. Lp While d <= n do
Begin
4- c vo s n
5- Cng thm vo T
6- Tng m ln 1
End;
7. Tnh TBC = T/n;
8. a ra TBC
* nh gi gii thut:
Cc lnh S ln thc hin
1 1
2 1
3 n
4 n
5 n
6 n
7 1
8 1
T(n) = 4n + 4
T(n) = 4n + 4 =< 5n vi mi n >= 4
=> T(n) = O(n)
* Mt s qui tc c bn xc nh cp phc tp tnh ton
a. Qui tc loi b hng s
Nu ta c T(n) = O(C1.g(n)) th ta cng c T(n) = O(g(n))
b. Qui tc ly max
Nu ta c T(n) = O(f(n) + g(n)) th ta cng c
T(n) = O(max(f(n),g(n)))
c. Qui tc cng
T1(n) v T2(n) l thi gian thc hin ca 2 on chng trnh P1 v P2 v T1(n) =
O(f(n)); T2(n)= O(g(n)) th thi gian thc hin 2 on chng trnh ni tip nhau l

Cu trc d liu - B mn CNPM Khoa CNTT HTN
22
T(n) = T1(n) + T2(n)
Hay T(n) = O(max(f(n),g(n)))
d. Qui tc nhn
Thi gian thc hin hai on chng trnh P1, P2 lng nhau l : T(n) =
O(f(n).g(n))
Nhn xt:
T cc qui tc trn, ta thy, vic nh gi phc tp thut ton ta ch cn ch
n cc lnh tch cc cn cc lnh khc c th b qua. Lnh tch cc l lnh
c s ln thc hin >= s ln thc hin cc lnh khc
Tm li: Qui tc tng qut phn tch mt chng trnh:
- Thi gian thc hin ca mi lnh gn, READ, WRITE l O(1)
- Thi gian thc hin ca mt chui tun t cc lnh c xc nh bng qui tc
cng. Nh vy thi gian ny l thi gian thi hnh mt lnh no lu nht
trong chui lnh.
- Thi gian thc hin cu trc IF l thi gian ln nht thc hin lnh sau THEN
hoc sau ELSE v thi gian kim tra iu kin. Thng thi gian kim tra iu
kin l O(1).
- Thi gian thc hin vng lp l tng thi gian thc hin thn vng lp (trn tt
c cc ln lp). Nu thi gian thc hin thn vng lp khng t hay i th thi
gian thc hin vng lp l tch ca s ln lp vi thi gian thc hin 1 ln thn
vng lp.
V d 1: Tnh thi gian thc hin ca th tc sp xp ni bt
PROCEDURE Noi_bot(VAR a: ARRAY[1..n] OF integer);
VAR i, j, temp: Integer;
BEGIN
{1} FOR i:=1 TO n-1 DO
{2} FOR j:=n DOWNTO i+1 DO
{3} IF a[j-1]>a[j]THEN BEGIN{hon v a[i], a[j]}
{4} temp := a[j-1];
{5} a[j-1] := a[j];
{6} a[j] := temp; END;
END;
* Xc nh phc tp ca gii thut trn
Ta thy ton b chng trnh ch gm mt lnh lp {1}, lng trong lnh {1} l lnh
{2}, lng trong lnh {2} l lnh {3} v lng trong lnh {3} l 3 lnh ni tip nhau
{4}, {5} v {6}. Chng ta s tin hnh tnh phc tp theo th t t trong ra:
- Trc ht, c ba lnh gn {4}, {5} v {6} u tn O(1) thi gian, vic so snh a[j-
1] > a[j] cng tn O(1) thi gian, do lnh {3} tn O(1) thi gian.
- Vng lp {2} thc hin (n-i) ln, mi ln O(1) do vng lp {2} tn O((n-i).1) =

Cu trc d liu - B mn CNPM Khoa CNTT HTN
23
O(n-i).
- Vng lp {1} lp c i chy t 1 n n-1nn thi gian thc hin ca vng lp {1} v
cng l phc tp ca gii thut l:
T(n) =

(n i) =
n(n 1)
= O(n
2
).
i =1
2

Ch :
Trong trng hp vng lp khng xc nh c s ln lp th chng ta phi ly s
ln lp trong trng hp xu nht.
V d 2: Tm kim tun t. Hm tm kim Search nhn vo mt mng a c n s
nguyn v mt s nguyn x, hm s tr v gi tr logic TRUE nu tn ti mt phn
t a[i] = x, ngc li hm tr v FALSE.
Gii thut tm kim tun t l ln lt so snh x vi cc phn t ca mng a, bt u
t a[1], nu tn ti a[i] = x th dng v tr v TRUE, ngc li nu tt c cc phn
t ca a u khc X th tr v FALSE.
FUNCTION Search(a:ARRAY[1..n] OF Integer;x:Integer):Boolean; VAR i:Integer;
Found:Boolean;
BEGIN
{1} i:=1;
{2} Found:=FALSE;
{3} WHILE(i<=n)AND (not Found) DO
{4} IF A[i]=X THEN Found:=TRUE
ELSE i:=i+1;
{5} Search:=Found;
END;
* Phn tch xc nh phc tp ca gii thut trn
Ta thy cc lnh {1}, {2}, {3} v {5} ni tip nhau, do phc tp ca hm
Search chnh l phc tp ln nht trong 4 lnh ny. D dng thy rng ba lnh
{1}, {2} v {5} u c phc tp O(1) do phc tp ca hm Search chnh l
phc tp ca lnh {3}. Lng trong lnh {3} l lnh {4}. Lnh {4} c phc tp
O(1). Trong trng hp xu nht (tt c cc phn t ca mng a u khc x) th
vng lp {3} thc hin n ln, vy ta c T(n) = O(n).
1.3.3 Khng gian ca gii thut
c tnh bng s nh nguyn thu c dng trong gii thut (= s bin
n)

1.4 Ngn ng din t gii thut
- L cng c trung gian gip giao tip gia ngi v MTT.
- Mi ngn ng lp trnh c mt h kiu, trong c mt s l kiu d liu n hay
nguyn t, mt s l cc cu trc d liu bao gm cc kiu n.

Cu trc d liu - B mn CNPM Khoa CNTT HTN
24
- Ngn ng din t gii thut bao gm mt tp hp cc cu lnh tun theo mt c
php nht nh. Thng qua cc cu lnh m MT c th hiu v thc hin nhng cng
vic m ngi dng mun MT lm
=> Ta s dng cng c ny din t gii thut.
- Trong mn hc CTDL ta s dng ngn ng lp trnh Pascal minh ho.
1.5. quy v gii thut
1.5.1 Khi nim quy
Mt i tng c gi l quy nu n bao gm chnh n nh mt b phn
hoc i tng c nh ngha di dng ca chnh n .
V d : Cho n l s nguyn dng, giai tha ca n c nh ngha l :
n! = 1 nu n = 0 hoc n = 1;
n*(n-1) ! nu n >1
1.5.2 Gii thut quy v th tc quy
a) Gii thut quy
Nu li gii ca bi ton T c thc hin bi li gii ca mt bi ton T, c
dng nh T th l mt li gii quy. Gii thut cha li gii quy c gi l
gii thut quy (T<T)
V d: Xt bi ton tm mt t trong t in
Phc tho gii thut
Procedure SEARCH( dict, word)
{ dict c gi l u mi truy nhp c vo t in ang xt, word ch t cn tm
}
1) If (t in ch cn l mt trang )
Then (tm word trong trang ny)
Else
Begin
M t in vo trang gia;
Xc nh xem na no cha word ;
If (word nm na trc ca t in )
Then SEARCH(dict1, word)
Else SEARCH(dict2, word)
End;
{dict1, dict2 l 2 u mi c th truy cp c vo u trc v u sau ca t in }
2) Return
b) c im ca th tc quy
+ Trong th tc quy c li gi n chnh n.
+ Mi ln c li gi th kch thc ca bi ton thu nh hn trc
{

Cu trc d liu - B mn CNPM Khoa CNTT HTN
25
+ C mt trng hp c bit, trng hp suy bin: Bi ton s c gii
quyt theo mt cch khc hn v gi quy cng kt thc.
quy gm : quy trc tip (th tc cha li gi n chnh n) v quy gin tip
(th tc cha li gi n th tc khc m th tc ny li cha li gi n chnh n )
Tm li
Mc d cc thut ng kiu d liu (hay kiu - data type), cu trc d liu (data
structure), kiu d liu tru tng (abstract data type), m hnh d liu (data model)
nghe c v nh nhau, nhng chng c ngha rt khc nhau.
Kiu d liu: l mt tp hp cc gi tr v mt tp hp cc php ton trn cc gi
tr . V d kiu Boolean l mt tp hp c 2 gi tr TRUE, FALSE v cc php
ton trn n nh OR, AND, NOT . Kiu Integer l tp hp cc s nguyn c gi
tr t -32768 n 32767 cng cc php ton cng, tr, nhn, chia, Div, Mod
Kiu d liu c hai loi l kiu d liu s cp v kiu d liu c cu trc hay
cn gi l cu trc d liu.
Kiu d liu c s : l kiu d liu m gi tr d liu ca n l n nht. V
d: kiu Boolean, Integer.
Kiu d liu c cu trc hay cn gi l cu trc d liu: l kiu d liu m
gi tr d liu ca n l s kt hp ca cc gi tr khc. V d: ARRAY l mt cu
trc d liu.
Mt kiu d liu tru tng: l mt m hnh d liu cng vi mt tp hp cc
php ton in hnh trn n. C th ni kiu d liu tru tng l mt kiu d liu do
chng ta nh ngha mc khi nim (conceptual), n cha c ci t c th bng
mt ngn ng lp trnh.
Khi ci t mt kiu d liu tru tng trn mt ngn gn lp trnh c th, chng
ta phi thc hin hai nhim v:
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 trnh con thc hin cc php ton trn kiu d liu tru
tng m ta thng gi l ci t cc php ton.


Cu trc d liu - B mn CNPM Khoa CNTT HTN
26
Chng 2 M HNH D LIU DANH SCH
Tng quan:
1. Mc tiu
Sau khi hc xong chng ny, sinh vin
- Nm vng cc khi nim: danh sch, ngn xp, hng i.
- Ci t cc kiu d liu v cc php ton bng ngn ng lp trnh c th.
- Bit ng dng l thuyt c tm hiu gii cc bi ton thc t.
2. Ni dung chnh
Trong chng ny chng ta s nghin cu
- M hnh danh sch (LIST)
- Kiu d liu tru tng ngn xp (STACK)
- Kiu d liu tru tng hng i (QUEUE)
2.1 Danh sch (List)
21.1 Khi nim danh sch
M hnh ton hc ca danh sch l mt tp hp hu hn bin ng cc phn
t thuc cng mt lp i tng no (c cng mt kiu d liu).
Ta cng lu rng mt i tng cng c th xut hin nhiu ln trong mt
danh sch. Ta biu din danh sch L nh l mt chui cc phn t ca n: a1, a2, . . .,
an vi n 0. th:
+ Nu n = 0 ta ni danh sch rng (empty list).
+ Nu n > 0 ta gi a1 l phn t u tin v an l phn t cui cng ca danh
sch.
+ S phn t ca danh sch ta gi l di ca danh sch.
+ Mt tnh cht quan trng ca danh sch l tnh tuyn tnh: Cc phn t ca
danh sch c th t tuyn tnh theo v tr (position) xut hin ca cc phn t.
Ta ni ai ng trc ai+1, vi i t 1 n n-1; Tng t ta ni ai l phn t
ng sau ai-1, vi i t 2 n n. Ta cng ni ai l phn t ti v tr th i, hay
phn t th i ca danh sch.
V d: Tp hp h tn cc sinh vin ca lp TINHOC c lit k trn giy nh sau:
1. Nguyn Trung Cang
2. Nguyn Ngc Chng
3. L Th L Sng
4. Trnh V Thnh
5. Nguyn Ph Vnh
6. Phm Quch Qu
7. V Xun Trng
8. Trn Ro Rc
L mt danh sch. Danh sch ny gm c 8 phn t, mi phn t c mt v tr trong

Cu trc d liu - B mn CNPM Khoa CNTT HTN
27
danh sch theo th t xut hin ca n.
- Danh sch con : Nu L = (a
1
, a
2
, . . . , a
n
) l mt danh sch th ta gi l mt danh
sch con ca L, mt on no cc phn t k tip ca L. Danh sch rng c xem
l danh sch con ca mt danh sch bt k.
- Mt danh sch con bt u t phn t u tin gi l phn u (prefix), mt danh
sch kt thc bi phn t cui cng gi l phn cui (postfix) ca danh sch.
2.1. 2. Cc php ton c bn trn danh sch
Gi L l mt danh sch cho, p l mt v tr (position) trong danh sch, x l mt
gi tr no cng kiu vi kiu d liu ca cc phn t trong danh sch. Cc php
ton c bn sau c nh ngha trn danh sch:
1) Chn mt phn t vo danh sch
INSERT_LIST(x,p,L): xen phn t x vo v tr p trong danh sch L. Tc l nu
danh sch l a1, a2, . , ap-1, ap ,. . , an th sau khi xen ta c kt qu a1, a2, . . ., ap-1,
x, ap, . . . , an. Nu v tr p khng tn ti trong danh sch th php ton khng c
xc nh.
2) Tm v tr ca mt phn t trong danh sch
LOCATE(x,L) thc hin vic xc nh v tr phn t c ni dung x u tin trong
danh sch L. Locate tr kt qu l v tr ca phn t x trong danh sch. Nu x khng
c trong danh sch th v tr sau phn t cui cng ca danh sch c tr
v, tc l ENDLIST(L).
3) Ly gi tr ca phn t v tr no
RETRIEVE(p,L) ly gi tr ca phn t v tr p ca danh sch L; nu v tr p
khng c trong danh sch th kt qu khng xc nh (c th thng bo li).
4) Xo mt phn t v tr no trong danh sch
DELETE_LIST(p,L): xo phn t v tr p t r ong danh sch L. Nu v tr p
khng c trong danh sch th php ton khng c nh ngha v danh sch L s
khng thay i
5) Tm v tr ca phn t ng sau phn t c v tr xc inh
LINK(p,L) cho kt qu l v tr ca phn t i sau phn t p; nu p l phn t cui
cng trong danh sch L th LINK(p,L) cho kt qu l ENDLIST(L). Link khng
xc nh nu p khng phi l v tr ca mt phn t trong danh sch.
6) Tm v tr ca phn t ng trc phn t c v tr xc inh
PREVIOUS(p,L) cho kt qu l v tr ca phn t ng trc phn t c v tr p
trong danh sch. Nu p l phn t u tin trong danh sch th Previous(p,L) khng
xc nh. Previous cng khng xc nh trong trng hp p khng phi l v tr ca
phn t no trong danh sch.
7) Tm v tr ca phn t ng u danh sch
FIRST(L) cho kt qu l v tr ca phn t u tin trong danh sch. Nu danh
sch rng th ENDLIST(L) c tr v.
8)Kim tra tnh rng ca danh sch

Cu trc d liu - B mn CNPM Khoa CNTT HTN
28
EMPTY_LIST(L) cho kt qu TRUE nu danh sch rng, ngc li n cho
gi tr FALSE.
9) To mt dch sch rng
MAKENULL_LIST(L) khi to mt danh sch L rng, cha c d liu.
Ghi ch:
Trong thit k cc gii thut sau ny chng ta dng cc php ton tru tng
c nh ngha trn y nh l cc php ton nguyn thy (c bn). Tht vy, t
cc php ton nguyn thu ny ta c th t hnh thnh ln cc php ton phc tp khc
nh: To danh sch cha d liu, sp xp danh sch, duyt danh sch, tch, gp, tnh
ton, tng hp, .ph thuc vo yu cu c th ca bi ton.

Lu :
Trn y l cc php ton tru tng do chng ta nh ngha, n cha c
ci t trong cc ngn ng lp trnh. Do thc hin c cc php ton ta
phi ci t chng thnh cc chng trnh con trong ngn ng lp trnh c th. Trong
bi ging ny, vi mi cu trc d liu ci t m hnh danh sch ta vn gi ng
nhng tham s trong cch ci t trn thng nht trong ci t.
2.1.3 Biu din (ci t) danh sch trn my tnh
2.1.3.1 Danh sch ci t bng mng
Ci t danh sch bi mng hay cn gi l cu trc d liu danh sch c, hoc
cu trc d liu danh sch k tip, gi tt l: Danh sch c, hoc danh sch k tip, n
thuc loi cu trc d liu tnh
a) M t ci t :
- Gi s N l s phn t ti a trong danh sch: Vi cch ci t ny, d nhin,
ta phi c lng s phn t ti a ca danh sch khai bo s phn t ca
mng cho thch hp. D thy rng s phn t ca mng phi c khai bo
ln hn s phn t ca danh sch. Ni chung l mng cn tha mt s ch
trng, gi s Item: L kiu d liu ca cc phn t trong danh sch
- Dng mt mng lu gi cc phn t ca danh (gi s mng Elements).
- Count l mt bin m m s lng phn t hin c trong danh sch
Nh vy ta c th nh ngha danh sch nh mt cu trc bn ghi gm 2 trng:
Elements: Cha cc phn t trong danh sch
Count: m s phn t hin c trong danh sch (chiu di danh sch)
=> Khi mng cha cc phn t trong danh sch c dng nh sau
1)Mun thm 1 phn t vo u hay cui danh sch ta cn gi cc php ton no v gi cc
php ton nh th no?
2) Vit gii thut nhp d liu cho danh sch cha n phn t
3) Duyt danh sch hin th/tm tt c cc phn t v tr chn

Cu trc d liu - B mn CNPM Khoa CNTT HTN
29
ch s mng 1 2 . count . n
Ni dung
phn t
Phn
t 1
Phn
t 2
Phn t cui
cng trong
danh sch
(rng) (rng)
b) Dng ci t
Const N = <maxlist>;
Type List = Record
Elements : Array[1..N] of Item;
Count : 0..N;
End;
Var L : List;
c) Ci t cc php ton c bn
1- Khi to danh sch rng
Danh sch rng l mt danh sch khng cha bt k mt phn t no (hay di
danh sch bng 0). Theo cch khai bo trn, trng count ch v tr ca phn t
cui cng trong danh sch v cng di hin ti ca danh sch, v vy khi
to danh sch rng ta ch vic gn gi tr trng count ny bng 0.
Procedure MakeNullList(Var L: List)
Begin
L. count :=0;
End;
2- Kim tra danh sch rng
Danh sch rng l mt danh sch m di ca n bng 0.
Function Empty_list(L : List) : boolean;
Begin
Empty_list := L.count = 0;
End;
3- Xen mt phn t vo danh sch
Bi ton:
Cho mt danh sch L, mt gi tr x (cng kiu vi kiu d liu ca cc phn t
trong danh sch) v mt v tr p bt k trong danh sch. Hy chn x vo v tr p
trong danh sch L.
Phn tch cch chn
Khi xen phn t c ni dung x vo ti v tr p ca danh sch L th s xut hin cc
kh nng sau:
- Mng y: mi phn t ca mng u cha phn t ca danh sch, tc l phn
? Ti sao i s L ca th tc li l tham bin

Cu trc d liu - B mn CNPM Khoa CNTT HTN
30
t cui cng ca danh sch nm v tr cui cng trong mng. Ni cch khc,
di ca danh sch bng ch s ti a ca mng; Khi khng cn ch cho phn t
mi, v vy vic xen l khng th thc hin c, chng trnh bo li.
- Ngc li ta tip tc xt:
+ Nu p khng hp l (p>count+1 hoc p<1 ) th chng trnh con bo li; (
v: V tr xen p<1 th khi p khng phi l mt v tr phn t trong trong
danh sch c. Nu v tr p>L.count+1 th khi xen s lm cho danh sch L
khng cn l mt danh sch c na.
+ Nu v tr p hp l th ta tin hnh xen theo cc bc sau:
* Di cc phn t t v tr p n cui danh sch ra sau 1 v tr.
* di danh sch tng 1.
* a phn t mi vo v tr p
Gii thut chn:
Procedure InsertList(X: Item, P: byte , Var L: List)
Var i: integer;
Begin
if (L.count =MaxLength) then
Writeln(Danh sach day)
else
if ((P<1) or (P>L.count+1)) then
Writeln (Vi tri khong hop le)
Else
begin
{Di cc phn t t v tr p n cui danh sch
(Count) sang phi 1 v tr}
For i:=L. count+1 to P+1 do
L.Elements[i]: =L.Elements[i-1];
{a x vo v tr p}
L.Elements[P]=X;
{Tng di danh sch ln 1}
L.count:= L.Count +1;
end
End;
4 - Xa phn t ra khi danh sch
Bi ton:
Cho danh sch L, hy xo phn t v tr p ra khi danh sch
Phn tch bi ton
Xo mt phn t v tr p ra khi danh sch L ta lm cng vic ngc li vi chn mt

Cu trc d liu - B mn CNPM Khoa CNTT HTN
31
phn t: Trc tin ta kim tra v tr phn t cn xa xem c hp l hay cha?
+ Nu p>L.count hoc p<1 th y khng phi l v tr ca phn t trong danh sch.
+ Ngc li, v tr hp l th ta phi di cc phn t t v tr p+1 n cui
danh sch (count) ln trc mt v tr ln phn t cn xa v di danh sch
gim i 1 phn t ( do xa bt 1 phn t).
Gii thut xo
Procedure DeleteList(P: byte, var L: list)
Var i: integer;
Begin
if ((P<1) or (P>L.count)) then
Writeln(khong hop le);
else if (EmptyList(L))then
Writeln(Danh sach rong!);
Else
begin
{Di cc phn t t v tr p+1 n cui danh sch
(v tr count) sang tri 1 v tr}
For i:= P-1 to L.count -1do
L.Elements[i]: = L.Elements[i+1];
{gim count i 1 n v}
L. count := L.count -1;
End;
End;
5 - nh v mt phn t trong danh sch
nh v v tr phn t u tin c ni dung x trong danh sch L, ta c th p dung
phng php tm kim tun t nh sau:
Ta d tm t u danh sch:
o Nu tm thy x th v tr ca phn t tm thy c tr v,
o Nu khng tm thy th hm tr v v tr sau v tr ca phn t cui
cng trong danh sch, tc l ENDLIST(L). Gi s ta cho ENDLIST(L)
:= L.count+1
Trong trng hp c nhiu phn t cng gi tr x trong danh sch th v tr ca
phn t c tm thy u tin c tr v.
Gii thut
Procedure Locate(X:Item, L:list) :integer;
Var p: integer; found: boolean;
Bgein
Found = false;

Cu trc d liu - B mn CNPM Khoa CNTT HTN
32
P = First(L); //v tr phn t u tin
/*trong khi cha tm thy v cha kt thc danh sch th xt
phn t k tip*/
while ((P < L.count+1) and (not Found) do
if (Retrieve(P,L) == X) then Found := true else P =
Link(P, L);
locate := P;
End;
Lu : Cc php ton sau phi thit k trc Locate
- First(L):=1
- Retrieve(P,L):= L.Elements[p]
- Link(P,L):=P+1
6- Cc php ton khc cng d dng ci t nn xem nh bi tp
Bi tp v nh:
Vn dng cc php ton trn danh sch c vit chng trnh nhp vo mt
danh sch cc s nguyn v hin th danh sch va nhp ra mn hnh. Thm phn t
c ni dung x vo danh sch ti v tr p (trong x v p c nhp t bn phm).
Xa phn t u tin c ni dung x (nhp t bn phm) ra khi danh sch.
Gi :
Gi s ta ci t y cc php ton c bn trn danh sch. thc hin
yu cu nh trn, ta cn thit k thm mt s chng trnh con sau :
- Nhp danh sch t bn phm (READ_LIST(L)) (Php ton ny cha c
trong kiu danh sch)
- Hin th danh sch ra mn hnh (in danh sch) (PRINT_LIST(L)) (Php
ton ny cha c trong kiu danh sch).
Thc ra th chng ta ch cn s dng cc php ton MakeNull_List,
Insert_List, Delete_List, Locate v cc chng trnh con Read_List, Print_List va
ni trn l c th gii quyt c bi ton. p ng yu cu t ra, ta vit chng
trnh chnh ni kt nhng chng trnh con li vi nhau gm cc cu lnh nh
sau:
BEGIN
MakeNullList(L); //Khi to danh sch rng
ReadList(L);
Writeln(Danh sach vua nhap: );
Print_List(L); // In danh sach len man hinh
Insert_List(X,P,&L);
Writeln(Danh sach sau khi them phan tu la: );
PrintList(L);
Writeln(Noi dung phan tu can xoa: );readln(X);

Cu trc d liu - B mn CNPM Khoa CNTT HTN
33
P=Locate(X,L);
DeleteList(P,L);
Writeln(Danh sach sau khi xoa,X, l:);
PrintList(L);
END.
2.1.3.2 Danh sch ci t bi con tr
Danh sch c ci t bi con tr ta cn gi l cu trc d liu danh sch lin
kt - gi tt l danh sch lin kt, y thuc loi cu trc d liu ng
















Trong cch ci t ny, ta dng con tr lin kt cc nh cha cc phn t ca
danh sch. Cc hnh thc t chc lin kt cc phn t trong danh sch c th l:
+ Lin kt n, tng ng ta c cu trc d liu danh sch lin kt n gi tt l
danh sch lin kt n
+ Lin kt vng: Tng ng ta c cu trc d liu danh sch lin kt vng gi
tt l danh sch lin kt vng
+ Lin kt i: Tng ng ta c cu trc d liu danh sch lin kt i (lin kt
kp) gi tt l danh sch lin kt kp
+ a lin kt: Tng ng ta c danh sch a mc ni
Trong bi ging ny ta trung nguyn cu cu trc danh sch lin kt n. Cc cu
trc danh sch lin kt khc dnh cho bn c.
a) Danh sch lin kt n (single link list)
Mi phn t trong danh sch l mt nh, mi nh l mt cu trc t nht l
hai ngn, mt ngn cha d liu ca phn t , mt ngn l con tr cha a













Ta c 1 kiu lu tr khc: Lu tr mc ni, cc nh cha cc phn t trong danh sch
khng nht thit phi nm nhng v tr k tip nhau, v chng gn kt vi nhau thng
qua c ch mc ni - lu a ch ca nhau => danh sch c lu tr theo kiu ny gi
l danh sch mc ni hay danh sch lin kt. Vy lu tr mc ni l nh th no, ta i
tm hiu nguyn tc lu tr ca n?








Cc nh cha cc phn t ca danh sch
l mt vng lin tc, cc vng nh ny
c cp pht ngay khi dch chng trnh
v n l cc nh tnh.
Nhc im chnh: S lng cc phn t trong danh
sch b hn ch v ph thuc vo vng nh trng lin
tc trong b nh
Ta bit, vi cu trc
danh sch k tip th:

Cu trc d liu - B mn CNPM Khoa CNTT HTN
34
ch ca nh ng k sau trong danh sch, ta c th hnh dung c ch ny qua v d
sau:
Gi s 1 nhm c 4 bn: ng, Ty, Nam, Bc c a ch nh ln lt l
d,t,n,b. Gi s: ng c a ch ca Nam, Ty khng c a ch ca bn no, Bc
gi a ch ca ng, Nam c a ch ca Ty, iu ny c m t qua Hnh 2.1
nh sau









Hnh 2.1 Danh sch lin kt n cha 4 phn t
Nh vy, nu ta xt th t cc phn t bng c ch lu a ch ny th ta c mt
danh sch: Bc, ng, Nam, Ty. Hn na c th truy cp n cc phn t
trong danh sch ny th ch cn gi a ch ca Bc (iah ch ca nh cha
phn t u tin trong danh sch).
* M t ci t
Trong ci t, mi phn t trong danh sch c ci t nh mt nt c hai
trng:
+ Trng info cha gi tr ca cc phn t trong danh sch;
+ Trng link l mt con tr gi a ch ca k tip trong danh sch:
- Mi nt c dng nh sau:






- Hnh nh danh sch c dng nh sau:



Nt cui cng trong danh sch khng c nt ng sau, ln Trng link ca
phn t cui trong danh sch, tr n mt gi tr c bit l Nil (tr ti t khng
tr ti u). Cu trc danh sch nh vy gi l danh sch ci t bng con tr hay
INFO LINK

L con tr, tr n nt ng k sau trong danh sch
(ngha l n cha a ch ca nh nt ng sau n)
cha gi tr phn t ca nt, gi s c kiu d liu l Item
a1 a2 a
n+1
nil
L
a3 a
n
Bc d
ng n
Nam

t
Ty nil

Cu trc d liu - B mn CNPM Khoa CNTT HTN
35
danh sch lin kt n hoc danh sch mc ni n hay ngn gn gi l danh sch lin
kt.
+ truy nhp vo d/s ta phi truy nhp tun t n v tr mong mun, xut pht t
phn t u tin, do qun l danh sch ta ch cn qun l a ch nh cha
phn t u tin ca danh sch, tc l cn mt con tr tr n phn t u tin trong
danh sch - gi s con tr L.
+ Danh sch L rng khi: L=nil
* Dng ci t
(Ni n danh sch mc ni (Lin quan n a ch) ta phi ngh ngay n bin tr,
vy bin tr l g ?
Ni thm v con tr trong Pascal:
- Chim 4 byte, l i tng dng lu tr a ch ca i tng khc
- Khai bo:
Var <Tn bin con tr>: ^ <Kiu con tr>;
V d: Var P: ^ integer ;
( Con tr P c kiu nguyn, Bin ng P^)
- nh ngha
Type <Tn kiu con tr> = ^ <Kiu T>;
V d: Type p = ^ Hs;
- Truy nhp n i tng qua con tr, s dng lnh
<Tn bin con tr>^
- Mt s hm/th tc i vi con tr:
+ Th tc New(p): Xin cp pht mt vng nh c kch thc bng kch thc
ca kiu tng ng vi kiu ca con tr p:
*Nu cp pht c th a ch vng nh s c gn cho con tr p
*Nu khng cp pht c th P = nil
+ Th tc Dispose(p): Gii phng (thu hi) vng nh do con tr p tr ti,
thng c s dng khi mun loi b 1 phn t ra khi danh sch
-Vi mt nt c tr bi con tr p th :
+ p^ . infor : Cho gi tr l trng infor ca nt
+ p^ . Link: Cho a ch ca nt tip sau P
Dng ci t ca danh sch:
Type PList = ^ Nut;
Nut = Record
Infor:Iem;
Link : Plist;
End;
Var L: Plis

Cu trc d liu - B mn CNPM Khoa CNTT HTN
36
* Ci t cc php ton c bn vi cu trc danh sch lin kt n
1- To danh sch rng
procedure MakeNullList(L: Plist)
Begin
L:=nil;
End;
2- Kim tra mt danh sch rng
Danh sch rng nu con tr tr ti phn t u danh sch = nil
Function EmptyList( L: Plist): boolean
Begin
EmptyList:= L=Nil;
End;
3 - Xen mt phn t vo danh sch :
Xen mt phn t c gi tr x vo danh sch L ti v tr p ta phi cp pht mt mi
lu tr phn t mi ny v ni kt li cc con tr a mi ny vo v tr p. S
ni kt v th t cc thao tc (t 1-> 4) c cho trong Hnh 2.2.








Hnh 2.2: Thm mt phn t vo danh sch ti v tr p
Phc tho gii thut thm
Procedure InsertList( X: Item, P: byte, var L: PList )
Var Temp, M: pList;
dem: byte;
y: Item;
Begin
- Yu cu my tnh cp pht nh cha d liu cn thm: New(Temp) {1};
- d liu cn thm vo nh va cp pht: Temp^.infor:=x; {2}
- Xc nh v tr thm: v tr th P:
Nu p=1: thm vo u danh sch: Temp^.link:=L;L:=Temp;
Nu (p>1) and (p<length(L)) th:
Di chuyn con tr M n v tr trc P:
L
A D C

B E
p = 3
x
3
4
B
Temp
M

Cu trc d liu - B mn CNPM Khoa CNTT HTN
37
M:=L; Dem:=1;
While Dem<> p-1 do
Begin
m:=m^.link
Dem:= Dem +1;
End;
- Sa i cc mi lin kt gn kt Temp vo v tr p trong danh sch L:
Gn Temp vo sau M:
Temp^.link:=M^.link; {3}
M^.link:= Temp; {4}
End;
Trong Length(l) l hm xc nh chiu di danh sch
4- Xa phn t ra khi danh sch L









Hnh 2.3: Xo phn t ti v tr p
Tng t nh khi xen mt phn t vo danh sch lin kt, mun xa mt phn
t khi danh sch ta cn:
+ Xc nh v tr ca phn t mun xa trong danh sch L, gi s v tr th p, ta di
chuyn con tr M ti v tr trc p, temp tr ti v tr p
+ Ni kt li cc con tr theo thao tc 1 nh trong Hnh 2.3.
+ Gii phng vng nh cha phn t th P


Gii thut:
Procedure DeleteList(P: integer, Var L: PList )
Var M, Temp: Plist;
Dem: integer;
Begin
If L=nil then write(Danh sch rng!)
L
A D C

B E
p = 3
M
1

Cu trc d liu - B mn CNPM Khoa CNTT HTN
38
Else
If p<=length(L) then
Begin
If p=1 then
Begin
Temp:=L;
L:= L^.link;
End
Else
Begin
{di chuyn con tr M ti v tr trc p, temp tr
ti v tr p}
M:=L; Dem:=1;
While Dem<> p-1 do
Begin
M:=M^.link;
Dem:= Dem +1;
End;
Temp := M^.link;
{to lin kt 2}
M^.link:= Temp^.link;
End;
{gii phng vng nh cha d liu cn xo}
Dispose(Temp);
End;
End;
5 Cc php ton cn li xem nh bi tp dnh cho bn c
b) Mt s dng danh sch lin kt khc
1- Danh sch ni vng ( Circularly linked list)
- L mt ci tin ca d/s ni n
- Trng Link ca node cui cng trong d/s ni n cha a ch ca node u
tin ca d/s
Hnh nh ca n nh sau:




A B C D
L
Hnh 2.4 hnh nh danh sch lin kt n vng

Cu trc d liu - B mn CNPM Khoa CNTT HTN
39
u im:
- Gip cho vic truy nhp vo cc node c linh hot hn: v node no cng c th
coi l node u tin v con tr L tr ti node no cng c, t mt nt trong danh
sch ta c th truy cp c n cc nt khc
Nhc im:
Trong x l, nu khng cn thn dn n 1 chu trnh khng kt thc (V khng
bit c ch kt thc d/s )
2- Danh sch ni kp (double link list)
* Vi danh sch mc ni n v ni vng, ch c php duyt 1 chiu, t phn t trc
c th truy nhp n phn t ng sau, nhng t phn t ng sau khng truy cp trc
tip n phn t ng ngay trc n c. Khc phc hn ch ny ta c danh sch lin
kt kp
* Mi phn t trong danh sch ni kp l mt nt (bn ghi) gm 3 trng:
- Info : cha thng tin v i tng.
- LPTR : con tr tr ti phn t bn tri
- RPTR : con tr tr ti phn t bn phi
+ Quy cch mt node:


+ Hnh nh danh sch mc ni i c dng:




truy nhp cc phn t ca d/s ta c th truy cp xut pht t mt trong hai u
ca danh sch. Do , ta qun l danh sch bng cch dng 2 con tr L, R ln lt tr
ti node cc tri, phi ca danh sch. Khi d/s rng nu: L=R= nill
(Tng t nh danh sch mc ni n, vi danh sch ni kp, ta cng c cc php
ton tc ng tng ng)
* Mt s php ton:
1) Php b sung mt phn t (vo trc phn t tr bi con tr M)







LPTR INFO RPTR
A B C D
L R
A B C D
L R M
E


(1) (2)
(3)
(4)

q
Hnh 2.5 hnh nh danh sch lin kt i
Hnh 2.6 Thm mt phn t v tr trc M

Cu trc d liu - B mn CNPM Khoa CNTT HTN
40








(Gii thut: Bn c t vit)
2) Php loi b 1 phn t ra khi danh sch ni kp
+ Gi s ta c mt d/s ni kp, c 2 nt cc tri, cc phi l L, R. loi b nt tr
bi con tr M ra khi danh sch
(Ch : trong nhiu bi ton c th: Yu cu, nt cn loi b l nt tho mn iu
kin no , khi ta phi di chuyn con tr M tr n nt )


















+ Gii thut: Dnh cho bn c

2.1.3.3. So snh hai phng php ci t danh sch bi mng v bi con tr
Khng th kt lun phng php ci t no hiu qu hn, m n hon ton tu
thuc vo tng ng dng hay tu thuc vo cc php ton trn danh sch. Tuy nhin
ta c th tng kt mt s u nhc im ca tng phng php lm c s la
Nu danh sch rng (L = R = nil):
Gn pt vo
d/s
{
L := R := q;
q^ . LPtr := nil;
q^ . RPtr := nil;
Nu danh sch khc rng :
{
q^ . LPtr := M^. LPtr;
q^ .RPtr := M;
M^. LPtr := q;
q^ .LPtr^. RPtr := q;
(1)
(2)
(3)
(4)
A B C D
L R
M
(1)
(1)
Hnh 2.6 Loi b mt phn t v tr M
Nu danh sch rng: (L = R = nil): Return
Loi b:
Nu :
{
L := L^. RPtr ;
L^ . LPtr := nil ;
Nu : M =L :
{
M^. PPtr^. LPtr := M^. LPtr;
M^. LPtr^. RPtr := M^. Rptr ;
(1)
(2)
{
R:= R^. LPtr ;
R^ . RPtr := nil ;
Nu : M =R :
Dispose (M);

Cu trc d liu - B mn CNPM Khoa CNTT HTN
41
chn phng php ci t thch hp cho tng ng dng:
- Ci t bng mng i hi phi xc nh s phn t ca mng, do nu
khng th c lng c s phn t trong danh sch th kh p dng cch ci t
ny mt cch hiu qu v nu khai bo thiu ch th mng thng xuyn b y,
khng th lm vic c cn nu khai bo qu tha th lng ph b nh.
- Ci t bng con tr thch hp cho s bin ng ca danh sch, danh sch
c th rng hoc ln tu ch ph thuc vo b nh ti a ca my. Tuy nhin ta
phi tn thm vng nh cho cc con tr (trng link).
- Ci t bng mng th thi gian xen hoc xo mt phn t t l vi s
phn t i sau v tr xen/ xa. Trong khi ci t bng con tr cc php ton ny mt
ch mt hng thi gian.
- Php truy nhp vo mt phn t trong danh sch, chng hn nh
PREVIOUS, ch tn mt hng thi gian i vi ci t bng mng, trong khi i vi
danh sch ci t bng con tr ta phi tm t u danh sch cho n v tr trc v
tr ca phn t hin hnh.Ni chung danh sch lin kt thch hp vi danh sch
c nhiu bin ng, tc l ta thng xuyn thm, xo cc phn t.





2.2 Ngn xp (Stack) v ng dng
2.2.1. nh ngha ngn xp
- Ngn xp (Stack) l mt danh sch c bit, trong vic thm vo hoc
loi b mt phn t ch thc hin ti mt u ca danh sch, u ny gi l
nh (TOP) ca ngn xp.
V d: Ta c th xem hnh nh trc quan ca ngn xp bng mt chng a
t trn bn. Mun thm vo chng 1 a ta a mi trn nh chng,
mun ly cc a ra khi chng ta cng phi ly a trn trc.
Nh vy ngn xp l mt cu trc c tnh cht vo sau - ra trc hay vo
trc ra sau (LIFO (last in - first out ) hay FILO (first in last out)).








? Cho bit u khuyt im ca danh sch c v danh sch lin kt
? u khuyt im ca cc loi danh sch lin lin kt

Cu trc d liu - B mn CNPM Khoa CNTT HTN
42
- Hnh nh ca ngn xp c dng nh sau:

















2.2.2 Cc php ton c bn trn ngn xp:
1- MAKENULL_STACK(S): to mt ngn xp rng.
2- POP(S,x) chng trnh con ly mt phn t ti nh ngn xp S lu vo
bin x .
3 - PUSH(x,S) chng trnh con thm mt phn t x vo u ngn xp.
4 - EMPTY_STACK(S) kim tra ngn xp rng. Hm cho kt qu true
nu ngn xp rng v false trong trng hp ngc li.

? Ta c th truy xut trc tip phn t ti v tr bt k trong ngn xp c khng?

2.2.3. Ci t ngn xp
Do ngn xp l mt danh sch c bit nn ta c th cu trc d liu danh sch
biu din n. Nh vy, ta c th khai bo ngn xp nh sau:
type Stack = List ( hoc = PList);
Tuy nhin, d hnh dung:
+ Trong cch ci t s dng mng ta nn thay trng Count = trng Top
+ Trong cch ci t s dng con tr, con tr qun l ngn xp t tn l Top
Khi chng ta dng danh sch biu din cho ngn xp th ta nn s dng cc
php ton trn danh sch ci t cc php ton trn ngn xp. Sau y l phn ci
t ngn xp bng danh sch.

Hnh 2.7 cu trc ngn xp

Cu trc d liu - B mn CNPM Khoa CNTT HTN
43
1- To ngn xp rng:
Procedure MakeNull_Stack( var S: Stack)
Begin
MakeNull_List(S);
End;
2 - Kim tra ngn xp rng:
Function Empty_Stack(var S: Stack )
Begin
Empty_Stack:= Empty_List(S);
End;
3 Hm tr v v tr nh ca ngn xp
Function Top(S: Stack): integer;
Begin
Top:=S.count;
End;
4 - Thm phn t vo ngn xp
Procedure Push(X: Item, var S: Stack);
Begin
Insert_List (x, First (S), S);
End;
5 Ly 1 phn t ra khi ngn xp S lu v bin x x l: dnh cho bn c
Nhn xt:
Nh trn ta thy, ta hon ton c th dng danh sch biu din cho mt ngn xp
v dng cc php ton c ci t ca danh sch ci t cc php ton trn
ngn xp. Ngoi ra, ta c th ci t ngn xp trc tip bi mng hoc con tr, v ci
t trc tip cc php ton trn ngn xp m khng phi gi ti cc php ton ca danh
sch. Xem nh bi tp dnh cho bn c
2.2.4. ng dng ngn xp
Cu trc ngn xp thch hp vi vic lu tr cc loi d liu m c trnh t lu tr
ngc vi trnh t truy xut d liu, ngn xp ng vai tr l vng nh tam thi do
mt s ng dng sau y thng dng n ngn xp:
1) Trong trnh bin dch (hoc thng dch), khi cn thc hin cc th tc (hoc hm),
ngn xp c dng lu tr mi trng ca th tc.
2) Trong mt s bi ton l thuyt th (v d: Tm ng i, .), ngn xp c
dng lu tr cc d liu trung gian khi gii cc bi ton ny (v d lu vt
ng i, )
3) Ngoi ra, ngn xp cn c s dng trong cc trng hp kh quy loi b
tnh qui ca chng trnh
V d:

Cu trc d liu - B mn CNPM Khoa CNTT HTN
44
Nu mt chng trnh con qui P(x) c gi t chng trnh chnh ta ni chng
trnh con c thc hin mc 1. Chng trnh con ny gi chnh n, ta ni n i
su vo mc 2... cho n mt mc k. R rng mc k phi thc hin xong th mc k-1
mi c thc hin tip tc, hay ta cn ni l chng trnh con quay v mc k-1.
Trong khi mt chng trnh con t mc i i vo mc i+1 th cc bin cc b ca
mc i v a ch ca m lnh cn dang d phi c lu tr, a ch ny gi l a
ch tr v. Khi t mc i+1 quay v mc i cc gi tr c s dng. Nh vy
nhng bin cc b v a ch lu sau c dng trc. Tnh cht ny gi cho ta
dng mt ngn xp lu gi cc gi tr cn thit ca mi ln gi ti chng trnh
con. Mi khi li v mt mc th cc gi tr ny c ly ra tip tc thc hin mc
ny. Ta c th tm tt qu trnh nh sau:
Bc 1: Lu cc bin cc b v a ch tr v.
Bc 2: Nu tho iu kin ngng qui th chuyn sang bc 3. Nu khng
th tnh ton tng phn v quay li bc 1 ( qui tip).
Bc 3: Khi phc li cc bin cc b v a ch tr v.
Bi tp - tho lun
Nu phng php tnh gi tr biu thc theo k php nghch o Balan s dng ngn
xp
2.3. Hng i (QUEUE)
2.3.1. nh ngha hng i
Hng i, hay ngn gn l hng (queue) l mt danh sch c bit m php
thm vo ch thc hin ti mt u ca hng, gi l cui hng (REAR), cn php
loi b th thc hin u kia ca hng, gi l u hng (FRONT).
V d: Khi ta xp hng mua v xem phim l mt hnh nh trc quan ca khi nim
trn, ngi mi n thm vo cui hng cn ngi u hng mua v v ra khi
hng, v vy hng cn c gi l cu trc FIFO (first in - first out) hay "vo trc -
ra trc".
Hnh nh ca hng c dng nh sau:
A1 A2 A3 A4



By gi chng ta s tho lun mt vi php ton c bn nht trn hng
2.3.2 Cc php ton c bn trn hng
- MAKENULL_QUEUE(Q) khi to mt hng rng.
- FRONT(Q) hm tr v phn t u tin ca hng Q.
- INSERT_QUEUE(x,Q) thm phn t x vo cui hng Q.
- DEQUEUE(Q): xo phn t ti u ca hng Q.
- EMPTY_QUEUE(Q) hm kim tra hng rng.
Front Rear
Hnh 2.8 Hnh nh hng

Cu trc d liu - B mn CNPM Khoa CNTT HTN
45
- FULL_QUEUE(Q) kim tra hng y.
2.3.3 Ci t hng i
Nh trnh by trong phn ngn xp, ta hon ton c th dng danh sch
biu din cho mt hng v dng cc php ton c ci t ca danh sch ci
t cc php ton trn hng. Tuy nhin lm nh vy c khi s khng hiu qu,
chng hn dng danh sch ci t bng mng ta thy li gi
INSERT_LIST(x,ENDLIST(Q),Q) tn mt hng thi gian trong khi li gi
DELETE_LIST(FIRST(Q),Q) xo phn t u hng (phn t v tr 0 ca
mng) ta phi tn thi gian t l vi s cc phn t trong hng thc hin vic di
ton b hng ln mt v tr. ci t hiu qu hn ta phi c mt suy ngh khc
da trn tnh cht c bit ca php thm v loi b mt phn t trong hng, l s
dng trc tip mng v con tr ci t hng.
2.3.3.1 Ci t hng bng mng
Ta dng mt mng cha cc phn t ca hng (gi s hng c ti a n phn
t), khi u phn t u tin ca hng c a vo v tr th 1 ca mng, phn
t th 2 vo v tr th 2 ca mng... Gi s hng c n phn t, ta c front=1 v
rear=n.
+ Khi xo mt phn t front tng ln 1,
+ Khi thm mt phn t rear tng ln 1.
Nh vy hng c khuynh hng i xung, n mt lc no ta khng th
thm vo hng c na (rear = n) d mng cn nhiu ch trng (cc v tr trc
front) trng hp ny ta gi l hng b trn. Trong trng hp ton b mng
cha cc phn t ca hng ta gi l hng b y.
Cc cch khc phc hng b trn
1 - Di ton b hng ln front -1 v tr: cch ny gi l di chuyn tnh
tin. Trong trng hp ny ta lun c front<=rear. (Hnh 2.9, minh ha cho cch
ny)













Rear
Front
Hng trn
1
2
3
4
5
6
7
8 Rear
Front
1
2
3
4
5
6
7
8
Hng sau khi tnh tin
Hnh 2.9 Tnh tin hng

Cu trc d liu - B mn CNPM Khoa CNTT HTN
46
2 - Xem mng nh l mt vng trn: Ngha l khi hng b trn nhng cha y
ta thm phn t mi vo v tr 1 ca mng, thm mt phn t mi na th thm
vo v tr 2 (nu c th)...R rng cch lm ny front c th ln hn rear. Cch
khc phc ny gi l dng mng xoay vng (xem Hnh 2.10).









Hnh 2.10: Ci t hng bng mng xoay vng
Vi phng php ny, khi hng b trn, tc l rear = n, nhng cha y, tc l
front>1, th ta thm phn t mi vo v tr 1 ca mng v c tip tc thm vo v
tr tip theo (nu cn trng), v t 1 n front-1 l cc v tr trng.
a) Dng ci t hng
Const n =... ; {chiu di ti a ca mng}
Type Item = .; {Kiu d liu ca cc phn t trong hng}
Queue = Record
Elements: Array[1..n] of Item; //Lu tr ni dung cc phn t
Front, Rear: 0 .. n; {ch s u v ui hng}
Count: 0..n; {m s phn t hin c trong hng}
End;
Var Q: Queue;
b) Cc php ton trn hng trn
1 - To hng rng
Ta thy: Lc ny front v rear khng tr n v tr hp l no trong mng vy ta c
th cho front v rear u bng 0, count=0.
Procedure MakeNull_Queue( var Q: Queue )
Begin
Q.Front=1;
Q.Rear=0;
Q.count:=0
End;
2- Kim tra hng rng
Function Empty_Queue(Queue Q):Boolean;

2


3

...................
1 n
n-1
Rear
Front

Cu trc d liu - B mn CNPM Khoa CNTT HTN
47
Begin
Empty_Queue := Q.Count=0;
End;
3 - Kim tra hng y
Hng y nu ton b cc trong mng ang cha cc phn t ca hng, tc
Count = Maxlength
Function Full_Queue(Q: Queue): Boolean;
Begin
Full_Queue:= Q.count=n;
End;
Lu :
Nu bin lun tnh y theo Front v Real, ta thy vi phng php ny th front c
th ln hn rear. Ta c hai trng hp hng y nh sau:
- Trng hp Q.Rear=n v Q.Front =1
- Trng hp Q.Front =Q.Rear+1.
n gin ta c th gom c hai trng hp trn li theo mt cng thc nh sau:
(Q.rear-Q.front +1) mod n=0
3 - Xa mt phn t ra khi hng
Cc bc lm:
Khi xa mt phn t ra khi hng ta lm nh sau:
- Nu hng rng th bo li khng xa;
- Nu hng khc rng:
Cp nht li gi tr ca Front v count nh sau:
Nu hng ch cn 1 phn t th khi to li hng rng;
Ngc li, thay i gi tr ca Q.Front nh sau:
Nu Q.front <>n th t li Q.front = Q.Front +1;
Ngc li Q.front=1
Gii Thut
Procedure DeQueue(Var Q: Queue)
Begin
if ( not Empty_Queue(Q)) then
begin
{ Nu hng ch cha mt phn t th khi to li hng}
if (Q.count= 0 ) then MakeNull_Queue(Q);
else
if Q. Front <>n then Q.Front : = Q.Front+1
Else Q.Front := 1;

Cu trc d liu - B mn CNPM Khoa CNTT HTN
48
Q.count:= Q.count 1;
end
else Writeln(Loi: Hang rong!);
End;
4 - Thm mt phn t vo hng
Khi thm mt phn t vo hng th c th xy ra cc trng hp sau:
- Trng hp hng y th bo li v khng thm;
- Ngc li, thay i gi tr ca Q.Rear (Nu Q.Rear = n th t li Q.rear=1;
Ngc li Q.rear =Q.rear+1) v t ni dung cn thm vo v tr Q.rear mi.
Procedure Insert_Queue(X: Item,Var Q: Queue)
Begin
if (not Full_Queue(Q)) Then
Begin
If (Q.Rear <>MaxQueue) then
Q.Rear := Q.Rear +1
Else Q.Rear := 1;
Q.Elements[Q.Rear] := x;
End
else Writeln(Loi: Hang day!);
End;

? Ci t hng bng mng vng c u im g so vi bng mng theo phng
php tnh tin? Trong ngn ng lp trnh c kiu d liu mng vng khng?


2.3.3.2. Ci t hng bng danh sch lin kt (ci t bng con tr)
Cch t nhin nht l dng hai con tr front v rear tr ti phn t u v
cui hng. Hng c ci t nh mt danh sch lin kt
a) Dng ci t:
Type Node = record
Infor: ITem; {lu gi tr ca phn t }
Next: ^Node; //Con tr ch k tip
End;
Queue = Record
Front, Rear: ^ Node; {l hai trng ch n u v cui
ca hng}
End;

Cu trc d liu - B mn CNPM Khoa CNTT HTN
49
b) Ci t cc php ton
1 - Khi to hng rng
Khi hng rng Front va Rear cng tr v xung t (c gi r nil)
Procedure MakeNullQueue(var Q: Queue )
Begin
Q.Rear :=nil;
Q.Front :=nil;
End;
2 - Kim tra hng rng
Hng rng nu Front v Rear cng c gi tr nil
Function EmptyQueue(Q: Queue Q): Boolean;
Begin
If (Q.Front = nil)and(Q.Rear=nil) then
EmptyQueue := true
Else EmptyQueue:=false;
End;
3 - Cc php ton cn li xem nh bi tp dnh cho bn c
2.3.4. Mt s ng dng ca cu trc hng
Hng i l mt cu trc d liu c dng kh ph bin trong thit k gii thut.
Bt k ni no ta cn qun l d liu, qu trnh... theo kiu vo trc - ra trc u
c th ng dng hng i.
V d rt d thy l qun l in trn mng, nhiu my tnh yu cu in ng thi v
ngay c mt my tnh cng yu cu in nhiu ln. Ni chung c nhiu yu cu in d
liu, nhng my in khng th p ng tc thi tt c cc yu cu nn chng
trnh qun l in s thit lp mt hng i qun l cc yu cu. Yu cu no m
chng trnh qun l in nhn trc n s gii quyt trc.
Cc gii thut duyt theo chiu rng mt th c hng hoc v hng cng
dng hng i qun l cc nt th. Cc gii thut i biu thc trung t thnh
hu t, tin t cng cn dng n cu trc hng.

Cu trc d liu - B mn CNPM Khoa CNTT HTN
50


Chng 3 M hnh d liu Cy
Tng quan:
1. Mc tiu
Sau khi hc xong chng ny, sinh vin phi:
- Nm vng khi nim v cy, phn bit cc m hnh cy: Cy tng qut, cy nh
phn, cy nh phn tm kim, ...
- Biu din v ci t c cc php ton c bn trn cy
2. Ni dung chnh
Trong chng ny chng ta s nghin cu cc vn sau:
- Cc thut ng c bn.
- Cc m hnh d liu Cy
- Cc cch biu din cy trn my tnh v ci t chng
3.1 Cy tng qut
Cy tng qut hay cn gi l cy a phn gi tt l cy
3.1.1 nh ngha cy v cc khi nim c bn trn cy
C nhiu cch nh ngha cy, sau y ta nh ngha bng quy nh sau :
1) Tp c mt nh l mt cy, cy ny c gc l nh duy nht ca n.
2) Gi s T
1
, T
2
, ... , T
k
(k > 1) l cc cy c gc tng ng l r
1
, r
2
, ... , r
k
; cc cy T
1

, T
2
, ... , T
k
i mt khng ct nhau. Nu r l mt nh khng thuc cc cy T
1
, T
2
,
... , T
k
th th tp T gm nh r v tt c cc nh ca cc cy T
i
lm thnh mt cy mi
gc r.






V d v cy:
Xt mc lc ca mt quyn sch. Mc lc ny c th xem l mt cy:







Hnh III.1 - Cy mc lc mt quyn sch
r
r
1
r
2
r
k

T
1
T
2
T
k

Hnh 3.1 Cy mc lc ca mt quyn sch

Cu trc d liu - B mn CNPM Khoa CNTT HTN
51
Nh vy cy bao gm mt tp hu hn cc nh, trong c mt nh c bit gi l
gc (root). Gia cc nh c mt quan h phn cp gi l quan h cha - con. Nu a l
nh gc ca mt cy cn b l gc cy con ca nh a th ta ni a l nh cha cn b l
nh con.
+ Nu tp cc nh = rng => Cy l cy rng
+ S cc cy con mi nh c gi l bc ca nh . nh c bc = 0 gi l l
(nh tn cng), nh khng l l gi l nh trong.
+ Cc nh c cng cha gi l anh em, xt t tri sang phi
+ Chiu cao ca cy (height) ca cy l s mc ln nht ca nh c trn cy
+ Tp cc cy con phn bit ngi ta gi l Rng
+ Gc ca cy c mc 1 (level = 1). Nu nh cha c mc i th cc nh con ca n
s c mc l i+1
+ Mt dy cc nh a
1
, a
2
, ... , a
n
(n>0) sao cho a
i
l cha ca a
i+1
gi l mt ng i
t a
1
n a
n
vi di n-1. Lun tn ti ng i t gc n mt nh bt k trong
cy.
+ Trong mt cy T, mi nh a ca n l gc ca mt cy no gi l cy con ca
T.
+ Cy c sp: Cc nh trong cy c sp xp theo th t no . Nu nh a c
cc nh con b
1
, b
2
, ..., b
m
theo th t ny th ta ni b
1
l con trng v b
2
l em lin
k ca n.
3.1.2 Cc php ton c bn trn cy
Xt cy gc T:
- Hm PARENT(n) tr v nt cha ca nt n trn cy T, nu n l nt gc th
hm cho gi tr $. Trong ci t c th th $ l mt gi tr no do ta chn, n
ph thuc vo cu trc d liu m ta dng ci t cy.
- Hm ELDEST_CHILD(n) cho nt con tri nht ca nt n trn cy T, nu n
l l th hm cho gi tr $.
- Hm NEXT_SIBLING(n) cho nt anh em rut phi nt n trn cy T, nu n
khng c anh em rut phi th hm cho gi tr $.
- Hm value(n) Tr v gi tr lu ti nt n ca cy T.
3.1.3 Cc cch thm ( duyt) cy
- Duyt cy: L php thm cc nh trn cy, sao cho mi nh ch c thm duy nht
mt ln
- Xt cy tng qut sau:






Cu trc d liu - B mn CNPM Khoa CNTT HTN
52












* Xt ba phng php duyt cy c bn:
- Duyt cy theo th t trc Preorder
- Duyt cy theo th t gia Inorder
- Duyt cy theo th t sau - Postorder .
* Nguyn tc duyt, gii thut tng ng vi tng phng php:
Gi s xt cy gc T

1) Duyt theo t t trc (PreOrder Tree)
* Nguyn tc duyt cy theo th t trc
















Nu cy rng(T = nil): Khng lm g

PreOrder (T)
Nu cy khng rng :

{
1.Thm gc T
2.Thm cc cy con T
1
, T
2
, T
3
, .., T
n
theo
th t trc
=> Gc T
1
T
2
T
3
.. T
n

A
B C D
F E G
H I J
T
Hnh 3.2 Hnh nh mt cy

Cu trc d liu - B mn CNPM Khoa CNTT HTN
53

V d: Xt cy







* Gii thut:
Procedure PreOrder (T: nodeType);
Var C: nodeType;
Begin
Visit (T); {Thm gc}
C := Eldestchild (T); { con c}
While (C<>$) do
Begin
PreOrder (C);
C := NextSibling (C); {em lin k}
End;
End;
2) Duyt theo th t gia (InOrder Tree)
* Nguyn tc duyt cy theo th t gia:














Nu cy rng(T = nil): Khng lm g

+InOrder T
Nu cy khng rng
:

{
1. Duyt cy con th nht T
1
ca
gc T theo th t gia
2. Thm gc ca T
3 Duyt cc cy con cn li T
2
, T
3
,
...., T
n
theo th t gia

A B CFHIEJ DG ==>
kq
(

(

(

gc T
1

T
2

T
3

(

B C D
F E G
H I J
A
T
T
1
T
2
T
3
1
2
3
4
5 6
7
8
9
10

Cu trc d liu - B mn CNPM Khoa CNTT HTN
54
* V d: Xt cy








* Gii thut:
Procedure InOrder (T: nodeType);
Var C: nodeType;
Begin
C := EldestChild (T); { con c}
If (C <> $) then
begin
InOrder(C);
C := NextSibling (C); {em lin k}
end;
Visit(T); {thm gc}
While (C <> $) do
Begin
InOrder (C);
C := NextSibling (C); {em lin k}
End;
End;
3) Duyt theo th t sau
* Nguyn tc duyt cy theo th t sau:









B A HFICJE GD ==>
kq
(

(

(

gc T
1

T
2

(

T
3

B C D
F E G
H I J
A
T
T
1
T
2
T
3
2
1
6
4
3 5
8
7
10
9
Nu cy rng(T = nil): Khng lm g

PostOrder T
Nu cy khng rng :

{
1.Thm gc T
2.Thm cc cy con T
1
, T
2
, T
3
, .., T
n

theo th t sau
=> Gc -> T
1
->

T
2
-> T
3
->

.. T
n



Cu trc d liu - B mn CNPM Khoa CNTT HTN
55
* V d: Xt cy










* Gii thut:
Procedure PostOrder (T: nodeType);
Var C: nodeType;
Begin
C := EldestChild (R); { con c}
While (C <> $) do
Begin
PostOrder (C);
C := NextSibling (C); {em lin k}
End;
Visit (R); {Thm cha}
End;
3.1.4. Ci t cy
3.1.4.1 Biu din cy bng danh sch cc con ca mi nh
a) S dng mng biu din cy
Biu din cy di dng mi nt c mt danh sch cc nt con. Danh sch cc con
c th ci t bng bt k cch no chng ta bit, tuy nhin v s nt con ca mt
nt l khng bit trc nn dng danh sch lin kt s thch hp hn. tin cho
vic truy cp n cc nh trn cy ta nn t chc lu tr cc nh ny s dng cu
trc mng, gi s ta gn ch danh cho cc nt ln lt l 1,2,.n
V d: Xt cy bn tri di y c m t bi mng nh sau :




=>

B HIFJEC GD A ==>
kq
(

(

(

gc
T
1
T
2

T
3
T
3

(

B C D
F E G
H I J
A
T
T
1
T
2
T
3
10
1
7
4
2 3
6
5
9
8

Cu trc d liu - B mn CNPM Khoa CNTT HTN
56

















* Dng ci t tng ng s l:
Const n = MaxNode;
Type Item = <kiu thng tin ca nh>;
Pointer = ^ Member;
Member = Record
Id: 1 .. n; {ID: ch danh ca nh}
Next: Pointer; {Next: tr ti em lin k}
End;
Node = Record
Info: Item; {cha gi ca phn t lu ti nh cy}
Child : Pointer; {con tr, tr ti con u tin trong danh
sch cc con ca n}
End;
Tree = Array [ 1 .. n ] of Node; {cy l mt mng}
Var T: Tree;
*) Cc php ton tc ng trn cy
1 - Cho mt nh th k trn cy T, tm con c ca n
Function EldestChild (k: in): 0 .. n;
Begin
if (T[k].Child <> nil) then
4
A
B C
D
E
F G H
M I K
1
2 3
5
8 7 6
9 10
9
11
9
Info Child
















.
2
C
B
A
D
E
F
G
H
I
M
K
Id Next
3
4 5
6 7 8
9 10
11
TT
1
2
3
4
5
6
7
8
9
10
11
.
n
.
.
.
n
Hnh nh cy
sau khi ci t
Hnh 3.3 Cy v hnh nh cy biu din bi danh sch cc con ca mi nh

Cu trc d liu - B mn CNPM Khoa CNTT HTN
57
EldestChild := T[k].Child^.Id;
Else EldestChild := 0;
End;
2 - Cho mt nh th k trn cy T, Tm cha ca n
Function Parent (k: 1 .. n): 0 .. n;
Var i: 1 .. n; p: pointer; found : boolean;
Begin
i := 1; found := false;
While ( i<= maxNode)and(not found) do
begin
p := T[i].child;
While ( p<>nil)and(not found) do
if (p^. Id = k) then
begin
parent := i; found := true;
end
else p := p^. Next;
i := i + 1;
end;
if (not found) then parent := 0;
End;
3 Cc php ton cn li xem nh bi tp dnh cho bn c
b) S dng con tr biu din cy
Nu ta bit trc s con ti a ca mi nh trn cy, ta c th dng mng lu danh
sch cc con ny
* Dng ci t
const K = ... ; {K l s ti a cc con ca mi nh}
type pointer = ^node;
node = record
info : Item; {lu thng tin ca nh}
childs : array[1..K] of pointer; {mng cha cc con ca nh}
end;
var Root : pointer; {Root l con tr, tr ti gc cy}
* Ci t cc php ton c bn vi dng ci t ny: xem nh bi tp dnh cho bn
c



Cu trc d liu - B mn CNPM Khoa CNTT HTN
58
3.1.4.2 Biu din cy bng con trng v em lin k ca mi nh
1. Ci t bi mng :
a) Dng ci t
Mi nh trn cy c ci t nh mt node nh sau:
Type Node = record
info : Item; {Lu gi tr ca phn t lu ti nh}
EldestChild : 0..N; {Cha ch danh ca nh l con trng}
NextSibling : 0..N; {Cha ch danh ca nh l em lin k}
end;
Tree = array[1..N] of node; {cy l mt mng cc nt}
V d: Xt cy sau:
















b) Cc php ton
Vi cch ci t ny ta thy d dng tm con trng v em lin k ca nh k xem
nh bi tp dnh cho bn c, y ta xt php ton tm cha ca nh k trn cy T.
tm cha ca nh th k trn cy T, ta lm nh sau:
Duyt ln lt cc nh trn cy, xut pht t gc (i =1), kim tra xem con trng J
ca i c = k hay khng? Nu c => i chnh l cha cn tm, ngc li, kim tra em lin
k ca con trng j xem c = k hay khng, nu c th i chnh l l cn tm, nu khng
kim tra j l em lin k ca j c, c tip tc nh vy cho n khi kim tra ht cc con
ca i m khng c con no = k th duyt nh i tip theo trn cy, ngc li th dng
vic tm kim v kt lun i chnh l nh cha cn tm.

a1
a2 a3
a4
a5
E
a6 a7 a8
M a9 A
1
1
2 3
5
8 7 6
9 10
9
11
9
Cy sau khi ci t c
dng nh sau:
=============
ID Infor EldestChild NextSibling
1 a1 2 0
2 a2 4 3
3 a3 6 0
4 a4 0 5
5 a5 9 0
6 a6 0 7
7 a7 11 8
8 a8 0 0
9 a9 0 10
10 A 0 0
11 M 0 0

n

Hnh 3.4 Cy v hnh nh cy c biu din bi mng cc con
trng v em lin k ca mi nh

Cu trc d liu - B mn CNPM Khoa CNTT HTN
59
Gii thut:
function Parent(k : 1..N): 0..N;
var i,j : 0..N ; found : boolean;
begin
i := 1; found := false;
while (i<=N) and (not found) do
begin
j := T[i].EldestChild;
if j=k then
begin
parent := i; found := true;
end
else
begin
j := T[j].Nextsibling;
while (j<>0) and (not found) do
if j=k then
begin
parent := i; found := true;
end
else j := T[j].NextSibling;
end;
i:=i+1;
end;
if not found then parent := 0;
end;
2. Ci t cy bi con tr :
* Dng ci t
type
pointer = ^node;
node = record
info : Item; {lu thng tin phn t ca nh}
eldestchild : pointer; {Eldestchild: Tr ti gc cy con c ca inh}
Nextsibling : pointer; {NextSibling: Tr ti gc em lin k ca nh}
end;
var Root : pointer; {l con tr qun l cy, lun tr ti gc cy}
Cu trc cu 1 nt c dng nh sau:
eldestchild
Info
Nextsibling


Cu trc d liu - B mn CNPM Khoa CNTT HTN
60
V d: Xt cy sau:






.










?
Hy so sch cc u khuyt im ca cc cch ci t cy.

Nhn xt:
Vi cch ci t ny ta thy: Cy rng: Root = nil ; l cch biu din ta chuyn cy
a phn tr v cy nh phn tng ng
* Ci t cc php ton c bn trn cy: xem nh bi tp dnh cho bn c
3.1.4.3 Biu din cy bi cha ca mi nh
V d: Xt cy



=>







a1
a2 a3
a4
a5
E
a6 a7 a8
M a9 A
1
1
2 3
5
8 7 6
9 10
9
11
9
Cy sau khi ci t c
dng nh sau:
=============
a1 nil

a2

a3 nil

nil a4

nil a9

nil a6

a5 nil

nil A nil

a7

nil a8 nil
nil M nil

Root
Hnh 3.5 Cy v hnh nh cy c biu din bi con trng v em
lin k ca mi inh s dng con tr
A
B C
D
E
F G H
M I K
1
2 3
4 5
8 7 6
9 10
9
11
9
Node Info Parent
1 A
2 B 1
3 C 1
4 D 2
5 E 2
6 F 3
7 G 3
8 H 3
9 I 5
10 K 5
11 M 7
Hnh nh cy
sau khi ci t
Hnh 3.6 Cy v hnh nh cy c biu din bi cha ca mi nh
s dng con tr

Cu trc d liu - B mn CNPM Khoa CNTT HTN
61



Ci t:
const N = ... ;
type Node = record
info : Item;
parent : 0..N;
end;
Tree = array[1..N] of Node;
var T : Tree;
Cc php ton quan trng trn cy
1 - Cho mt nh k , tm nh cha ca n
Function Parent ( k: Integer; T: Tree): Integer;
Begin
If k = 0 then Parent := 0
Else Parent :=T[k].Parent;
End;
2 - Cho mt nh k , tm nh con c ca n
Function EldestChild (k: Integer; T: Tree): Integer;
Var p, i : 0 MaxNode ; found: Boolean;
Begin {1}
If k = 0 then EldestChild := 0;
i:=1; found:=false;
While ( i<=MaxNode) and (not found) do
Begin {2}
p :=T[i].Parent;
If k=p then
Begin {3}
EldestChild := i;
found := true;
End; {3}
i:=i+1;
End; {2}
If ( not found) then EldestChild := 0;
End; {1}


Cu trc d liu - B mn CNPM Khoa CNTT HTN
62
3 - Cho mt nh k , tm em lin k ca n
Function NextSibling ( k: Integer; T: Tree): Boolean;
Var p, i : 0 .. MaxNode ; found: Boolean;
Begin {1}
p := T[k].Parent;
If p = 0 then NextSibling := 0
Else
Begin {2}
i := k+1; { v nh em lin k > nh anh l 1}
found := false;
while ( i <= MaxNode) and (not found) do
begin {3}
if (T[i].Parent = p) then
begin {4}
NextSibling := i;
Found:= true;
end; {4}
i:= i+1;
end; {3}
if (not found) then NextSibling := 0;
End; {2}
End; {1}


4 Ly gi tr lu ti nt th k trn cy T
Function Value(k:integer): Item;
Begin
Value := T[k].info;
End;
3.2 Cy nh phn (binary tree)
3.2.1 nh ngha
Cy nh phn l cy rng hoc l cy m mi nt c ti a hai nt con. Trong
cc nt con ca cy c phn bit th t r rng, mt nt con gi l nt con tri
v mt nt con gi l nt con phi.
Ta qui c v nt con tri bn tri nt cha v nt con phi bn phi nt cha,
mi nt con c ni vi nt cha ca n bi mt on thng.
V d: Hai cy nh phn s au l khc nhau: mt c y c c on t r i v mt
c y c c on phi

Cu trc d liu - B mn CNPM Khoa CNTT HTN
63




* Cc dng cy nh phn c bit









( y l cc dng ca cy nh phn suy bin, c dng l mt danh sch )








Nhn xt:

+ Trong cy nh phn c cng s nh
- Cy nh phn suy bin c chiu cao ln nht
- Cy nh phn y c chiu cao nh nht
+ Vi cy nh phn y cn ch ti mt s tnh cht
- S lng t a cc nh mc i l 2
i 1

- S lng ti a cc nh trn cy c chiu cao h l: 2
h
- 1

3.2.2. Duyt cy nh phn
Ta c th p dng cc php duyt cy tng qut duyt cy nh phn. Tuy nhin
v cy nh phn l cu trc cy c bit nn cc php duyt cy nh phn cng n
gin hn.
C ba cch duyt cy nh phn thng dng (xem kt hp vi Hnh 3.7):
A
B B
A








Cy nh phn hon chnh: Cc nt
ng vi cc mc tr mc gn
mc cui cng u c 2 con







Cy nh phn y : Cc nt c
bc ti a mi mc k c mc
gn mc cui cng










Cy Zic-Zc









cy lch tri cy lch phi

Cu trc d liu - B mn CNPM Khoa CNTT HTN
64







- Duyt tin t - th t trc (root-Left-Right): duyt nt gc, duyt tin t con
tri ri duyt tin t con phi.
- Duyt trung t - duyt theo th t gia (Left-Root-Right): duyt trung t con
tri ri n nt gc sau l duyt trung t con phi.
- Duyt hu t - duyt theo th t sau(Left-Right-Root): duyt hu t con tri
ri duyt hu t con phi sau l nt gc.
Ch :
Danh sch duyt tin t, hu t ca cy nh phn trng vi danh sch duyt tin
t, hu t ca cy khi ta p dng php duyt cy tng qut. Nhng danh sch
duyt trung t th khc nhau.
V d: Xt cy:








Cc danh sch duyt cy nh phn Cc danh sch duyt cy tng qut

Tin t: ABDHIEJCFKLGM ABDHIEJCFKLGM

Trung t: HDIBJEAKFLCGM HDIBJEAKFLCMG

Hu t: HIDJEBKLFMGCA HIDJEBKLFMGCA

?
1. Danh sch duyt tin t v hu t ca cy nh phn lun lun ging vi
danh sch duyt ca cy tng qut. (ng / Sai)
2. Danh sch duyt trung t ca cy nh phn s khc vi cc
duyt tng qut ch khi cy nh phn b khuyt con tri? (ng/ Sai)
B C
D E F G
H I J K M L
A
root
left right
Hnh 3.7 Cy nh phn

Cu trc d liu - B mn CNPM Khoa CNTT HTN
65

3.2.3 Ci t cy nh phn
a) Biu din cy nh phn bng mng
const maxNode = ?;
Type Item = <Kiu d liu ca cc >;
Node = Record
Infor : Item;{lu gi tr ca nh}
Left, Right : 0 .. maxNode;{lu ch danh ca
con tri, con phi}
End;
Tree = Array[1 .. maxNode] of Node; {cy}
b) Biu din cy nh phn bng con tr
Type Item = <Kiu d liu thng tin ca nh> ;
PTree = ^ Node;
Node = Record
Infor : Item;
Left, Right : PTree;{tr ti gc cy con tri, con
phi}
End;
Var T : PTree; {T lun tr ti gc cy}
3.2.4 Cc php ton c bn trn cy nh phn
- Ta ci t cc php ton vi dng biu din cy bi con tr, vi dng biu din cn
vic ci t cc php ton xem nh bi tp dnh cho bn c
- Gi s xt cy c gc c tr bi con tr T, vi cch khai bo nh trn ta c th
thit k cc php ton c bn trn cy nh phn nh sau:
1 - To cy rng
Cy rng l mt cy l khng cha mt nt no c. Nh vy khi to cy rng ta ch
cn cho cy tr T tr ti gi tr Nil.
Procedure MakeNullTree(var T: PTree)
Begin
T : =Nil;
End;
2 - Kim tra cy rng
Fuction EmptyTree(T: PTree)
Begin
EmptyTree := T=nil;
End;


Cu trc d liu - B mn CNPM Khoa CNTT HTN
66
3 - Xc nh con tri ca mt nt c tr bi p
Function LeftChild(p: PTree): Ptree;
Begin
if (p<>NiL) then LeftChild:= p^.left
lse LeftChild := NiL;
End;
4 - Xc nh con phi ca mt nt c tr bi P
Function RightChild(p: PTree): Ptree;
Begin
if (p<>NiL) then RightChild:= p^.right
else RightChild := NiL;
End;
5 - Kim tra nt l:
Nu 1 nt l nt l th n khng c con, khi con tri v con phi ca n cng
bng nil
Function IsLeaf(p: PTree): boolean;
{ hm kim tra nt c tr bi con tr P c l nt l hay khng}
Begin
isLeaf := (LeftChild(p)=Nil)and(RightChild(p)=Nil);
End;
6 - Xc nh s nt ca cy
Function NumberNodes(T: PTree): integer;
Begin
if(EmptyTree(T)) NumberNodes:= 0
else NumberNodes:= 1+NumberNodes(LeftChild(T)+
NumberNodes(RightChild(T));
End;
7 - To cy mi t hai cy c sn
Cho hai cy con l, r v x l gi tr bt k. Hy to mt cy nh phn c
gc lu x v l,r l hai cy con tri, phi ca gc ny

Cch gii:
- yu cu MT cp pht nh lm gc ca cy
- x vo ngn Info ca nh va cp pht
- Gn l, r tng ng vo nhnh tri, phi ca gc



Cu trc d liu - B mn CNPM Khoa CNTT HTN
67
Gii thut:
Function Create2(v:Item,l: Ptree, r: Ptree): Ptree;
Var M: Ptree;
Begin
New(M); M^. Info :=v;
M^.left=l; M^.right=r;
Create2 := M;
End;
8 - Cc th tc duyt cy: tin t, trung t, hu t
Th tc duyt tin t
Procedure PreOrder(T: PTree)
Begin
if T<>nil then
Begin
Write(T^.Info: 5);
PreOrder(LeftChild(T));
PreOrder(RightChild(T));
End;
Th tc duyt trung t
Procedure InOrder(T: PTree)
Begin
if T<>nil then
Begin
InOrder(LeftChild(T));
Write(T^.Info: 5);
InOrder(RightChild(T));
End;
Th tc duyt hu t
Procedure PostOrder(T: PTree)
Begin
if T<>nil then
Begin
PostOrder(LeftChild(T));
PostOrder(RightChild(T));
Write(T^.Info: 5);
End;
?Hy s dng th tc Create2 to mt cy nh phn

Cu trc d liu - B mn CNPM Khoa CNTT HTN
68

3.3 Cy tm kim nh phn (binary search tree)
Ta thy rng, nhu cu tm kim l quan trng, trong hu ht cc h thng lu
tr, qun l d liu, thao tc tm kim l thao tc thng c dng nht khai thc
thng tin, i vi cy tng qut v cy a phn, vic tm kim b hn ch, tm kim
ta ch c th p dng phng php tm kim tun t, v vy ngi ta a ra mt cu
trc cy tha mn nhu cu tm kim trn bng cch to thm mt s rng buc trn cy
nh phn c gi l: Cy tm kim nh phn (TKNP), ta c th p dng phng
php tm kim nh phn tm thng tin lu trn cy ny.

3.3.1 nh ngha cy TKNP
Cy tm kim nh phn l mt cy nh phn tho mn cc iu kin sau:
iu kin 1:
Tt c cc kho ti cc nh ca cy con bn tri u c gi tr i trc (< ) cc
kho ti nh gc
iu kin 1:
Kho ti gc i trc (<) tt c cc kho cc nh ca cy con bn phi
iu kin 3:
Cy con bn tri v cy con bn phi cng l cy tm kim nh phn

* V d








Lu :
D liu lu tr ti mi nt c th rt phc tp,v d l mt record chng hn,
Khi , kho ca nt c tnh da trn mt trng no , ta gi l trng kho.
Trng kho phi cha cc gi tr c th so snh c, tc l n phi ly gi tr t
mt tp hp c th t.
Nhn xt:
- Trn cy TKNP khng c hai nt cng kho.
- Cy con ca mt cy TKNP l cy TKNP.
- Khi duyt trung t (InOrder) cy TKNP ta c mt dy c th t tng.

10
6 15
4 8 12 23
1 5 7 9 11 14 20
Hnh 3.8 Hnh nh 1 cy TKNP

Cu trc d liu - B mn CNPM Khoa CNTT HTN
69
3.3.2 Ci t cy tm kim nh phn
Cy TKNP, trc ht, l mt cy nh phn. Do ta c th p dng cc cch
ci t nh trnh by trong phn cy nh phn ci t cy nh phn tm kim,
iu lu y l mi nh trn cy phi c mt thnh phn kha, xc nh duy nht
cho nh .
Mt cch ci t cy TKNP thng gp l ci t bng con tr. Mi nt ca
cy nh l mt mu tin (record) c ti thiu ba trng: mt trng cha kho, hai
trng kia l hai con tr tr n hai nt con (nu nt con vng mt ta gn con tr bng
NIL)
*Dng ci t s dng con tr:
Type BSTree = ^ Node;
Node = Record
key : KeyType; {lu kha ca nh }
[cc trng lu thng tin khc nu c]
Left, Right: BSTree; {tr ti gc cy con tri, gc cy con
phi}
End;
Var Root: BSTree; {tr ti gc cy}
* Ci t s dng mng xem nh bi tp dnh cho bn c
Nhn xt
Cy NPTK c s khc bit so vi cy nh phn v cc php ton. Vi
cy nh phn tm kim ta c cc php ton nh: tm kim, thm hoc xo mt
nt trn cy TKNP cy sau khi xoa phi lun m bo tnh cht cu cy TKNP.
3.3.3 Cc php ton c bn trn cy tm kim nh phn
1- Khi to cy TKNP rng
Ta cho con tr qun l nt gc (Root) ca cy bng NIL.
Procedure MakeNullTree(Var Root: BSTree)
Begin
Root :=NiL;
End;
2 - Tm kim mt nt c kha cho trc trn cy TKNP
tm kim 1 nt c kho x trn cy TKNP, ta tin hnh t nt gc bng cch so
snh kho ca nt gc vi kho x.
- Nu nt gc bng NULL th khng c kho x trn cy.
- Ngc li, Nu x bng kho ca nt gc th gii thut dng v ta tm c nt
cha kho x.
- Nu x ln hn kho ca nt gc th ta tin hnh vic tm kho x trn cy con
bn phi.
- Nu x nh hn kho ca nt gc th ta tin hnh vic tm kho x trn cy con

Cu trc d liu - B mn CNPM Khoa CNTT HTN
70
bn tri.
V d: tm nt c kho 30 trong cy trong Hnh 3.9 nh sau:











- So snh 30 vi kho nt gc l 20, v 30 > 20 vy ta tm tip trn cy con
bn phi, tc l cy c nt gc c kho l 35.
- So snh 30 vi kho ca nt gc l 35, v 30 < 35 vy ta tm tip trn cy
con bn tri, tc l cy c nt gc c kho l 22.
- So snh 30 vi kho ca nt gc l 22, v 30 > 22 vy ta tm tip trn cy
con bn phi, tc l cy c nt gc c kho l 30.
- So snh 30 vi kho nt gc l 30, 30 = 30 vy n y gii thut dng v
ta tm c nt cha kho cn tm.
Gii thut di y tr v kt qu l con tr tr ti nt cha kho x hoc Nil nu
khng tm thy kho x trn cy TKNP.
Procedure SEARCH ( Var P: BSTree; x: KeyType, Root: BSTree );
Var found: Boolean;
Begin
p := root;
found := false;
While ( p <> nil)And( Not found) do
if p^.key = x then found := true
else
if ( x < p^.key) then p := p^.Left
else p := p^.Right;
End;
? Cy tm kim nh phn c t chc nh th no qu trnh tm kim
c hiu qu nht?

Nhn xt:
20
10 35
5 17 22 42
15 30
Hnh 3.9 hnh nh mt cy TKNP

Cu trc d liu - B mn CNPM Khoa CNTT HTN
71
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 cy cn bng cc bn c th tham kho
thm trong cc ti liu tham kho ca mn hc ny.
3 - Thm mt nt c kha cho trc vo cy TKNP
* Phn tch bi ton
Theo nh ngha cy tm kim nh phn ta thy trn cy tm kim nh phn khng
c hai nt c cng mt kho. Do nu ta mun thm mt nt c kho x vo cy
TKNP th:
- Trc ht ta phi tm kim xc nh c nt no cha kho x cha?
+ Nu c th gii thut kt thc (khng lm g c!).
+ Ngc li, s thm mt nt mi cha kho x ny.
- Thm kho x vo cy TKNP m bo cu trc cy TKNP khng b ph v.
C nhiu cch thm, tuy nhin trnh phc tp, ngi ta thng thc hin
thm mc l
* Cch gii c th nh sau:
Ta tin hnh t nt gc bng cch so snh kha cu nt gc vi kho x.
- Nu nt gc bng Nil th kho x cha c trn cy, do ta thm mt nt mi
cha kho x.
- Nu x bng kho ca nt gc th gii thut dng, trng hp ny ta khng thm nt.
- Nu x ln hn kho ca nt gc th ta tin hnh (mt cch qui) gii thut ny
trn cy con bn phi.
- Nu x nh hn kho ca nt gc th ta tin hnh (mt cch qui) gii thut ny
trn cy con bn tri.
V d: thm kho 19 vo cy trong Hnh 3.9, ta lm nh sau:
- So snh 19 vi kho ca nt gc l 20, v 19 < 20 vy ta xt tip n cy bn
tri, tc l cy c nt gc c kho l 10.
- So snh 19 vi kho ca nt gc l 10, v 19 > 10 vy ta xt tip n cy
bn phi, tc l cy c nt gc c kho l 17.
- So snh 19 vi kho ca nt gc l 17, v 19 > 17 vy ta xt tip n cy
bn phi. Nt con bn phi bng NULL, chng t rng kho 19 cha c trn
cy, ta thm nt mi cha kho 19 v nt mi ny l con bn phi ca nt
c kho l 17, nh Hnh 3.10







20
10 35
5 17 22 42
15 30
Hnh 3.10 Thm kha 19 vo cy TKNP
19

Cu trc d liu - B mn CNPM Khoa CNTT HTN
72

* Th tc sau y tin hnh vic thm mt kho vo cy TKNP.
Procedure INSERT ( Var R: pointer; x : KeyType );
Var Q: Pointer;
Begin
R := Root;
If R = nill then
begin
New (Q);
Q^.Key := x;
Q^.Left := nill;
Q^.Right := nill;
R := Q;
end
Else
With R^ Do
If (x < key) then INSERT (Lefl , x)
Else
if (x > key ) then INSERT ( Right, X )
else Writeln ( Cay da co Infor X );
End;
4 - Xa mt nt c kha cho trc ra khi cy TKNP
Bi ton
Input: Cy nh phn tm kim gc T, kho x
Output: Nu nh c kho x c trn T th loi b nh ny sao cho T sau khi loi
b x vn l cy TKNP
Cch gii
- Nu khng tm thy nt cha kho x th gii thut kt thc.
- Nu tm gp nt c tr bi P c cha kho x, ta c ba trng hp sau:
TH1 : Nu p l l: ta thay n bi Nil.
TH2 : Nu p c mt trong 2 con l C (rng):
- Treo cy con khc C vo v tr ca p (nh hnh di)
- Gii phng vng nh c tr bi p





Cu trc d liu - B mn CNPM Khoa CNTT HTN
73










TH3: nh loi b c tr bi P c 2 con u khc rng:
Thay nt c tr bi p bi nt ln nht trn cy con tri ca n (nt cc phi ca
cy con tri) hoc l nt b nht trn cy con phi ca n (nt cc tri ca cy con
phi). Ri xa nt cc phi (hoc nt cc tri ), vic xo nt ny s ri vo mt trong
2 trng hp trn (TH1 hoc TH2)
Trong hnh di y, ta thay x bi kho ca nt cc tri ca cy con bn phi ri
ta xo nt cc tri ny.













Cc gii thut:
a) Gii thut xo mt nt c kho nh nht (nt cc tri ca mt cy )
Hm di y tr v kho ca nt cc tri, ng thi xo nt ny.
Funciton DeleteMin (var Root:Ptree):keytype;
Var k: Keytype;
Begin
if (Root^.left = Nil)then
begin
T


X
M
T
1
P

T


M
T
1

T


X
M
T
1
P

T
2
y
T


y
M
T
1
P

T
2
x

Cu trc d liu - B mn CNPM Khoa CNTT HTN
74
k :=Root^.key;
Root := Root^.right;
DeleteMin := k;
End
else DeleteMin := DeleteMin(Root^.left);
End;
b) Gii thut xa mt nt c kho x cho trc trn cy TKNP
Procedure DeleteNode(X: keytype,var Root: PTree);
Begin
if (Root <>Nil) then
if (x < Root^.Key) then DeleteNode(x,Root^.left)
else
if (x > Root^.Key)then DeleteNode(x,Root^.right)
else
if (Root^.left=Nil)and(Root^.right=Nil)then
Root :=Nil;
else
if (Root^.left = Nil)then
Root = Root^.right
else
if (Root^.right=Nil)then
Root := Root^.left
else {c hai con u khc rng}
Root^.Key = DeleteMin(Root->right);
End;

Cu trc d liu - B mn CNPM Khoa CNTT HTN
75
CHNG 4 M hnh d liu th (Graph)
Tng quan:
1. Mc ch v yu cu:
Sau khi hc xong chng ny, sinh vin nm vng v ci t c cc kiu d
liu tru tng th v vn dng gii nhng bi ton thc t.
2.Ni dung chnh
Trong chng ny chng ta s nghin cu mt s kiu d liu tru tng c
bn nh sau:
-Cc khi nim c bn
- Kiu d liu tru tng th
- Biu din th
- Cc php duyt th
- Mt s bi ton trn th
4.1 nh ngha th v cc khi nim
- Mt th G bao gm mt tp hp V cc nh v mt tp hp E cc cung ,
k hiu G=(V,E).
- Cc nh cn c gi l nt (node) hay im (point).
- Cc cung ni gia hai nh, hai nh ny c th trng nhau.
- Hai nh c cung ni nhau gi l hai nh k (adjacency).
- Mt cung ni gia hai nh v, w c th coi nh l mt cp im (v,w). Nu cp
ny c th t th ta c cung c th t (cung), ngc li th cung khng c th t
(cnh). Nu cc cung trong th G c th t th G gi l th c hng
(directed graph). Nu cc cung trong th G khng c th t th th G l th
v hng (undirected graph).
Trong cc phn sau ny ta dng t th (graph) ni n th ni chung,
khi no cn phn bit r ta s dng th c hng, th v hng. Hnh V.1a
cho ta mt v d v th c hng, hnh V.1b cho v d v th v hng.
Trong cc th ny th cc vng trn c nh s biu din cc nh, cn cc
cung c biu din bng cc on thng c hng (trong Hnh 4.1) hoc khng
c hng (trong Hnh 4.2).






Thng thng trong mt th, cc nh biu din cho cc i tng cn cc
cung biu din mi quan h (relationship) gia cc i tng . Chng hn cc
nh c th biu din cho cc thnh ph cn cc cung biu din cho ng giao
1 2
4 3
1 2
4 3
Hnh 4.1 Hnh 4.2

Cu trc d liu - B mn CNPM Khoa CNTT HTN
76
thng ni gia hai thnh ph.
- Mt ng i (path) trn th l mt dy tun t cc nh v
1
, v
2
,..., v
n

sao cho (v
i
,v
i+1
) l mt cung trn th (i=1,...,n-1). ng i ny l ng i t
v
1
n v
n
v i qua cc nh v
2
,...,v
n-1
. nh v
1
cn gi l nh u, v
n
gi l nh
cui. di ca ng i ny bng (n-1). Trng hp c bit dy ch c mt
nh v th ta coi l ng i t v n chnh n c di bng khng. V d
dy 1,2,4 trong th Hnh 4.1 l mt ng i t nh 1 n nh 4, ng i
ny c di l hai.
- ng i gi l n (simple) nu mi nh trn ng i u khc nhau, ngoi
tr nh u v nh cui c th trng nhau. Mt ng i c nh u v nh
cui trng nhau gi l mt chu trnh (cycle). Mt chu trnh n l mt ng i
n c nh u v nh cui trng nhau v c di t nht l 1. V d trong
Hnh 4.1 th 3, 2, 4, 3 to thnh mt chu trnh c di 3. Trong Hnh 4.2 th
1,3,4,2,1 l mt chu trnh c di 4.
Trong nhiu ng dng ta thng kt hp cc gi tr (value) hay nhn (label) vi
cc nh v/hoc cc cnh, lc ny ta ni th c nhn. Nhn kt hp vi cc
nh v/hoc cnh c th biu din tn, gi, khong cch,... Ni chung nhn c th
c kiu tu . y nhn l cc gi tr s nguyn biu din cho gi cc vn
chuyn mt tn hng gia cc thnh ph 1, 2, 3, 4 chng hn.
th con ca mt th G=(V,E) l mt th G'=(V',E') trong :
VcV v E gm tt c cc cnh (v,w) e E sao cho v,w e V.
4.2 Cc php ton c bn trn th
Cc php ton c nh ngha trn th l rt n gin nh l:
- c nhn ca nh.
- c nhn ca cnh.
- Thm mt nh vo th.
- Thm mt cnh vo th.
- Xo mt nh.
- Xo mt cnh.
- Ln theo (navigate) cc cung trn th i t nh ny sang nh khc.
Thng thng trong cc gii thut trn th, ta thng phi thc hin mt thao tc
no vi tt c cc nh k ca mt nh, tc l mt on gii thut c dng sau:
For (mi nh w k vi v)
{ thao tc no trn w }
ci t cc gii thut nh vy ta cn b sung thm khi nim v ch s ca cc nh
k vi v. Hn na ta cn nh ngha thm cc php ton sau y:
- FIRST(v) tr v ch s ca nh u tin k vi v. Nu khng c nh no
k vi v th $ c tr v. Gi tr $ c chn tu theo cu trc d liu ci t
th.
- NEXT(v,i) tr v ch s ca nh nm sau nh c ch s i v k vi v. Nu

Cu trc d liu - B mn CNPM Khoa CNTT HTN
77
khng c nh no k vi v theo sau nh c ch s i th $ c tr v.
- VERTEX(i) tr v nh c ch s i.
4.3 Biu din th
Mt s cu trc d liu c th dng biu din th. Vic chn cu trc d
liu no l tu thuc vo cc php ton trn cc cung v nh ca th. Hai cu
trc thng gp l biu din th bng ma trn k (adjacency matrix) v biu
din th bng danh sch cc nh k (adjacency list).
4.3.1. Biu din th bng ma trn k
Ta dng mt mng hai chiu, chng hn mng A, kiu boolean biu din cc
nh k. Nu th c n nh th ta dng mng A c kch thc nxn. Gi s cc
nh c nh s 1..n th A[i,j] = true, nu c nh ni gia nh th i v nh
th j, ngc li th A[i,j] = false. R rng, nu G l th v hng th ma trn
k s l ma trn i xng.
Chng hn th trong Hnh 4.2 c biu din ma trn k nh sau:
j i 1 2 3 4
1
true true true false
2 true true true true
3 true true true true
4 false true true true
Ta cng c th biu din true l 1 cn false l 0. Vi cch biu din th bng ma
trn k nh trn chng ta c th nh ngha ch s ca nh l s nguyn xc nh
duy nht nh .
a) Dng ci t: xem nh bi tp dnh cho bn c
b) Ci t cc php ton: xem nh bi tp dnh cho bn c
Trn th c nhn (trng s) th ma trn k c th dng lu tr nhn ca
cc cung chng hn cung gia i v j c nhn a th A[i,j]=a. Ma trn A cn c gi
l ma trn trng s.
y cc cp nh khng c cnh ni th ta gn cho n gi tr mc nh
Nhn xt:
Cch biu din th bng ma trn k cho php kim tra mt cch trc tip hai
nh no c k nhau khng. Nhng n phi mt thi gian duyt qua ton b
mng xc nh tt c cc cnh trn th. Thi gian ny c lp vi s cnh v
s nh ca th. Ngay c s cnh ca th rt nh chng ta cng phi cn mt
mng N x N phn t lu tr. Do vy, nu ta cn lm vic thng xuyn vi
cc cnh ca th th ta c th phi dng cch biu din khc cho thch hp hn.
4.3.2. Biu din th bng danh sch cc nh k
Trong cch biu din ny, ta s lu tr cc nh k vi mt nh i trong mt danh
sch lin kt theo mt th t no . Nh vy ta cn mt mng mt chiu G c n
phn t biu din cho th c n nh. G[i] l con tr tr ti danh sch cc nh

Cu trc d liu - B mn CNPM Khoa CNTT HTN
78
k vi nh i.
a) Dng ci t: Bn c c th tham kho trong ti liu tham kho nh km vi
bi ging
b) Ci t cc php ton: Xem nh bi tp dnh cho bn c
4.4 Cc php duyt th (TRAVERSALS OF GRAPH)
Trong khi gii quyt cc vn thc t, nhiu bi ton c m hnh ho
bng m hnh th, khi xy dng cc thao tc x l trn th ta
cn i qua cc nh v cc cung ca th mt cch c h thng. Vic i qua
cc nh ca th mt cch c h thng nh vy gi l duyt th. C hai
php duyt th ph bin l duyt theo chiu su v duyt theo chiu rng.
4.4.1. Duyt theo chiu su (depth-first search)
Gi s ta c th G=(V,E) vi cc nh ban u c nh du l cha duyt
(unvisited). T mt nh v no ta bt u duyt nh sau: nh du v duyt,
vi mi nh w cha duyt k vi v, ta thc hin qui qu trnh trn cho w. S d
cch duyt ny c tn l duyt theo chiu su v n s duyt theo mt hng no
su nht c th c.
4.4.2. Duyt theo chiu rng (breadth-first search)
Gi s ta c th G vi cc nh ban u c nh du l cha duyt
(unvisited). T mt nh v no ta bt u duyt nh sau: nh du v
c duyt, k n l duyt tt c cc nh k vi v. Khi ta duyt mt nh
v ri n nh w th cc nh k ca v c duyt trc cc nh k ca w,
v vy ta dng mt hng lu tr cc nt theo th t c duyt c th
duyt cc nh k vi chng. Ta cng dng mng mt chiu mark nh
du mt nt l duyt hay cha, tng t nh duyt theo chiu su.
4.4. Mt s bi ton ng dng trn th:
Xem nh phn bi tp dnh cho bn c



Cu trc d liu - B mn CNPM Khoa CNTT HTN
79
Chng 5 M hnh d liu Tp hp
Tng quan:
1. Mc tiu
Sau khi hc xong chng ny, sinh vin phi:
- Nm vng khi nim v kiu d liu tru tng tp hp v mt s loi tp hp
c bit nh t in, bng bm, hng u tin.
- Ci t tp hp v cc loi tp hp c bit bng ngn ng lp trnh c th.
2. Ni dung chnh
Trong chng ny chng ta s nghin cu cc vn sau:
- Khi nim tp hp
- Kiu d liu tru tng tp hp.
- Ci t tp hp
- T in
- Cu trc bng bm
- Hng u tin.
5.1. Khi nim tp hp
Tp hp trong ton hc l mt cu trc ri rc c bn t dng ln cc cu
trc ri rc khc nh: Cc t hp l nhng tp hp khng sp th t ca cc phn t;
thi l tp hp cc nh v cc cnh ni cc nh , cy l mt tp hp cc nh
v cc cnh ni hai nh c quan h phn cp, ..... Tp hp c dng m hnh ho
hay biu din mt nhm bt k cc i tng trong th gii thc cho nn n ng
vai tr rt quan trng trong m hnh ho cng nh trong thit k cc gii thut.
Cc tp hp dng nhm cc i tng li vi nhau, thng thng cc i
tng trong tp hp c tnh cht tng t nhau. V d: Tt c cc sinh vin va mi
nhp trng lp nn mt tp hp, hoc cc dinh vin ang hc mn CTDL& thut
ton lp nn mt tp hp, hoc nhng sinh vin va mi nhp hc v nhng sinh
vin ang hc mn CTDL & TT cng lp nn mt tp hp
nh ngha tp hp: Cc i tng trong tp hp cng c gi l cc phn t
trong tp hp . Tp hp c ni l cha cc phn t ca n, tp hp thng dng
nhm cc phn t c cc tnh cht chung li vi nhau, nhng n cng c th cha
cc phn t chng c mi quan h g vi nhau. V d: A={a,2,Fred, Lan}. Mt tp hp
c th l v hn hoc hu hn
m t mt tp hp, trong ton hc thng c cc cch sau xc nh mt tp hp
A :
- Dng biu Ven l mt ng cong khp kn, cc im trong ng cong
ch cc phn t ca tp hp.
- Lit k tt c cc phn t ca tp hp A. V d: A = {1, 2, 3}
- Nu ln cc c trng cho bit chnh xc mt i tng bt k c l mt phn
t ca tp A hay khng. V d: A = {x | x l s nguyn chn}
Tp hp c th c th t hoc khng c th t, tc l, c th c quan h th t xc

Cu trc d liu - B mn CNPM Khoa CNTT HTN
80
nh trn cc phn t ca tp hp hoc khng. Tuy nhin, trong chng ny, chng
ta gi s rng cc phn t ca tp hp c th t tuyn tnh, tc l, trn tp hp S c
quan h < v = tho mn hai tnh cht:
Vi mi a,b e S th a<b hoc b<a hoc a=b
Vi mi a,b,c e S, a<b v b<c th a<c
5. 2 M hnh d liu tp hp
Trong thit k thut ton, c th s dng tp hp nh mt m hnh d liu. Khi
, ngoi cc php ton hp, giao, hiu, chng ta phi cn n nhiu cc php ton
khc. Sau y chng ta s a ra mt s php ton c bn quan trng nht, cc php
ton ny s c m t bi cc th tc hoc hm:
1- Th tc UNION(A,B,C) nhn vo 3 tham s l A,B,C; Thc hin php ton ly
hp ca hai tp A v B v tr ra kt qu l tp hp C = A B.
2 - Th tc INTERSECTION(A,B,C) nhn vo 3 tham s l A,B,C; Thc hin
php ton ly giao ca hai tp A v B v tr ra kt qu l tp hp C = A B.
3 - Th tc DIFFERENCE(A,B,C) nhn vo 3 tham s l A,B,C; Thc hin php
ton ly hp ca hai tp A v B v tr ra kt qu l tp hp C = A\B
5 - Hm MEMBER(x,A) cho kt qu kiu logic (ng/sai) ty theo x c thuc
A hay khng. Nu x e A th hm cho kt qu l ng, ngc li cho kt qu sai.
5 - Th tc MAKENULLSET(A) to tp hp A tp rng
6 - Th tc INSERTSET(x,A) thm x vo tp hp A
7 - Th tc DELETESET(x,A) xo x khi tp hp A
8 - Th tc ASSIGN(A,B) gn A cho B ( tc l B:=A )
9 - Hm MIN(A) cho phn t b nht trong tp A
10 - Hm EQUAL(A,B) cho kt qu TRUE nu A=B ngc li cho kt qu FALSE
=> Vn tip theo t ra l: Ta cn biu din tp hp nh th no trong my tnh
cc php ton c thc hin vi hiu qu cao
5.3 Ci t tp hp v ci t cc php ton trn tp hp
Cc phn t ca tp hp c th l cc i tng c kiu d liu c bn hoc l cc i
tng c kiu d liu phc tp, cc i tng ny c th c biu din bi bn ghi,
cc trng l cc thuc tnh ca i tng. Khi ta c th m t kiu d liu ca cc
phn t ca tp hp nh sau:
Type elementtype = record
Key : Keytype;
[ Cc d liu trng khc nu c]
end;
Trong : Key (kho): xc nh duy nht mt i tng.
Keytype : Kiu d liu ca kho
C nhiu phng php ci t m hnh d liu tp hp trong MT (cho ta cc CTDL
tp hp khc nhau). Trong tng p dng, tu thuc vo cc php ton cn thc hin,

Cu trc d liu - B mn CNPM Khoa CNTT HTN
81
gi tr cc phn t trong tp hp v kch c (s cc phn t ca tp hp) m ta la
chn cch ci t sao cho cc php ton thc hin c hiu qu nht.
Chng hn nu chng ta thng xuyn s dng php thm vo v loi b cc
phn t trong tp hp th chng ta s tm cch ci t hiu qu cho cc php ton
ny. Cn nu php tm kim mt phn t xy ra thng xuyn th ta c th phi tm
cch ci t ph hp c hiu qu tt nht.
Ta xt cc phng php ci t tp hp sau:






5.3.1.Ci t tp hp bi vect bit
+ Gi s, xt tp hp A gm cc s nguyn thuc phm vi t 1 n n (hoc c
m ha thnh cc s nguyn thuc phm vi t 1 -> n). Khi ta c th dng vc t
bit (mng boolean) biu din tp A : (A[1], A[2], ... ,A[n]), trong thnh phn
th i : A[i] = true nu i e A, A[i] = false nu ieA
+ Cch ci t:
const n = ...;
type set = array[1..n] of boolean;
var A, B, C : set;
x : 1..n;
V d: Gi s cc phn t ca tp hp c ly trong cc s nguyn t 1 n 10
, khi tp hp c biu din bi mt mng mt chiu c 10 phn t vi cc gi
tr phn t thuc kiu logic. Chng hn tp hp A={1,3,5,8} c biu din trong
mng c 10 phn t nh sau:
1 2 3 4 5 6 7 8 9 10
1 0 1 0 1 0 0 1 0 0
Nhn xt:
- Vi cch khai bo ny cc php ton trn tp c thc hin d dng bng cch s
dng cc php ton logic trong ngn ng lp trnh. V d thm x vo A ch vic cho
A[x] := true , xc nh xem x c l phn t ca tp A khng ta ch cn bit A[x] l
true hay false, . ;
Ta xt php ton hp 2 tp hp A, B thnh tp C:
Procedure Union(A,B : set ; var C : set);
var i : integer;
begin for i:=1 to n do
C[i] := A[i] or B[i];
Danh sch k tip (mng)(2)
Ci t tp hp bi
danh sch
Ci t tp hp bi vc t bit (1)
Danh sch lin kt (3)
Danh sch c sp (5)

Cu trc d liu - B mn CNPM Khoa CNTT HTN
82
end;
Cc php ton giao, hiu, vic kim tra mt phn t c thuc tp hp hay khng, th
tc thm mt phn t vo tp hp, xa mt phn t ra khi tp hp, .... cng rt n
gin v xem nh bi tp dnh cho bn c.
5.3.2 Ci t tp hp bi mng
- Gi s s phn t ca tp hp khng vt qu mt hng no Maxsize, khi ta c
th ci t tp hp bi mng nh sau:
const Maxsize = <kch c ti a ca tp hp> ;
type
set = record
last : integer; {last: ghi ch s ca phn t cui cng ca tp hp}
elements : array[1..n] of elementype;{mng cc phn t ca tp hp}
end;
Nhn xt:
Do kch thc mng b hn ch, vic thc hin cc php tnh hp, chn phn t
vo tp hp c th dn n mt tp hp c s phn t vt qu c ca mng. Do
khi s dng cch ci t ny ta phi t Maxsize cho ph hp tit kim b nh v
trnh b trn
- Vit cc th tc ng vi cc php ton: Xem nh bi tp dnh cho bn c
5.3.3 Ci t bi danh sch lin kt hoc danh sch c sp
Tp hp cng c th ci t bng danh sch lin kt, trong mi phn t ca
danh sch l mt thnh vin ca tp hp. Khng nh biu din bng vect bt, s
biu din ny dng kch thc b nh t l vi s phn t ca tp hp ch khng
phi l kch thc ln cho ton th cc tp hp ang xt. Hn na, ta c th biu
din mt tp hp bt k. Mc d th t ca cc phn t trong tp hp l khng quan
trng nhng nu mt danh sch lin kt c th t n c th tr gip tt cho cc
php duyt danh sch. Chng hn nu tp hp A c biu din bng mt danh
sch c th t tng th hm MEMBER(x,A) c th thc hin vic so snh x mt
cch tun t t u danh sch cho n khi gp mt phn t y x ch khng cn so
snh vi tt c cc phn t trong tp hp.
Mt v d khc, chng hn ta mun tm giao ca hai tp hp A v B c n phn t.
Nu A,B biu din bng cc danh sch lin kt cha c th t th tm giao ca A
v B ta phi tin hnh nh sau:
for (mi x thuc A )
{ Duyt danh sch B xem x c thuc B khng. Nu c th x thuc giao ca hai
tp hp A v B; }
R rng qu trnh ny c th phi cn n n x m php kim tra (vi n,m l di
ca A v B).
Nu A,B c biu din bng danh sch c th t tng th i vi mt phn t e A
ta ch tm kim trong B cho n khi gp phn t x e. Quan trng hn nu f

Cu trc d liu - B mn CNPM Khoa CNTT HTN
83
ng ngay sau e trong A th tm kim f trong B ta ch cn tm t phn t x tr
i ch khng phi t u danh sch lu tr tp hp B.
=> Vic ci t tp hp bi danh sch lin kt s khc phc hn ch v khng gian khi
s dng mng. Tuy nhin trong cch ci t ny, vic thc hin cc php ton trn tp
hp s phc tp hn
a) Dng ci t:
type Set = ^ Cell;
Cell = record
element : elementtype;
next : Set;
end;
var A, B, C : Set;
Cc tp hp A, B, C s c biu din bi cc danh sch lin kt, trong cc con tr
A,B,C s tr ti u ca cc danh sch
b) Cc php ton c bn trn tp hp
1 - Th tc UNION
Gii s xt php tm hp ca hai tp A v B, kt qu l tp C
Cch lm:
Mun tm hp ca A v B, ta chp B vo C, sau duyt A, vi mi e ca A
m e khng thuc C th a n vo C.
Gii thut:
Procedure UNION(A, B: pointer; Var C: pointer);
var Ap,Bp,Cp,Ck : pointer;
found : boolean;
Begin
C := nil; Bp := B;
while Bp <> nil do
begin
new(Cp);
Cp^.element := Bp^.element;
Cp^.next := C;
C := Cp;
end;
Ap := A;
while Ap <> nil do
begin
Ck := C;
found := false;

Cu trc d liu - B mn CNPM Khoa CNTT HTN
84
while (Ck <> nil) and (not found) do
if Ap^.element = Ck^.element then found := true
else Ck := Ck^.next;
if not found then
begin
new(Cp);
Cp^.element := Ap^.element;
Cp^.next := C;
C := Cp;
end;
Ap := Ap^.next;
end;
end;
2 - Th tc INTERSECTION
Gii s xt php tm giao ca hai tp A v B, kt qu l tp C
tm giao ca A v B ta duyt tp A, vi mi phn t e ca A ta tm n trong B,
nu thy th a vo C, nu khng thy th duyt phn t tip theo trong A.
3- Th tc gn ASSIGN(A,B): Chp cc cc phn t ca tp A sang tp B,
Duyt cc ln lt cc phn t trong A chp sang B
5 Hm MIN(A):Tm phn t nh nht trong tp A
Hm tr ra phn t u danh sch (Nu danh sch c sp tng dn theo gi tr ca
cc phn t).
5 - Ton t DELETESET l hon ton ging nh DELETE_LIST.
6 - Php INSERTSET(x,A) cng tng t INSERT_LIST tuy nhin ta phi ch
rng khi xen x vo A phi m bo th t ca danh sch c sp.
7 - Th tc DIFFERENCE(A,B,C) nhn vo 3 tham s l A,B,C; Thc hin php
ton ly hp ca hai tp A v B v tr ra kt qu l tp hp C = A\B
Cch lm:
Duyt cc phn t trong A, vi mi phn t e e A, ta kim tra xem e c thuc B
khng? Nu khng thuc B, ta thm e vo C, ngc li ta duyt phn t e tip
theo trong A
8 - Hm MEMBER(x,A) cho kt qu kiu logic (ng/sai) ty theo x c thuc
A hay khng. Nu x e A th hm cho kt qu l ng, ngc li cho kt qu sai.
Cch lm:
Duyt danh t u n cui tp A hoc duyt n khi tm thy x th dng.
9 - Th tc MAKENULLSET(A) to tp hp A tp rng: A:= nil
10 - Hm EQUAL(A,B) cho kt qu TRUE nu A=B ngc li cho kt qu FALSE:
Kim tra cc phn t trong A c thuc B khng v ngc li kt lun A c bng B

Cu trc d liu - B mn CNPM Khoa CNTT HTN
85
khng.
=> Vic ci t c th cc php ton t 2->10 xem nh bi tp dnh cho bn c
5.5 T in (Dictionary)
T in l mt kiu d liu tru tng, l mt tp hp c bit, trong chng
ta ch quan tm n cc php ton InsertSet, DeleteSet, Member v MakeNullSet. S
d chng ta nghin cu t in l do trong nhiu ng dng khng s dng n cc
php ton hp, giao, hiu ca hai tp hp. Ngc li ta cn mt cu trc lm sao
cho vic tm kim, thm v bt phn t c phn hiu qu nht gi l t in. Chng
ta cng chp nhn MakeNullSet nh l php khi to cu trc t in.
5.5.1 T in l g?
M hnh d liu tp hp, nhng ch xt n cc php ton Insert (thm mt
phn t vo tp hp), Delete (loi b mt phn t no khi tp hp), Member (tm
xem trong tp hp c cha mt phn t no khng) c gi l kiu d liu tru
tng t in (Dictionary)
5.5.2 Cc phng php ci t t in
T in l mt tp hp, ng nhin chng ta phi s dng cc phng php ci t
tp hp ci t t in:
- Bng vc t bit: S dng phng php ny khi t in l tp hp gm cc
phn t c th dng lm tp ch s cho mng (thuc kiu d liu v hng m
c hoc c m ha thnh kiu d liu v hng m c)
- Bng danh sch ( k tip hoc mc ni), khng thun li cho php tm
kim(vi danh sch mc ni v phi truy cp tun t -> ch thch hp khi p
dng phng php tm kim tun t), khng thun lij cho php ton thm vo
v ly ra (vi danh sch k tip v c hin tng co, dn, dch chuyn cc
phn t khc)
- Gi s t in l danh sch c sp th t tuyn tnh -> s dng cy tm
kim nh phn: phc v mt thi gian ca cc php ton trn t in l ln
(tng t nh danh sch ) trong trng hp cy suy bin thnh danh sch.
- Ta cng c th s dng cy cn bng biu din tp hp: u im l khng
xy ra trng hp suy bin nh cy TKNP, tuy nhin cc php ton loi b v
xen vo trn cy cn bng kh phc tp, v phi cn bng li cy
Do , biu din t in thun li cho cc php ton, v c th p dng cho
tp hp c kch c ln (t im thng c kch thc ln), ta xt cch ci t
khc l: s dng CTDL bng bm ci t t in
5.5.3 Cu trc d liu Bng bm, ci t t in bi bng bm
Bm l phng php rt thch hp ci t tp hp c s phn t ln(t in). C 2
phng php bm khc nhau:
+ Phng php Bm m: Cho php s dng mt khng gian khng hn ch
lu gi cc phn t ca tp hp
+ Phng php bm ng: S dng mt khng gian c nh v do tp hp
c ci t phi c c khng vt qu khng gian cho php

Cu trc d liu - B mn CNPM Khoa CNTT HTN
86
5.5.3.1. Ci t t in bng bng bm m
a) nh ngha bng bm m
- T tng c bn ca bng Bm l: Phn chia mt tp hp cho thnh mt s c
nh cc lp (N lp) c nh s 0, 1, , N-1. S dng mng T vi ch s chy t 0
n N-1. Mi thnh phn T[i] cha mt con tr, tr ti phn t u tin ca danh sch
cha cc phn t ca tp hp thuc lp th i. Cc phn t ca tp hp thuc mi lp
c t chc di dng mt danh sch lin kt, mi danh sch c gi l con trr ,
T c gi l bng Bm (hash table).










- Vic chia cc phn t ca tp hp vo cc lp c thc hin bi hm bm
(hash function) h.
b) Hm bm:
Hm bm l mt nh x t tp d liu A n cc s nguyn 0..N-1:
h : A 0..N-1;
Theo gi s x e A th h(x) l mt s nguyn sao cho: 0h(x) N-1.
- C 2 tiu chun chnh la chn mt hm bm:
+Hm bm phi cho php tnh c d dng v nhanh chng gi tr Bm ca
mi kho
+ N phi phn b u cc kho vo cc r
C nhiu cch xy dng hm bm, cch n gin nht l nguyn ha x v sau
ly h(x) = x % N.
V d : Cho tp hp A = {1, 5, 7, 2, 5, 15}








Nil
nil
0
1
n-1
Hnh 1: Cu trc bng bm m

Nil

Cu trc d liu - B mn CNPM Khoa CNTT HTN
87
Bng bm l mng gm 5 phn t v hm bm h(x) = x % 5; Ta c bng bm lu tr
A nh sau :















Hm bm c th c thit k nh sau
{Ham bam h(X)=X Mod B}
Function h(X: KeyType): 0..N-1;
Begin
H := X%B;
End;
V d: Vit mt hm Bm trong Pascal (s dng phng php ly phn d) bm
cc kho l cc xu k t c di 10 thnh cc gi tr t 1 n N-1
Type KeyType = String[10];
Function h (x: KeyType): 0 .. N-1;
Var I, Sum: integer;
Begin
Sum:= 0;
For I = 1 to 10 do
Sum := Sum + ord(x[i]);
h := Sum mod N;
End;
c) Ci t t in bi bng bm m:
Const N = ;
Type pointer = ^ Element;


Bng bm m
Bng bm cha cc con
tr, tr ti cc phn t
u mi danh sch
Danh sch ca mi r


Cu trc d liu - B mn CNPM Khoa CNTT HTN
88
Element = record
key : KeyType;
[data: ElementType]; {cc trng thng tin khc
nu c}
Next : Pointer;
End;
Dictionary = array [0 .. N-1] of pointer;
Var T: Dictionary;
d) Ci t cc php ton trn t in
1 - Khi to bng bm m rng
Lc ny tt c cc r l rng nn ta gn tt c cc con tr tr n u cc danh
sch trong mi r l Nil.
Procedure MakeNullSet( var D: Dictionary)
Var i: integer;
Begin
For i:=0 to B-1do
D[i] := Nil;
End;
2 - Kim tra mt thnh vin c trong t in khng
kim tra xem phn t x no c trong t in hay khng, ta gi tr bm
(h(x)) ca n. Theo cu trc ca bng bm th kho x s nm trong r c tr
bi T[h(x)]. Nh vy tm kho x trc ht ta phi tnh h(x) sau duyt danh
sch ca r c tr bi T[h(x)] tm x.
Gii thut nh sau:
Function Member(x: KeyType; Var T: Dictionary): boolean;
Var P: ponter; found: boolean;
Begin
P := T[h(x)];
Found := false;
While (p<>nil)and(not found)do
If P^. key = x then found := true
Else P := P^. Next;
Member := found;
End;
3 - Thm mt phn t vo t in
thm mt phn t c kha x vo t in ta phi tnh h(x) xc nh xem n
s c thm vo r/ lp no. V ta khng quan tm n th t cc phn t
trong mi r nn ta n gi n t a thm phn t mi ngay u r ny.

Cu trc d liu - B mn CNPM Khoa CNTT HTN
89
Gii thut nh sau:
Procedure Insert (x: KeyType; var T: Dictionary );
Var i: 1 .. N-1;
P: Pointer;
Begin
If not Member(x, T) then
Begin
i := h(x);
New(P);
P^. key := x;
P^. Next := T[i];
T[i]:= P;
End;
End;
5 - Xo mt phn t trong t in
Xo mt phn t x trong t in, ta lm nh sau:
- Tnh gi tr bm h(x)
- Kim tra xem phn t x c thuc lp c tr bi T[h(x)] khng? Nu c th
loi b phn t ny. Khi loi x cn phn bit x nm u lp v x khng nm
u lp.
Gii thut nh sau
Procedure Delete(x: KeyType; Var T : Dictionary);
Var i: 0 .. N-1;
P, Q : pointer;
Found : Boolean;
Begin
i := h(x);
if T[i]<>nil then
if T[i]^.key = x then {loi x khi danh sch}
T[i] := T[i]^.Next;
Else
Begin
{xem xt cc thnh phn tip theo trong danh sch}
Q := T[i];
P := Q^.Next;
Found := false;
While(P <>nil) and(not found) do

Cu trc d liu - B mn CNPM Khoa CNTT HTN
90
If P^. Key= x then
Begin {loi x khi d.s}
Q^.Next := P^.Next;
Found := true;
End
Else
Begin
Q := P;
P := Q^.Next;
End;
End;
End;
5.5.3.2. Ci t t in bng bng bm ng
a) Th no l bng bm ng?
Bng bm ng lu gi cc phn t ca t in ngay trong mng (cc phn
t ca r i lu trong chnh phn t th i ca mng) ch khng dng mng
lu tr cc con tr tr ti u ca cc danh sch lin kt r.
Tng t nh bm m, trong bng bm ng r th i cha phn t c gi tr
bm l i, nhng v c th c nhiu phn t c cng gi tr bm nn ta s gp
trng hp sau: ta mun a vo r i mt phn t x nhng r ny b chim
bi mt phn t y no => gy r a ng . Nh vy khi thit k mt bng
bm ng ta phi c cch gii quyt s ng ny.
* Gii quyt ng
Cch gii quyt ng gi l bm li (rehash) nh sau:
- Chn tun t cc v tr h1,..., hk theo mt cch no cho ti khi gp mt v tr trng
t x vo. Dy h1,..., hk gi l dy cc php th, k gi l tng s ln bm li, h
i
l
gi tr hm bm ca ln bm li th i
- C nhiu cch bm li. Mt chin lc n gin l bm li tuyn tnh, trong
dy cc php th c dng :


V d N=8 v cc phn t ca t in l a,b,c,d c gi tr bm ln lt l: h(a)=3,
h(b)=0, h(c)=5, h(d)=3. Ta mun a cc phn t ny ln lt vo bng bm.
Khi u bng bm l rng, c th coi mi r cha mt gi tr c bit
Empty, Empty khng bng vi bt k mt phn t no m ta c th xt trong tp
hp cc phn t mun a vo bng bm.
Ta t a vo r 3, b vo r 0, c vo r 5. Xt phn t d, d c h(d)=3
nhng r 3 b a chim ta tm v tr h1(d)= (h(d)+1) mod N = 4, v tr ny l
mt r rng ta t d vo.
h
i
(x) = (h(x)+1) mod N

Cu trc d liu - B mn CNPM Khoa CNTT HTN
91
0 1 2 3 4 5 6 7
b a d c
Hnh 5.1 - Gii quyt ng trong bng bm ng bng chin lc bm li
tuyn tnh
Trong bng bm ng, php kim tra mt thnh vin (th tc MEMBER
(x,A)) phi xt dy cc r h(x),h1(x),h2(x),... cho n khi tm thy x hoc tm thy
mt v tr trng. Bi v nu hk(x) l v tr trng c gp u tin th x khng th
c tm gp mt v tr no xa hn na. Tuy nhin, ni chung iu ch ng
vi trng hp ta khng h xo i mt phn t no trong bng bm. Nu chng ta
chp nhn php xo th chng ta qui c rng phn t b xa s c thay bi mt
gi tr c bit, gi l Deleted, gi tr Deleted khng bng vi bt k mt phn t
no trong tp hp ang xt vo n cng phi khc gi tr Empty. Empty cng l
mt gi tr c bit cho ta bit trng.
V d
- Tm phn t e trong bng bm trn, gi s h(e)=5. Chng ta tm kim e ti cc v tr
5,5,6. r 6 l cha Empty, vy khng c e trong bng bm.
- Tm d, v h(d)=3 ta khi u ti v tr ny v duyt qua cc r 5,5. Phn t d
c tm thy ti r 5.
* S dng bng bm ng ci t t in
Di y l khai bo v th tc cn thit ci t t in bng bng bm ng.
d dng minh ho cc gi tr Deleted v Empty, gi s rng ta cn ci t t
in gm cc chui 10 k t. Ta c th qui c: Empty l chui 10 du + v Deleted
l chui 10 du *.
b) Ci t t in bi bng bm ng
Const N = ;
Deleted = -1000; {Gia dinh gia tri cho o da bi xoa}
Empty=1000; {Gia dinh gia tri cho o chua su dung}
type ElementType = integer;
Dictionary = array[ 0 .. N-1] of elementType;
Var T : Dictionary;
c) Ci t cc php ton t in trn bng bm ng:
Vi mi gi kho x, thc hin cc php ton Insert, Delete, Member ta u phi xc
nh v tr trong bng c cha x, hoc v tr trong bng cn t x vo. T tng tm
ra cc v tr l thm d ln lt cc v tr h(x), h
1
(x), h
2
(x), .. iu c thc
hin bi th tc Location
+ Cch lm:
- Vi mi gi tr kho x, th tc ny cho php thm d cc v tr trong bng,
xut pht t v tr c xc nh bi gi tr bm h(x), ri ln lt qua cc v tr h
1
(x),
h
2
(x), cho ti khi hoc tm c v tr c cha x , hoc tm ra v tr trng u tin

Cu trc d liu - B mn CNPM Khoa CNTT HTN
92
- Qu trnh thm d s dng li nu i qua ton b bng m khng thnh cng
(Khng tm ra v tr cha x, hoc tm ra v tr trng u tin). Tham bin k: Lu v tr
m ti qu trnh thm d dng li.
Tham bin j: Lu v tr loi b (Deleted) u tin hoc v tr trng u tin m qu
trnh thm d pht hin ra nu trong bng cn c cc v tr nh th
1- Th tc xc nh v tr t x
Procedure Location(x: keytype; var k,j : integer);
Var I : integer; { I ghi li gi tr bm u tin h(x)}
Begin
I := h(x);
J : = I;
If (T[i] = x )or(T[i] = empty )then k := I
Else
Begin
K := (i+1)mod n;
While (k <>i)and(T[k]<>x)and(T[k]<>enpty)do
Begin
If (T[k] = deleted )and(T[j]<>deleted)then j := k;
K := (k+1)mod N;
End;
If (T[k]= empty)and(T[j]<>deleted)then j := k;
End;
End;
2- Th tc tm xem x c thuc t in T hay khng?
Function Member(x : keytype; var T : Dictionary): boolean;
var k, j : integer;
Begin
Location(x,k,j);
If T[k]= x then Member := true
Else Member := false;
End;
3- Th tc thm mt phn t x vo t in T
Procedure Insert (x : KeyType; var T : Dictionary);
var k,j : integer;
Begin
Location(x,k,j);
If (T[k]<>x) then

Cu trc d liu - B mn CNPM Khoa CNTT HTN
93
If (T[j] = deleted)or(T[j] = empty )then T[j] := x
Else Writeln(bng y)
Else Writeln( bng c x);
End;
4 Th tc xo phn t x thuc t in T
Procedure Delete (x : keyType; var T : Dictionary);
var k, j : integer;
Begin
Location(x,k,j);
If T[k] = x then T[k] := deleted;
End;
5.5.3.3 Cc phng php xc nh hm bm
a) Phng php chia
"Ly phn d ca gi tr kho khi chia cho s r" . Tc l hm bm c dng:
H(x)= x mod B
Phng php ny r rng l rt n gin nhng n c th khng cho kt qu
ngu nhin lm. Chng hn B=1000 th H(x) ch ph thuc vo ba s cui cng ca
kho m khng ph thuc vo cc s ng trc. Kt qu c th ngu nhin hn nu
B l mt s nguyn t.
b) Phng php nhn
"Ly kho nhn vi chnh n ri chn mt s ch s gia lm kt qu ca hm
bm".
V d:
x
x
2 h(x) g m 3 s gia

5502 29181605 181 hoc 816
367 00135689 135 356
1256 01552516 552 525
2983 08898289 898 982

V cc ch s gia ph thuc vo tt c cc ch s c mt trong kho do vy
cc kho c khc nhau i cht th hm bm cho kt qu khc nhau.
c) Phng php tch gp
i vi cc kho di v kch thc thay i ngi ta thng dng phng php
phn on, tc l phn kho ra thnh nhiu on c kch thc bng nhau t mt u
( tr on ti u cui ), ni chung mi on c di bng di ca kt qu hm
bm. Phn on c th l tch sau th gp:


Cu trc d liu - B mn CNPM Khoa CNTT HTN
94
Cch lm: tch kha ra tng on ri xp cc on thnh hng c canh thng
mt u ri c th gp (thc hin mt php ton no , v d nh:cng, tr, .
chng li) ri p dng phng php chia c kt qu bm.
v d: kho 17056329 tch thnh
329
056
017
cng li ta c 392. 392 mod 1000 = 392 l kt qu bm kho cho.

You might also like