You are on page 1of 36

CNG MN : CU TRC D LIU

Chng 1:
CC KHI NIM C BN
1.1. Thut ton v cu trc d liu
1.2. Cc kiu d liu c bn trong ngn ng C
1.2.1. Kiu d liu n gin
1.2.1.1. Kiu k t
1.2.1.2. Kiu s nguyn
1.2.1.3. Kiu s thc
1.2.2. Kiu d liu c cu trc
1.2.2.1. Kiu mng
1.2.2.2. Kiu chui k t
1.2.2.3. Kiu bn ghi
1.3. Kiu con tr
1.3.1. nh ngha
1.3.2. Khai bo kiu con tr
1.3.3. Hm a ch
1.3.4. Cc php ton trn kiu con tr
1.4. Kiu tham chiu
1.4.1. nh ngha
1.4.2. Khai bo kiu tham chiu
1.4.3. ng dng kiu tham chiu
1.5. qui
1.5.1. nh ngha
1.5.2. Cc nguyn l khi dng k thut qui
Chng 2:
DANH SCH
2.1. Khi nim
2.2. Danh sch c
2.2.1. nh ngha
2.2.2. Biu din danh sch c
2.2.3. Cc php ton trn danh sch c
2.2.4. u nhc im ca danh sch c
2.3. Danh sch lin kt
2.3.1. nh ngha danh sch lin kt
2.3.2. Biu din danh sch lin kt
2.3.3. Cc php ton trn danh sch lin kt
2.3.4. u nhc im ca danh sch lin kt
2.4. Danh sch a lin kt
2.4.1. nh ngha
2.4.2. Biu din danh sch a lin kt
2.4.3. Cc php ton trn danh sch a lin kt
2.5. Danh sch lin kt kp
2.5.1. nh ngha
2.5.2. Biu din danh sch lin kt kp
2.5.3. Cc php ton trn danh sch lin kt kp
2.6. Danh sch lin kt vng
2.7. Danh sch hn ch
2.7.1. Khi nim
2.7.2. Ngn xp
2.7.2.1. nh ngha
2.7.2.2. Biu din ngn xp bng danh sch lin kt
2.7.2.3. Cc php ton trn ngn xp c biu din bng danh sch lin kt
2.7.3. Hng i
2.7.3.1. nh ngha
-----------------------------------------------------------------------------------------------------------08/01/2011 - Cu trc d liu Trang 1

2.7.3.2. Biu din hng i bng danh sch lin kt


2.7.3.3. Cc php ton trn hng i c biu din bng danh sch lin kt
Chng 3:
CY
3.1. Mt s khi nim
3.1.1. Cc nh ngha
3.1.2. Cc cch biu din cy
3.2. Cy nh phn
3.2.1. nh ngha v tnh cht
3.2.1.1. nh ngha
3.2.1.2. Cc dng c bit ca cy nh phn
3.2.1.3. Cc tnh cht ca cy nh phn
3.2.2. Biu din cy nh phn
3.2.2.1. Biu din cy nh phn bng danh sch c
3.2.2.2. Biu din cy nh phn bng danh sch lin kt
3.2.3. Cc php ton trn cy nh phn c biu din bng danh sch lin kt
3.3. Cy nh phn tm kim
3.3.1. nh ngha
3.3.2. Cc php ton trn cy nh phn tm kim
3.3.3. nh gi
3.4. Cy nh phn cn bng
3.4.1. Cy cn bng hon ton
3.4.1.1. nh ngha
3.4.1.2. nh gi
3.4.2. Cy cn bng
3.4.2.1. nh ngha
3.4.2.2. Lch s cy cn bng (AVL)
3.4.2.3. Chiu cao ca cy AVL
3.4.2.4. Cu trc d liu cho cy AVL
3.4.2.5. nh gi cy AVL
3.5. Cy tng qut
3.5.1. nh ngha
3.5.2. Biu din cy tng qut bng danh sch lin kt
3.5.3. Cc php duyt cy tng qut
3.5.4. Cy nh phn tng ng
---o-O-o--Ti liu tham kho:
[1]
[2]
[3]
[4]
[5]
[6]
[7]
[8]

Xun Li, Cu trc d liu v gii thut, NXB Khoa hc v k thut, 2003
Nguyn Hng Chng, Cu trc d liu ng dng v ci t bng C, NXB TPHCM, 2003
L Xun Trng, Cu trc d liu bng ngn ng C, NXB Thng k, 1999
Larry Nyhoff Sanford Leestma, Lp trnh nng cao bng Pascal vi cc cu trc d liu,
1991
Nguyn Trung Trc, Cu trc d liu, 2000
inh Mnh Tng, Cu trc d liu v thut ton, NXB Khoa hc v k thut, 2000
Yedidyah Langsam, Moshe J.Augenstein, Aaron M.Tenenbaum, Data Structures Using C
and C++, Prentice Hall, 1996
Alfred V.Aho, John E.Hopcroft, Jeffrey D. Ullman, Data Structures and Algorithms,
Addison Wesley, 1983

-----------------------------------------------------------------------------------------------------------08/01/2011 - Cu trc d liu Trang 2

Chng 1:

CC KHI NIM C BN

1.1. Thut ton v cu trc d liu:


- D liu: ni chung d liu l bt k nhng g m my tnh x l
- Kiu d liu: Mi kiu d liu gm cc gi tr c cng chung cc tnh cht no v trn
xc nh cc php ton
- Cu trc d liu: l cch t chc v lu tr d liu trong my tnh
- Thut ton (hay gii thut): l tp hp cc bc theo mt trnh t nht nh gii mt bi ton
- Gia cu trc d liu v thut ton c quan h mt thit. Nu ta bit cch t chc cu trc d
liu hp l th thut ton s n gin hn. Khi cu trc d liu thay i th thut ton s thay i
theo
1.2. Cc kiu d liu c bn trong ngn ng C:
1.2.1. Kiu d liu n gin: Kiu d liu n gian co gi tr n duy nht, gm cc kiu:
1.2.1.1. Kiu k t:
Kiu ky t c gi tr l mt k t bt k t gia hai du nhy n, c kch thc 1 Byte v biu
din c mt k t trong bng m ASCII, vi du: A , 9 hoc + . Gm 2 kiu k t chi tit:
Kiu
Min gi tr
Char
t -128 n 127
unsigned char
t 0 n 255
1.2.1.2. Kiu nguyn:
Kiu nguyn c gi tr l mt s nguyn, v d s 1991, gm cc kiu nguyn sau:
Kiu
Min gi tr
Kch thc
int
t -32768 n 32767
2 Byte
unsigned int
t 0 n 65535
2 Byte
long
t -2147483648 n 2147483647
4 Byte
unsigned long
t 0 n 4294967295
4 Byte
Lu : Cc kiu k t cng c th xem l kiu nguyn 1 Byte
1.2.1.3. Kiu thc:
Kiu thc co gi tr l mt s thc, vi du s 1.65, gm cc kiu thc sau:
Kiu
Min gi tr
Kch thc
float
t 3.4E-38 n 3.4E+38
4 Byte
double
t 1.7E-308 n 1.7E+308
8 Byte
long double
t 3.4E-4932 n 1.1E4932
10 Byte
1.2.2. Kiu d liu c cu trc:
Kiu d liu co cu truc co gia tri gm nhiu thanh phn, gm cac kiu sau:
1.2.2.1. Kiu mng:
Kiu mang gm nhiu thnh phn c cng kiu d liu, mi thnh phn gi l mt phn t, cc
phn t c nh ch s t 0 tr i. vit mt phn t ca bin mng th ta vit tn mng, tip
theo l ch s ca phn t t gia hai du ngoc vung
Vi du lnh:
float A[3] ;
Khai bo A l mt bin mng gm 3 phn t l A[0] , A[1] , A[2] u co gia tri thuc kiu float
1.2.2.2. Kiu chui k t:
Kiu chui ky t co gi tr l mt dy k t bt k t gia 2 du nhy kp, v d Le Li
Ta c th xem chui k t l mt mng m mi phn t l mt k t
Ta c th khai bo v gn gi tr cho bin chui k t nh sau:
char

ht[15] = Le

Li ;

1.2.2.3. Kiu bn ghi:


-----------------------------------------------------------------------------------------------------------08/01/2011 - Cu trc d liu Trang 3

Kiu ban ghi gm nhiu thnh phn c kiu d liu ging nhau hoc khc nhau, mi thnh phn
gi l mt trng. vit mt trng ca bin bn ghi ta vit tn bin bn ghi, tip theo l du
chm, ri n tn trng
V d:
struct
SVIEN
{ char
int
float
};
SVIEN
SV;

ht[15];
ns, t;
cc;

u tin khai bo kiu bn ghi SVIEN gm cc trng ht, ns, t, cc ln lt cha h tn, nm
sinh, tui, chiu cao ca mt sinh vin. Sau khai bo bin SV thuc kiu SVIEN, nh vy SV
l bin bn ghi gm cc trng c vit c th l SV.ht , SV.ns, SV.t v SV.cc
V d
#include <stdio.h>
#include <conio.h>
#include <string.h>
main()
{ struct SVIEN
{ char ht[15];
int ns, t;
float cc;
};
SVIEN SV;
printf("\n Nhap ho ten:"); fflush(stdin); gets(SV.ht);
printf("\n Nhap nam sinh:"); scanf("%d", &SV.ns);
SV.t=2011-SV.ns;
printf("\n Nhap chieu cao:"); scanf("%f", &SV.cc);
printf("\n Ban %s , cao %7.2f m , %7d tuoi", SV.ht, SV.cc, SV.t);
getch();
}

1.3. Kiu con tr:


1.3.1. nh ngha:
Con tr l mt bin m gi tr ca n l a ch ca mt i tng d liu trong b nh. i
tng y c th l mt bin hoc mt hm
a ch ca mt vng nh trong b nh l a ch ca byte u tin ca vng nh
1.3.2. Khai bo bin con tr:
Ta c th khai bo kiu con tr trc, ri sau khai bo bin con tr thuc kiu con tr
typedef kiud liu *kiucontr ;
kiucontr bincontr ;
hoc ta c th khai bo trc tip bin con tr nh sau:
kiudliu *bincontr ;
v d
typedef float *xyz;
xyz pf;
hoc:
float *pf;
khai bo pf l bin con tr ch n mt gi tr kiu float
Tng t ta c cc khai bo:
float cc=1.65;
char nm=0, *pc;
// pc l con tr kiu k t char
int ns=1991, t, *p, *p2;
Khi bin p c gi tr l a ch ca mt vng nh m trong vng nh c cha d liu D
th ta ni rng p l bin con tr ch n d liu D, vng nh m bin con tr p ch n s c tn
gi l *p
1.3.3. Hm a ch:
&bin
Tr v a ch ca bin trong b nh
1.3.4. Cc php ton trn kiu con tr
- Php gn: Ta c th gn a ch ca mt bin cho bin con tr cng kiu, v d
-----------------------------------------------------------------------------------------------------------08/01/2011 - Cu trc d liu Trang 4

p = &ns ;
Hoc gn gi tr ca hai bin con tr cng kiu cho nhau, v d
p2 = p;
Khng c dng cc lnh gn:
p=&cc;
hoc pf=&ns;
hoc pf=p;
- Php cng thm vo con tr mt s nguyn (i vi con tr lin quan n mng)
- Php so snh bng nhau = = hoc khc nhau !=
V d:
if (p==p2) . . .
hoc if (p!=p2) . . .
- Hng con tr NULL: cho bit con tr khng ch n i tng no c, gi tr ny c th c
gn cho mi bin con tr kiu bt k, v d
p = NULL; hoc pf=NULL;
- Php cp pht vng nh
Lnh
bincontr = new kiudliu;
Vd lnh p = new int;
Cp pht vng nh c kch thc 2 Byte (ng vi kiu d liu int) v gn a ch ca vng nh
ny cho bin con tr p, nh vy vng nh c tn gi l *p
Tng t ta c lnh pf=new float;
- Php thu hi vng nh
Lnh
delete bincontr;
Vd lnh
delete p;
Thu hi vng nh m bin con tr p ch n
V d:
#include <stdio.h>
#include <conio.h>
#include <string.h>
main()
{ struct SVIEN
{ char ht[15];
int ns, t;
float cc;
};
SVIEN *p;
p=new SVIEN;
printf("\n Nhap ho ten:"); fflush(stdin); gets((*p).ht);
printf("\n Nhap nam sinh:"); scanf("%d", &(*p).ns);
(*p).t=2011-(*p).ns;
printf("\n Nhap chieu cao:"); scanf("%f", &(*p).cc);
printf("\n Ban %s , cao %7.2f m , %7d tuoi", (*p).ht, (*p).cc, (*p).t);
delete p;
getch();
}

1.4. Kiu tham chiu


1.4.1. nh ngha
Ngn ng C c 3 loi bin:
- Bin gi tr cha mt gi tr d liu thuc v mt kiu no (nguyn, thc, k t . . . ),
v d
int ns=1991;
- Bin con tr cha a ch ca mt i tng, v d
int *p=&ns;
Hai loi bin ny u c cp b nh v c a ch ring
- Loi th ba l bin tham chiu, l bin khng c cp pht b nh, khng c a ch
ring, c dng lm b danh cho mt bin khc v dng chung vng nh ca bin
1.4.2. Khai bo kiu tham chiu
C php:
kiudliu &binthamchiu = binbthamchiu ;
Trong , binthamchiu s tham chiu n binbthamchiu v dng chung vng nh ca
binbthamchiu ny.
Vd
float cc=1.65;
float &f = cc;
Khai bo 2 bin thc cc v f . Bin tham chiu f s tham chiu n bin cc cng kiu float, dng
chung vng nh ca bin cc. Khi nhng thay i gia tri ca bin cc cng l nhng thay i
ca bin f v ngc li, chng hn nu tip theo c lnh:
-----------------------------------------------------------------------------------------------------------08/01/2011 - Cu trc d liu Trang 5

f = -7.6;
th bin cc s c gi tr mi l -7.6
1.4.3. ng dng kiu tham chiu
#include <stdio.h>
#include <conio.h>
void DOI(int x, int &y, int *z)
{ printf("\n Con truoc: %d
%d
%d", x, y, *z);
x = x+1; y = y+2; *z = *z+3;
printf("\n Con sau: %d
%d
%d", x, y, *z);
}
void main()
{ int i=10, j=20, k=30;
DOI(i, j, &k);
printf("\n Chinh sau: %d
%d
%d", i, j, k);
getch();
}

1.5. qui
1.5.1. nh ngha
Mt chng trnh gi ngay chnh n thc hin gi l tnh qui ca chng trnh
1.5.2. Cc nguyn l khi dng k thut qui
- Tham s ha bi ton: th hin kch c ca bi ton
- Tm trng hp d nht: m ta bit ngay kt qu bi ton
- Tm trng hp tng qut: a bi ton vi kch c ln v bi ton c kch c
nh hn
V d: Bi ton Thp H Ni: Cn chuyn n a t cc A (trong a ln di, a nh
trn) sang cc B vi cc iu kin:
. Mi ln ch c chuyn mt a
. Trn cc cc, lun lun a ln di, a nh trn
. c dng cc trung gian th ba C
Gii: - Tham s ha bi ton:
Gi n: l s lng a cn chuyn
x: cc xut pht
y: cc ch
z: cc trung gian
Hm con CHUYEN(n, x, y, z) dng chuyn n a t cc xut pht x sang cc ch y vi cc
trung gian z
- Tm trng hp d nht: n = 1 , khi ta chuyn a t cc x sang cc y
- Tm trng hp tng qut:
B1: Chuyn n-1 a t cc xut pht x sang cc trung gian z
B2: Chuyn 1 a t cc xut pht x sang cc ch y
B3: Chuyn n-1 a t cc trung gian z sang cc ch y
#include <stdio.h>
#include <conio.h>
int i;
void CHUYEN(int &n, char x, char y, char z)
{ if (n==1)
{ i++;
printf("\n %d : %c --> %c", i, x, y);
}
else
{ CHUYEN(n-1, x, z, y);
CHUYEN(1, x, y, z);
CHUYEN(n-1, z, y, x);
}
}
void main()
{ int n;
printf("\n Nhap so dia can chuyen:"); scanf("%d", &n);
CHUYEN(n, 'A', 'B', 'C');
getch();
}

-----------------------------------------------------------------------------------------------------------08/01/2011 - Cu trc d liu Trang 6

Chng 2:

DANH SCH

2.1. Khi nim


- Danh sch: l mt dy cc phn t a0, a1, a2, . . . an-1 trong nu bit c phn t ng
trc th s bit c phn t ng sau
- n: l s phn t ca danh sch
- Danh sch rng: l danh sch khng c phn t no c, tc n=0
- Danh sch khi nim thng gp trong cuc sng, nh danh sch cc sinh vin trong
mt lp, danh sch cc mn hc trong mt hc k . . .
- C 2 cch c bn biu din danh sch:
+ Danh sch c: Cc phn t c lu tr k tip nhau trong b nh, phn t th
i-1 c lu tr ngay trc phn t th i ging nh mt mng
+ Danh sch lin kt: Cc phn t c lu tr ti nhng vng nh khc nhau
trong b nh, nhng chng c kt ni vi nhau nh cc vng lin kt
- Cc php ton thng dng trn danh sch:
+ Khi to danh sch (tc l lm cho danh sch c, nhng l danh sch rng)
+ Kim tra xem danh sch c rng khng
+ Lit k cc phn t c trong danh sch
+ Tm kim phn t trong danh sch
+ Thm phn t vo danh sch
+ Xa phn t ra khi danh sch
+ Sa cc thng tin ca phn t trong danh sch
+ Thay th mt phn t trong danh sch bng mt phn t khc
+ Sp xp th t cc phn t trong danh sch
+ Ghp mt danh sch vo mt danh sch khc
+ Trn cc danh sch c th t c mt danh sch mi cng c th t
+ Tch mt danh sch ra thnh nhiu danh sch
...
- Trong thc t mt bi ton c th ch dng mt s php ton no , nn ta phi bit
cch biu din danh sch cho ph hp vi bi ton
2.2. Danh sch c
2.2.1. nh ngha
Cc phn t ca danh sch c lu tr k tip nhau trong b nh di hnh thc mt
mng
2.2.2. Biu din danh sch c
Xt danh sch c ti a 100 sinh vin gm cc thng tin: h tn, chiu cao, cn nng tiu
chun, nh :
L Li
1.7
65
L Bi
1.8
75
L Vi
1.4
35
L Ni
1.6
55
L Hi
1.5
45
Khai bo:
#include <stdio.h>
#include <conio.h>
#include <string.h>
const int Nmax=100;
typedef char
infor1[15];
typedef float infor2;
typedef int
infor3;
struct element
{ infor1 ht;
infor2 cc;
infor3 cntc;
};
typedef element DS[Nmax];
DS A;
int n;

Hng Nmax kiu int cha s phn t ti a c th c ca danh sch


-----------------------------------------------------------------------------------------------------------08/01/2011 - Cu trc d liu Trang 7

Bin n kiu int cha s phn t thc t hin nay ca danh sch, v d n=5
Kiu bn ghi element gm cc trng ht, cc, cntc ln lt cha h tn, chiu cao, cn nng tiu
chun ca mt sinh vin
infor1, infor2, infor3 ln lt l cc kiu d liu ca cc trng ht, cc, cntc
DS l kiu mng gm Nmax phn t kiu element
Bin A kiu DS l bin mng gm Nmax phn t kiu element
2.2.3. Cc php ton trn danh sch c
- Khi to danh sch: Khi mi khi to danh sch l rng, ta cho n nhn gi tr 0
void Create(DS
{ n=0;
}

A, int

&n)

- Lit k cc phn t trong danh sch: Ta lit k cc phn t t phn t u tin tr i


void Display(DS A, int n)
{ int i;
for (i=0; i<=n-1; i++)
printf("\n %15s %7.2f
}

%7d" ,A[i].ht, A[i].cc, A[i].cntc);

- Tm kim mt phn t trong danh sch: Tm phn t c h tn x cho trc. Ta tm bt


u t phn t u tin tr i, cho n khi tm c phn t cn tm hoc kim tra xong phn
t cui cng m khng c th dng. Hm Search(A, n, x) tm v tr v gi tr kiu int, l s th t
ca phn t u tin tm c hoc tr v gi tr -1 nu tm khng c
int Search(DS A, int n, infor1 x)
{ int i;
i=0;
while ( (i<=n-1) && (strcmp(A[i].ht,x)!=0) )
i++;
if (i<=n-1) return i;
else return -1;
}

- Thm mt phn t c h tn x, chiu cao y, cn nng tiu chun z vo v tr th t trong


danh sch. iu kin: n<Nmax v 0 t n
Khi cc phn t t th t n th n-1 c di xung 1 v tr trong phn t di
th di trc, phn t trn di sau. Sau chn phn t mi vo v tr th t, cui cng tng gi
tr n ln 1 n v
void InsertElement(DS A, int &n, int t, infor1 x, infor2
{ int i;
if ( (n<Nmax) && (t>=0) && (t<=n) )
{ for (i=n-1; i>=t; i--)
A[i+1]=A[i];
strcpy(A[t].ht,x); A[t].cc=y; A[t].cntc=z;
n++;
}
}

y, infor3

z)

- Xa phn t th t trong danh sch, iu kin: 0 t n-1


Khi cc phn t t th t+1 n th n-1 c di ln 1 v tr trong phn t trn th
di trc, phn t di di sau, cui cng gim gi tr ca n xung 1 n v
void DeleteElement(DS A, int &n,
{ int i;
if ( (t>=0) && (t<=n-1) )
{ for (i=t+1; i<=n-1; i++)
A[i-1]=A[i];
n--;
}
}

int

t)

2.2.4. u nhc im ca danh sch c


2.3. Danh sch lin kt
2.3.1. nh ngha danh sch lin kt
-----------------------------------------------------------------------------------------------------------08/01/2011 - Cu trc d liu Trang 8

Danh sch lin kt l danh sch m cc phn t c kt ni vi nhau nh cc vng lin kt


2.3.2. Biu din danh sch lin kt
Xt danh sch sinh vin gm cc thng tin: h tn, chiu cao, cn nng tiu chun
#include <conio.h>
#include <stdio.h>
#include <string.h>
typedef char
infor1[15];
typedef float infor2;
typedef int
infor3;
struct
element
{ infor1
ht;
infor2
cc;
infor3
cntc;
element *next;
};
typedef element *List;
List F;
// hoc
element

*F;

Kiu bn ghi element gm cc trng ht, cc, cntc dng cha cc thng tin ca mt phn t
trong danh sch, ngoi ra cn c thm trng lin kt next cha a ch ca phn t tip theo
trong danh sch
Kiu con tr List dng ch n mt phn t kiu element
Bin con tr F dng ch n phn t u tin trong danh sch lin kt
2.3.3. Cc php ton trn danh sch lin kt
- Khi to danh sch: Khi mi khi to danh sch l rng ta cho F nhn gi tr NULL
void Create(List
{ F=NULL;
}

&F)

- Lit k cc phn t trong danh sch: Ta lit k cc phn t k t phn t u tin c


ch bi bin con tr F v da vo trng lin kt next ln lt lit k cc phn t tip theo
Bin con tr p ln lt ch n tng phn t trong danh sch bt u t phn t u tin
ch bi F tr i
void Display(List F)
{ List p;
p=F;
while (p != NULL)
{ printf("\n %15s %7.2f
p=(*p).next;
}
}

%7d", (*p).ht , (*p).cc , (*p).cntc);

- Tm kim mt phn t trong danh sch: Tm phn t c h tn x trong danh sch


Ta tm bt u t phn t u tin c ch bi F tr i cho n khi tm c phn t cn
tm hoc kim tra xong phn t cui cng m khng c th dng. Hm Search(F, x) kiu List,
tm v tr v a ch ca phn t u tin tm c hoc tr v gi tr NULL nu tm khng c
List Search(List F, infor1 x)
{ List p;
p=F;
while ( (p!=NULL) && strcmp((*p).ht,x) !=0 )
p= (*p).next;
return p;
}

- Thm mt phn t vo u danh sch:


Thm mt phn t c h tn x, chiu cao y, cn nng tiu chun z vo u danh sch.
Bin con tr p ch n phn t mi cn thm vo
void InsertFirst(List &F, infor1 x, infor2
{ List p;
p=new element;
strcpy((*p).ht,x); (*p).cc=y; (*p).cntc=z;
(*p).next=F;
// 1
F=p;
// 2
}

y, infor3

z)

- Thm mt phn t vo danh sch c th t


-----------------------------------------------------------------------------------------------------------08/01/2011 - Cu trc d liu Trang 9

Thm mt phn t c h tn x, chiu cao y, cn nng tiu chun z vo danh sch trc
c th t h tn tng dn
p ch n phn t mi cn thm vo
Cc bin con tr before v after ln lt ch n phn t ng ngay trc v ngay sau
phn t mi. tm after th ta tm bt u t phn t u tin ch bi F tr i cho n khi gp
c phn t u tin c h tn ln hn x th dng, ri chn phn t mi vo
void InsertSort(List &F, infor1 x, infor2 y, infor3 z)
{ List p, before, after;
p=new element;
strcpy((*p).ht,x); (*p).cc=y; (*p).cntc=z;
after=F;
while ( (after!=NULL) && ( strcmp((*after).ht,x)<0 ) )
{ before=after;
after=(*after).next;
};
(*p).next=after;
// 1
if (F==after) F=p;
// 2
else (*before).next=p; // 2
}

- Xa phn t u tin trong danh sch: Bin con tr p ch n phn t cn xa. Ta cho F
ch n phn t tip theo.
void DeleteFirst(List
{ List p;
if (F!=NULL)
{ p=F;
F=(*p).next;
delete p;
}
}

&F)

// 1

- Xa phn t ch bi bin con tr t: Bin con tr before ch n phn t ng ngay trc


phn t cn xa, bin con tr after ch n phn t ng ngay sau phn t ch bi bin before
void DeleteElement(List &F, List t)
{ List before, after;
after=F;
while ( ( after!=NULL) && (after!=t) )
{ before = after;
after=(*after).next;
}
if (after!=NULL)
{ if (F==t)
F=(*t).next;
else (*before).next=(*t).next;
delete t;
}
}

// 1
// 1

2.3.4. u nhc im ca danh sch lin kt


Danh sch c s phn t l bt k min l b nh ln, thc hin nhanh cc php thm
vo v loi b. Tuy nhin chim dng b nh nhiu
2.4. Danh sch a lin kt
2.4.1. nh ngha
Danh sch a lin kt l danh sch c nhiu mi lin kt
2.4.2. Biu din danh sch a lin kt
Xt danh sch a lin kt cc sinh vin gm h tn, chiu cao, cn nng tiu chun.
Trong danh sch ny c khi ta cn danh sch c sp xp theo th t h tn tng dn, cng c
khi ta cn danh sch c sp xp theo th t chiu cao tng dn. Khi mi phn t trong danh
sch a lin kt l mt bn ghi ngoi cc trng cha d liu ca bn thn n th cn c thm 2
trng lin kt. Trng lin kt th nht ta c th t tn l next1 dng ch n phn t ng
ngay sau n theo th t h tn, trng lin kt th hai next2 ch n phn t ng ngay sau n
theo th t chiu cao
typedef
typedef
typedef
struct
{ infor1

char
infor1[15];
float infor2;
int
infor3;
element
ht;

-----------------------------------------------------------------------------------------------------------08/01/2011 - Cu trc d liu Trang 10

infor2
infor3
element

cc;
cntc;
*next1, *next2;

};
typedef element
List F1, F2;

*List;

Bin con tr F1 ch n phn t u tin trong danh sch c sp theo th t h tn tng


dn, bin con tr F2 ch n phn t u tin c sp theo th t chiu cao tng dn
2.4.3. Cc php ton trn danh sch a lin kt
- Khi to danh sch: Khi mi khi to danh sch l rng, ta cho F1 v F2 nhn gi tr
NULL
void Create(List &F1, List
{ F1=NULL; F2=NULL;
}

&F2)

- Lit k cc phn t trong danh sch theo th t h tn: Ta lit k bt u t phn t u


tin ch bi bin con tr F1, v da vo trng lin kt next1 ln lt lit k cc phn t tip
theo
void Display1(List F1)
{ List p;
p=F1;
while (p != NULL)
{ printf("\n %15s %7.2f
p=(*p).next1;
}
}

%7d", (*p).ht , (*p).cc , (*p).cntc);

- Lit k cc phn t trong danh sch theo th t chiu cao: Ta lit k bt u t phn t
u tin ch bi bin con tr F2, v da vo trng lin kt next2 ln lt lit k cc phn t
tip theo
void Display2(List F2)
{ List p;
p=F2;
while (p != NULL)
{ printf("\n %15s %7.2f
p=(*p).next2;
}
}

%7d", (*p).ht , (*p).cc , (*p).cntc);

- Thm mt phn t c h tn x, chiu cao y, cn nng tiu chun z vo danh sch:


Bin con tr p ch n phn t mi cn thm vo. Bin con tr before ch n phn t
ng ngay trc phn t mi theo th t h tn v th t chiu cao. Bin con tr after ch n
phn t ng ngay sau phn t c ch bi before
void InsertElement(List &F1, List &F2, infor1 x, infor2
{ List p, before, after;
p=new element;
strcpy((*p).ht,x); (*p).cc=y; (*p).cntc=z;
// Tim before va after theo ho ten
after=F1;
while ( (after!=NULL) && (strcmp((*after).ht,x)<0) )
{ before=after;
after=(*after).next1;
};
(*p).next1=after;
if (F1==after) F1=p;
else (*before).next1=p;
// Tim before va after theo chieu cao
after=F2;
while ( (after!=NULL) && ( (*after).cc<y ) )
{ before=after;
after=(*after).next2;
};
(*p).next2=after;
if (F2==after) F2=p;
else (*before).next2=p;
}

y, infor3

z)

- Xa mt phn t trong danh sch: Tm ri xa phn t c h tn x, chiu cao y


Bin con tr p ch n phn t cn xa. Bin con tr before ln lt ch n phn t ng
ngay trc phn t cn xa theo th t h tn v th t chiu cao
-----------------------------------------------------------------------------------------------------------08/01/2011 - Cu trc d liu Trang 11

void DeleteElement(List &F1, List &F2, infor1 x, infor2 y)


{ List p, t, before;
// Tim p
// Tim before theo ho ten
p=F1;
while ( (p!=NULL) && ( (strcmp((*p).ht,x)<0) ||
( (strcmp((*p).ht,x)==0) && ((*p).cc!=y) ) ) )
{ before = p;
p=(*p).next1;
}
if ( (p!=NULL) && (strcmp((*p).ht,x)==0) && ((*p).cc==y) )
// nu tm c
{ if (F1==p) F1=(*p).next1;
else (*before).next1=(*p).next1;
// Tim before theo chieu cao
t=F2;
while (t!=p)
{ before = t;
t = (*t).next2;
}
if (F2==p) F2=(*p).next2;
else (*before).next2 = (*p).next2;
delete p;
}
}

2.5. Danh sch lin kt kp


2.5.1. nh ngha: Danh sch lin kt kp l danh sch m mi phn t trong danh sch c
kt ni vi phn t ng ngay trc v phn t ng ngay sau n
2.5.2. Biu din danh sch lin kt kp
Cc khai bo sau nh nghi mt danh sch lin kt kp n gin trong ta dng hai con
tr: pPrev lin kt vi phn t ng trc v pNext nh thng l, lin kt vi phn t ng sau:
typedef
struct tagDNode
{
Data
Info;
struct tagDNode* pPre;
// tr n
struct tagDNode* pNext;
// tr n
}DNODE;
typedef
struct tagDList
{
DNODE* pHead;
// tr n
DNODE* pTail; // tr n phn t cui
}DLIST;

phn t ng trc
phn t ng sau
phn t u danh sch
danh sch

khi , th tc khi to mt phn t cho danh sch lin kt kp c vit li nh sau :


DNODE* GetNode(Data x)
{
DNODE *p;
// Cp pht vng nh cho phn t
p = new DNODE;
if ( p==NULL)
{
printf("khong du bo nho");
exit(1);
}
// Gn thng tin cho phn t p
p ->Info = x;
p->pPrev = NULL;
p->pNext = NULL;
return p;
}

2.5.3. Cc php ton trn danh sch lin kt kp


Tng t danh sch lin kt n, ta c th xy dng cc thao tc c bn trn danh sch lin kt
kp (xu kp). Mt s thao tc khng khc g trn xu n. Di y l mt s thao tc c trng
ca xu kp:
- Chn mt phn t vo danh sch:
C 4 loi thao tc chn new_ele vo danh sch:
-----------------------------------------------------------------------------------------------------------08/01/2011 - Cu trc d liu Trang 12

Cch 1: Chn vo u danh sch


Ci t :

void AddFirst(DLIST &l, DNODE* new_ele)


{
if (l.pHead==NULL) //Xu rng
{
l.pHead = new_ele; l.pTail = l.pHead;
}
else
{
new_ele->pNext = l.pHead; // (1)
l.pHead ->pPrev = new_ele; // (2)
l.pHead = new_ele; // (3)
}
}
NODE* InsertHead(DLIST &l, Data x)
{
NODE* new_ele = GetNode(x);
if (new_ele ==NULL) return NULL;
if (l.pHead==NULL)
{
l.pHead = new_ele; l.pTail = l.pHead;
}
else
{
new_ele->pNext = l.pHead; // (1)
l.pHead ->pPrev = new_ele; // (2)
l.pHead = new_ele; // (3)
}
return new_ele;
}

Cch2: Chn vo cui danh sch


Ci t :

void AddTail(DLIST &l, DNODE *new_ele)


{
if (l.pHead==NULL)
{
l.pHead = new_ele; l.pTail = l.pHead;
}
else
{
l.pTail->Next = new_ele;
// (1)
new_ele ->pPrev = l.pTail; // (2)
l.pTail = new_ele; // (3)
}
}
NODE* InsertTail(DLIST &l, Data x)
{
NODE* new_ele = GetNode(x);
if (new_ele ==NULL) return NULL;
if (l.pHead==NULL)
{
l.pHead = new_ele; l.pTail = l.pHead;
}
else
{
l.pTail->Next = new_ele;
// (1)
new_ele ->pPrev = l.pTail; // (2)
l.pTail = new_ele; // (3)
}
return new_ele;
}

Cch 3 : Chn vo danh sch sau mt phn tq


Ci t :

void AddAfter(DLIST &l, DNODE* q,DNODE* new_ele)


{
DNODE* p = q->pNext;
if ( q!=NULL)
{
new_ele->pNext = p; //(1)
new_ele->pPrev = q; //(2)
q->pNext = new_ele; //(3)
if(p != NULL)
p->pPrev = new_ele; //(4)
if
(q == l.pTail)
l.pTail = new_ele;

-----------------------------------------------------------------------------------------------------------08/01/2011 - Cu trc d liu Trang 13

}
else //chn vo u danh sch
AddFirst(l, new_ele);
}
void InsertAfter(DLIST &l, DNODE *q, Data x)
{
DNODE* p = q->pNext;
NODE* new_ele = GetNode(x);
if (new_ele ==NULL) return NULL;
if ( q!=NULL)
{
new_ele->pNext = p; //(1)
new_ele->pPrev = q; //(2)
q->pNext = new_ele; //(3)
if(p != NULL)
p->pPrev = new_ele; //(4)
if(q == l.pTail)
l.pTail = new_ele;
}
else //chn vo u danh sch
AddFirst(l, new_ele);
}

Cch 4 : Chn vo danh sch trc mt phn t q

Ci t :
void
AddBefore(DLIST &l, DNODE q, DNODE* new_ele)
{
DNODE* p = q->pPrev;
if ( q!=NULL)
{
new_ele->pNext = q; //(1)
new_ele->pPrev = p; //(2)
q->pPrev = new_ele; //(3)
if(p != NULL)
p->pNext = new_ele; //(4)
if(q == l.pHead)
l.pHead = new_ele;
}
else //chn vo u danh sch
AddTail(l, new_ele);
}
void InsertBefore(DLIST &l, DNODE q, Data x)
DNODE* p = q->pPrev;
NODE* new_ele = GetNode(x);
if (new_ele ==NULL) return NULL;
if ( q!=NULL)
{
new_ele->pNext = q; //(1)
new_ele->pPrev = p; //(2)
q->pPrev = new_ele; //(3)
if(p != NULL)
p->pNext = new_ele; //(4)
if(q == l.pHead)
l.pHead = new_ele;
}
else //chn vo u danh sch
AddTail(l, new_ele);
}
{

- Hy mt phn t khi danh sch


C 5 loi thao tc thng dng hy mt phn t ra khi xu. Chng ta s ln lt kho st
chng.

Hy phn t u xu:

Data
RemoveHead(DLIST &l)
{
DNODE *p;
Data
x = NULLDATA;
if ( l.pHead != NULL)
{
p = l.pHead; x = p->Info;
l.pHead = l.pHead->pNext;
l.pHead->pPrev = NULL;

-----------------------------------------------------------------------------------------------------------08/01/2011 - Cu trc d liu Trang 14

delete p;
if(l.pHead == NULL) l.pTail = NULL;
else l.pHead->pPrev = NULL;
}
return x;
}

Hy phn t cui xu:

Data RemoveTail(DLIST &l)


{
DNODE *p;
Data
x = NULLDATA;
if ( l.pTail != NULL)
{p = l.pTail; x = p->Info;
l.pTail = l.pTail->pPrev;
l.pTail->pNext = NULL;
delete p;
if(l.pHead == NULL)
l.pTail = NULL;
else l.pHead->pPrev = NULL;
}
return x;
}

Hy mt phn t ng sau phn t q

void RemoveAfter (DLIST &l, DNODE *q)


{
DNODE *p;
if ( q != NULL)
{
p = q ->pNext ;
if ( p != NULL)
{
q->pNext = p->pNext;
if(p == l.pTail)
l.pTail = q;
else p->pNext->pPrev = q;
delete p;
}
}
else
RemoveHead(l);
}

Hy mt phn t ng trc phn t q

void RemoveAfter (DLIST &l, DNODE *q)


{
DNODE *p;
if ( q != NULL)
{
p = q ->pPrev;
if ( p != NULL)
{
q->pPrev = p->pPrev;
if(p == l.pHead)
l.pHead = q;
else p->pPrev->pNext = q;
delete p;
}
}
else
RemoveTail(l);
}

Hy 1 phn t c kho k

int RemoveNode(DLIST &l, Data k)


{
DNODE *p = l.pHead;
NODE
*q;
while( p != NULL)
{
if(p->Info == k) break;
p = p->pNext;
}
If
(p == NULL) return 0; //Khng tm thy k
q = p->pPrev;
if ( q != NULL)
{
p = q ->pNext ;
if ( p != NULL)
{
q->pNext = p->pNext;
if(p == l.pTail)

-----------------------------------------------------------------------------------------------------------08/01/2011 - Cu trc d liu Trang 15

l.pTail = q;
else p->pNext->pPrev = q;
}
}
else
//p l phn t u xu
{
l.pHead = p->pNext;
if(l.pHead == NULL)
l.pTail = NULL;
else
l.pHead->pPrev = NULL;
}
delete p;
return 1;
}

* Nhn xt: Danh sch lin kt kp v mt c bn c tnh cht ging nh xu n. Tuy nhin n
c mt s tnh cht khc xu n nh sau:
Xu kp c mi lin kt hai chiu nn t mt phn t bt k c th truy xut mt phn t
bt k khc. Trong khi trn xu n ta ch c th truy xut n cc phn t ng sau mt phn t
cho trc. iu ny dn n vic ta c th d dng hy phn t cui xu kp, cn trn xu n
thao tc ny tn chi ph O(n).
B li, xu kp tn chi ph gp i so vi xu n cho vic lu tr cc mi lin kt. iu
ny khin vic cp nht cng nng n hn trong mt s trng hp. Nh vy ta cn cn nhc la
chn CTDL hp l khi ci t cho mt ng dng c th.
2.6. Danh sch lin kt vng
Danh sch lin kt vng l mt danh sch n (hoc kp) m phn t ng cui cng ch
n phn t u tin trong danh sch. biu din ta c th s dng cc k thut biu din nh
danh sch n (hoc kp)
Ta c th khai bo xu vng nh khai bo xu n (hoc kp). Trn danh sch vng ta c
cc thao tc thng gp sau:
- Tm phn t trn danh sch vng
Danh sch vng khng c phn t u danh sch r rt, nhng ta c th nh du mt
phn t bt k trn danh sch xem nh phn t u xu kim tra vic duyt qua ht
cc phn t ca danh sch hay cha.
NODE* Search(LIST &l, Data x)
{
NODE
*p;
p = l.pHead;
do
{
if ( p->Info == x)
return p;
p = p->pNext;
}while (p != l.pHead);
// cha i gip vng
return p;
}

- Thm phn t u xu:


void
AddHead(LIST &l, NODE *new_ele)
{
if(l.pHead == NULL) //Xu rng
{
l.pHead = l.pTail = new_ele;
l.pTail->pNext = l.pHead;
}
else
{
new_ele->pNext = l.pHead;
l.pTail->pNext = new_ele;
l.pHead = new_ele;
}
}

- Thm phn t cui xu:


-----------------------------------------------------------------------------------------------------------08/01/2011 - Cu trc d liu Trang 16

void
AddTail(LIST &l, NODE *new_ele)
{
if(l.pHead == NULL) //Xu rng
{
l.pHead = l.pTail = new_ele;
l.pTail->pNext = l.pHead;
}
else
{
new_ele->pNext = l.pHead;
l.pTail->pNext = new_ele;
l.pTail = new_ele;
}
}

- Thm phn t sau nt q:


void
AddAfter(LIST &l, NODE *q, NODE *new_ele)
{
if(l.pHead == NULL) //Xu rng
{
l.pHead = l.pTail = new_ele;
l.pTail->pNext = l.pHead;
}
else
{
new_ele->pNext = q->pNext;
q->pNext = new_ele;
if(q == l.pTail)
l.pTail = new_ele;
}
}

- Hy phn t u xu:
void RemoveHead(LIST &l)
{
NODE
*p = l.pHead;
if(p == NULL) return;
if (l.pHead = l.pTail) l.pHead = l.pTail = NULL;
else
{
l.pHead = p->Next;
if(p == l.pTail)
l.pTail->pNext = l.pHead;
}
delete p;
}

- Hy phn t ng sau nt q:
void RemoveAfter(LIST &l, NODE *q)
{
NODE
*p;
if(q != NULL)
{
p = q ->Next ;
if ( p == q) l.pHead = l.pTail = NULL;
else
{
q->Next = p->Next;
if(p == l.pTail)
l.pTail = q;
}
delete p;
}
}

Nhn xt: i vi danh sch vng, c th xut pht t mt phn t bt k duyt ton
b danh sch
2.7. Danh sch hn ch
2.7.1. Khi nim
Danh sch hn ch l danh sch m cc php ton ch c thc hin mt phm vi no
ca danh sch, trong thng ngi ta ch xt cc php thm vo hoc loi b ch c thc
hin u danh sch. Danh sch hn ch c th c biu din bng danh sch c hoc bng
danh sch lin kt. C 2 loi danh sch hn ch ph bin l ngn xp v hng i
2.7.2. Ngn xp (hay chng hoc Stack)
-----------------------------------------------------------------------------------------------------------08/01/2011 - Cu trc d liu Trang 17

2.7.2.1. nh ngha
Ngn xp l mt danh sch m cc php ton thm vo hoc loi b ch c thc hin
cng mt u ca danh sch. u ny gi l nh ca ngn xp. Nh vy phn t thm vo u
tin s c ly ra cui cng
2.7.2.2. Biu din ngn xp bng danh sch lin kt
Xt ngn xp cc sinh vin gm h tn, chiu cao, cn nng tiu chun
typedef
char
infor1[15];
typedef
float
infor2;
typedef
int
infor3;
struct
element
{ infor1
ht;
infor2
cc;
infor3
cntc;
element
*next;
};
typedef
element
*Stack;
Stack
S;

Ta dng danh sch lin kt cha cc phn t trong ngn xp. Mt phn t trong danh
sch lin kt cha mt phn t trong ngn xp theo th t l phn t u tin trong danh sch
lin kt cha phn t nh ca ngn xp
Stack l kiu con tr ch n 1 phn t trong danh sch
Bin con tr S ch n phn t u tin trong danh sch
2.7.2.3. Cc php ton trn ngn xp c biu din bng danh sch lin kt
- Khi to ngn xp: Khi mi khi to, ngn xp l rng ta cho S nhn gi tr NULL
void Create(Stack
{ S=NULL;
}

&S)

- Php lit k cc phn t trong ngn xp:


void Display(Stack S)
{ Stack p;
p=S;
while (p != NULL)
{ printf("\n %15s %7.2f
p=(*p).next;
}
}

%7d", (*p).ht , (*p).cc , (*p).cntc);

- Php thm mt phn t c h tn x, chiu cao y, cn nng tiu chun z vo ngn xp


(thm vo u ngn xp):
void InsertStack(Stack &S, infor1 x, infor2
{ Stack p;
p=new element;
strcpy((*p).ht,x); (*p).cc=y; (*p).cntc=z;
(*p).next=S;
S=p;
}

y, infor3

z)

- Php xa mt phn t trong ngn xp (xa phn t u tin)


void DeleteStack(Stack
{ Stack p;
if (S!=NULL)
{ p=S;
S=(*p).next;
delete p;
}
}

&S)

2.7.3. Hng i (hay Queue):


2.7.3.1. nh ngha
Hng i l danh sch m php thm vo c thc hin u ny cn php loi b c thc
hin u kia ca danh sch. Nh vy phn t thm vo u tin s c ly ra u tin
2.7.3.2. Biu din hng i bng danh sch lin kt
Xt hng i cc sinh vin gm h tn, chiu cao, cn nng tiu chun
-----------------------------------------------------------------------------------------------------------08/01/2011 - Cu trc d liu Trang 18

struct
element
{ infor1
ht;
infor2
cc;
infor3
cntc;
element
*next;
};
typedef
element
*Queue;
Queue
Front, Rear;

Ta dng danh sch lin kt cha cc phn t trong hng i, mt phn t trong danh
sch lin kt cha mt phn t trong hng i theo th t l phn t u tin trong danh sch lin
kt cha phn t u tin trong hng i
Bin con tr Front ch n phn t u tin ca danh sch lin kt, chnh l phn t
u tin ca hng i
Bin con tr Rear ch n phn t cui cng ca danh sch lin kt, chnh l phn t
cui cng ca hng i
2.7.3.3. Cc php ton trn hng i c biu din bng danh sch lin kt
- Khi to hng i: Khi mi khi to, hng i l rng ta cho Front v Rear nhn gi tr
NULL
void Create(Queue
&Front, Queue
{ Front=NULL; Rear=NULL;
}

&Rear)

- Lit k cc phn t trong hng i:


void Display(Queue Front, Queue Rear)
{ Queue p;
p=Front;
while (p != NULL)
{ printf("\n %20s %7.2f %7d" , (*p).ht , (*p).cc , (*p).cntc);
p=(*p).next;
}
}

- Thm mt phn t c h tn x, chiu cao y, cn nng tiu chun z vo hng i (vo


cui danh sch lin kt)
void InsertQueue(Queue &Front, Queue &Rear, infor1
{ Queue p;
p=new element;
strcpy((*p).ht,x); (*p).cc=y; (*p).cntc=z;
(*p).next=NULL;
// 1
if (Front==NULL) Front=p;
// 2
else (*Rear).next=p;
// 2
Rear=p;
// 3
}

x, infor2

y, infor3

z)

- Php xa mt phn t trong hng i (xa phn t u tin)


void DeleteQueue(Queue &Front, Queue
{ Queue
p;
if (Front!=NULL)
{ p=Front;
Front=(*Front).next;
if (Front==NULL) Rear=NULL;
delete p;
}
}

&Rear)

// 1
// 2

-----------------------------------------------------------------------------------------------------------08/01/2011 - Cu trc d liu Trang 19

BI TP L THUYT
BI 1: Phn tch u, khuyt im ca xu lin kt so vi mng. Tng qut ha cc trng hp
nn dng xu lin kt.
BI 2: Xy dng mt cu trc d liu thch hp biu din a thc P(x) c dng :
P(x) = c1xn1 + c2xn2 +...+ckxnk
Bit rng:
- Cc thao tc x l trn a thc bao gm :
+ Thm mt phn t vo cui a thc
+ In danh sch cc phn t trong a thc theo :
. th t nhp vo
. ngc vi th t nhp vo
+ Hy mt phn t bt k trong danh sch
- S lng cc phn t khng hn ch
- Ch c nhu cu x l a thc trong b nh chnh.
a)Gii thch l do chn CTDL nh ngha.
b)Vit chng trnh con c lng gi tr ca a thc P(x) khi bit x.
c)Vit chng trnh con rt gn biu thc (gp cc phn t cng s m).
Bi 3: Xt on chng trnh to mt xu n gm 4 phn t (khng quan tm d liu) sau y:
Dx
=
NULL;
p=Dx;
Dx
=
new
(NODE);
for(i=0;
i
<
4;
i++)
{
p
=
p->next;
p = new (NODE);
}
(*p).next = NULL;
on chng trnh c thc hin c thao tc to nu trn khng ? Ti sao ? Nu khng th c
th sa li nh th no cho ng ?
Bi 4: Mt ma trn ch cha rt t phn t vi gi tr c ngha (v d: phn t khc khng) c
gi l ma trn tha.
Dng cu trc xu lin kt t chc biu din mt ma trn tha sao cho tit kim nht (ch lu
tr cc phn t c ngha).
a)Vit chng trnh cho php nhp, xut ma trn.
b)Vit chng trnh con cho php cng hai ma trn.
Bi 5: Bi ton Josephus : c N ngi quyt nh t st tp th bng cch ng trong vng
trn v git ngi th M quanh vng trn, thu hp hng ng li khi tng ngi ln lt ng khi
vng trn. Vn l tm ra th t tng ngi b git.
V d : N = 9, M = 5 th th t l 5, 1, 7, 4, 3, 6, 9, 2, 8
Hy vit chng trnh gii quyt bi ton Josephus, x dng cu trc xu lin kt.
Bi 6: Hy cho bit ni dung ca stack sau mi thao tc trong dy :
EAS*Y**QUE***ST***I*ON
Vi mt ch ci tng trng cho thao tc thm ch ci tng ng vo stack, du * tng trng
cho thao tc ly ni dung mt phn t trong stack in ln mn hnh.
Hy cho bit sau khi hon tt chui thao tc, nhng g xut hin trn mn hnh ?
Bi 7: Hy cho bit ni dung ca hng i sau mi thao tc trong dy :
EAS*Y**QUE***ST***I*ON
Vi mt ch ci tng trng cho thao tc thm ch ci tng ng vo hng i, du * tng
trng cho thao tc ly ni dung mt phn t trong hng i in ln mn hnh.
Hy cho bit sau khi hon tt chui thao tc, nhng g xut hin trn mn hnh ?
Bi 8: Gi s phi xy dng mt chng trnh son tho vn bn, hy chn cu trc d liu thch
hp lu tr vn bn trong qu trnh son tho. Bit rng :
- S dng vn bn khng hn ch.
- Mi dng vn bn c chiu di ti a 80 k t.
- Cc thao tc yu cu gm :
+ Di chuyn trong vn bn (ln, xung, qua tri, qua phi)
+ Thm, xo sa k t trong mt dng
-----------------------------------------------------------------------------------------------------------08/01/2011 - Cu trc d liu Trang 20

+ Thm, xo mt dng trong vn bn


+ nh du, sao chp khi
Gii thch l do chn cu trc d liu .
Bi 9: Vit hm ghp 2 xu vng L1, L2 thnh mt xu vng L vi phn t u xu l phn t
u xu ca L1.
BI TP THC HNH
Bi 10: Ci t thut ton sp xp Chn trc tip trn xu kp. C pht huy u th ca thut ton
hn trn mng hay khng ?
Bi 11: Ci t thut ton QuickSort theo kiu khng qui.
Bi 12: Ci t thut ton MergeSort trn xu kp.
Bi 13: Ci t li chng trnh qun l nhn vin theo bi tp 6 chng 1, nhng s dng cu
trc d liu xu lin kt. Bit rng s nhn vin khng hn ch.
Bi 14: Ci t mt chng trnh son tho vn bn theo m t trong bi tp 8.
Bi 15: Ci t chng trnh to mt bng tnh cho php thc hin cc php tnh +, -, *, /, div
trn cc s c ti a 30 ch s, c chc nng nh (M+, M-, MC, MR).
Bi 16: Ci t chng trnh cho php nhn vo mt biu thc gm cc s, cc ton t +, -, *, /,
%, cc hm ton hc sin, cos, tan, ln, ex, du m, ng ngoc "(", ")" v tnh ton gi tr ca biu
thc ny.

-----------------------------------------------------------------------------------------------------------08/01/2011 - Cu trc d liu Trang 21

Chng 3:

CY

Trong chng ny chng ta s nghin cu m hnh d liu cy. Cy l mt cu trc phn


cp trn mt tp hp no cc i tng. Mt v d quen thuc v cy, l cy th mc.Cy
c s dng rng ri trong rt nhiu vn khc nhau. Chng hn, n c p dng t chc
thng tin trong cc h c s d liu, m t cu trc c php ca cc chng trnh ngun khi
xy dng cc chng trnh dch. Rt nhiu cc bi ton m ta gp trong cc lnh vc khc nhau
c quy v vic thc hin cc php ton trn cy. Trong chng ny chng ta s trnh by nh
ngha v cc khi nim c bn v cy. Chng ta cng s xt cc phng php biu din cy v s
thc hin cc php ton c bn trn cy. Sau chng ta s nghin cu k mt dng cy c
bit, l cy tm kim nh phn.
3.1. Mt s khi nim
3.1.1. Cc nh ngha
- Cy: l mt tp hp hu hn cc phn t, mi phn t gi l mt nt (Node), trong
c mt nt c bit gi l gc (Root), gia cc nt c mt quan h phn cp gi l quan h cha
con
V d cho cy cc k t
Mc 1
gc
A

Mc 2

Mc 3

C
A

E
A

F
A

G
A

H
A

I
A

J
K
Mc 4
A
A
A: nt gc
A l nt cha ca B, C, D
B, C, D l cc nt con ca A
- Cy rng: cy khng c nt no c
- Cp ca nt: s nt con ca n, vd nt B c cp l 2
- Cp ca cy: cp ln nht ca cc nt c trn cy. Cy c cp n gi l cy n phn, v d
cy trn l cy tam phn
- L: nt c cp l 0, v d cc l F, C, G, J
- Mc: Nt gc c mc l 1. Nt cha c mc i th nt con c mc i+1
- Chiu cao ca cy: mc ln nht trn cy, v d cy trn c chiu cao 4
- Nt trc, nt sau: Nt x l nt trc ca nt y nu cy con gc x c cha nt y, khi
y l nt sau ca nt x. v d D l nt trc ca nt J
- ng i (path): Dy nt u1, u2, . . . uk m nt bt k ui l cha ca nt ui+1 th dy l
ng i t nt u1 n nt uk
- di ng i: s cnh c trn ng i, v d dy DHJ l ng i t nt D n nt
J vi di l 2
- Cy c th t (ordered tree): l cy m nu ta thay i v tr ca cc cy con th ta c
mt cy mi. Nh vy nu ta i cc nt bn tri v bn phi th ta c mt cy mi, v d sau
y l 2 cy khc nhau:

-----------------------------------------------------------------------------------------------------------08/01/2011 - Cu trc d liu Trang 22

A
J
A
B
J
A

A
A
C
J
A

C
A

B
J
A

- Rng: l tp hp hu hn cc cy phn bit


3.1.2. Cc cch biu din cy
- Biu din cy bng th
- Biu din cy bng gin
- Biu din cy bng cc cp du ngoc lng nhau
- Biu din cy bng phng php cn l
- Biu din cy bng phng php ch s
3.2. Cy nh phn
3.2.1. nh ngha v tnh cht
3.2.1.1. nh ngha
Cy nh phn l cy m mi nt trn cy c ti a 2 con. Trong cy nh phn ngi ta c phn
bit nt con tri v nt con phi, nh vy cy nh phn l cy c th t
T

D
A

G
A

C
A

E
A

13

H
A

F
A

14

I
A

3.2.1.2. Cc dng c bit ca cy nh phn


Cy nh phn suy bin l cy lch tri hoc cy lch phi
Cy zic-zc
Cy nh phn hon chnh: cc nt ng vi cc mc tr mc cui cng u c 2 con
Cy nh phn y : c cc nt ti a c mi mc
Cy nh phn y l mt trng hp c bit ca cy nh phn hon chnh
3.2.1.3. Cc tnh cht
Mc i ca cy nh phn c ti a 2i-1 nt
Cy nh phn vi chiu cao i c ti a 2i-1 nt
Cy nh phn vi n nt th chiu cao h>=log2(n)
-----------------------------------------------------------------------------------------------------------08/01/2011 - Cu trc d liu Trang 23

3.2.2. Biu din cy nh phn


3.2.2.1. Biu din cy nh phn bng danh sch c
Vi cy nh phn hon chnh, ta c th nh s th t cho cc nt trn cy t gc tr
xung v t tri sang phi bt u t 0 tr i, khi nt th i c nt con tri l th 2i+1 v c
nt con phi th 2i+2
Khi ta dng mt mng 1 chiu lu tr cc nt trn cy nh phn, trong phn t
th i ca mng cha nt th i ca cy nh phn
Mi nh ca cy c biu din bi bn ghi gm ba trng: trng data m t thng tin
gn vi mi nh, trng left ch nh con tri, trng right ch nh con phi. Gi s cc nh
ca cy c nh s t 0 n max-1, khi cu trc d liu biu din cy nh phn c khai
bo nh sau.
Khai bo:

const int max= . . . ;


struct element
{ char data;
// trng cha d liu
int left;
int right;
};
typedef node Tree[max];
Tree V;
V d cy nh phn cho trn c biu din nh sau:
0
1
2
3
4
5
6
7
8
9
10

data
A
B
C
D
E
F
G

left
1
3
5
-1
-1
-1
13
-1
-1
0
0

right
2
-1
6
8
-1
-1
14
-1
-1
0
0

3.2.2.2. Biu din cy nh phn bng danh sch lin kt


Chng ta cn c th s dng con tr ci t cy nh phn. Trong cch ny mi bn ghi
element biu din mt nt ca cy gm trng data cha d liu ca bn thn nt, ngoi ra cn
c thm 2 trng lin kt left, right ln lt ch n nt con tri v con phi ca n. Ta c khai
bo sau:
struct element
{ char data;
// trng cha d liu
element *left , *right;
};
typedef element *Tree;
Tree T;
Kiu bn ghi element cha mt nt ca cy nh phn, gm trng data cha d liu ca nt, hai
trng con tr left, right ln lt cha a ch ca nt con tri v a ch ca nt con phi ca n
Kiu con tr Tree cha a ch ca 1 nt ca cy nh phn
Bin con tr T kiu Tree cha a ch ca nt gc ca cy nh phn
Vi cch ci t ny, cu trc d liu biu din cy nh phn trn c minh ha bi hnh sau:

-----------------------------------------------------------------------------------------------------------08/01/2011 - Cu trc d liu Trang 24

T
A

T nay v sau chng ta s ch s dng cch biu din cy nh phn bng con tr. Cc php ton
i vi cy nh phn sau ny u c th hin trong cch biu din bng con tr.
3.2.3. Cc php ton trn cy nh phn c biu din bng danh sch lin kt
a. Khi to: Khi mi khi to, cy l rng ta cho T nhn gi tr NULL
void Create(Tree &T)
{ T = NULL;
}
b. Cc php duyt cy
Php duyt cy l lit k tt c cc nt c trn cy mi nt ng 1 ln theo mt th t no
. Thng c 3 php duyt cy l:
- Duyt cy theo th t trc (i vi gc): Kiu duyt ny trc tin thm nt
gc, sau thm cc nt ca cy con tri ri n cy con phi.
. Gc
. Cy con tri
. Cy con phi
Vi du khi duyt cy nhi phn a cho theo th t trc ta c day nut ABDGCEFHI
Hm duyt c th trnh by n gin nh sau:
void DuyetTruoc(Tree T)
{ if (T != NULL)
{ printf((*T).data);
DuyetTruoc( (*T).left );
DuyetTruoc( (*T).right );
}
}
- Duyt cy theo th t gia: Kiu duyt ny trc tin thm nt cc nt ca cy
con tri, sau thm nt gc ri n cy con phi.
. Cy con tri
-----------------------------------------------------------------------------------------------------------08/01/2011 - Cu trc d liu Trang 25

. Gc
. Cy con phi
Vi du khi duyt cy nhi phn a cho theo th t gia ta c day nut DGBAECHFI
Hm duyt c th trnh by n gin nh sau:
void DuyetGiua(Tree T)
{ if (T != NULL)
{ DuyetGiua( (*T).left );
printf((*T).data);
DuyetGiua( (*T).right );
}
}
- Duyt cy theo th t sau:Kiu duyt ny trc tin thm cc nt ca cy con
tri, sau thm cc ca cy con phi, cui cng thm nt gc
. Cy con tri
. Cy con phi
. Gc
Vi du khi duyt cy nhi phn a cho theo th t sau ta c day nut GDBEHIFCA
Hm duyt c th trnh by n gin nh sau:
void DuyetSau(Tree T)
{ if (T != NULL)
{ DuyetSau( (*T).left );
DuyetSau( (*T).right );
printf((*T).data);
}
}
c. Hm to cy nh phn mi t 2 cy nh phn cho trc
d. To trc tip cy nh phn
3.3. Cy nh phn tm kim
3.3.1. nh ngha
Cy nh phn tm kim (CNPTK) l cy nh phn trong ti mi nt bt k th kha ca
nt ang xt ln hn kha ca tt c cc nt thuc cy con tri v nh hn kha ca tt c cc
nt thuc cy con phi.
Nh rng buc v kha trn CNPTK, vic tm kim tr nn c nh hng. Hn na, do
cu trc cy vic tm kim tr nn nhanh ng k.
3.3.2. Cc php ton trn cy nh phn tm kim
Duyt cy:
Thao tc duyt cy trn cy nh phn tm kim hon ton ging nh trn cy nh phn.
Ch c mt lu nh l khi duyt theo th t gia, trnh t cc nt duyt qua s cho ta mt dy
cc nt theo th t tng dn ca kha
Tm mt phn t x trn cy
TNODE *searchNode(TREE T, Data X)
{
if (T) {
if ( T->.Key = = X) return T;
if(T->Key > X)
return searchNode(T->pLeft, X);
else
return searchNode(T->pRight, X);
}
-----------------------------------------------------------------------------------------------------------08/01/2011 - Cu trc d liu Trang 26

return NULL;
}
Ta c th xy dng mt hm tm kim tng ng khng qui nh sau:
TNODE * searchNode(TREE Root, Data x)
{
NODE *p = Root;
while (p != NULL)
{ if(x == p->Key) return p;
else
if(x < p->Key)p = p->pLeft;
else p = p->pRight;
}
return NULL;
}
D dng thy rng s ln so snh ti a phi thc hin tm phn t X l h, vi h l chiu cao
ca cy. Nh vy thao tc tm kim trn CNPTK c n nt tn chi ph trung bnh khong O(log2n)
Thm mt phn t x vo cy
Vic thm mt phn t X vo cy phi bo m iu kin rng buc ca CNPTK. Ta c th thm
vo nhiu ch khc nhau trn cy, nhng nu thm vo mt nt l s l tin li nht do ta c th
thc hin qu trnh tng t thao tc tm kim. Khi chm dt qu trnh tm kim cng chnh l
lc tm c ch cn thm.
Hm insert tr v gi tr 1, 0, 1 khi khng b nh, gp nt c hay thnh cng:
int insertNode(TREE &T, Data X)
{
if(T) {
if(T->Key == X)
return 0; // c
if(T->Key > X)
return insertNode(T->pLeft, X);
else
return insertNode(T->pRight, X);
}
T
=new Tnode;
if(T == NULL)
return -1; //thiu b nh
T->Key
= X;
T->pLeft =T->pRight = NULL;
return 1; //thm vo thnh cng
}
Xa mt phn t trn cy
Vic hy mt phn t ra khi cy phi m bo iu kin rng buc ca cy nh phn tm kim
C 3 trng hp khi hy nt X c th xy ra:
X l nt l.
X ch c 1 con (tri hoc phi).
X c c 2 con
Trng hp th nht: ch n gin hy X v n khng mc ni n phn t no khc.
-----------------------------------------------------------------------------------------------------------08/01/2011 - Cu trc d liu Trang 27

Trng hp th hai: trc khi hy X ta mc ni cha ca X vi con duy nht ca n.


Trng hp cui cng: ta khng th hy trc tip do X c 2 con Ta s hy gin tip.
Thay v hy X, ta s tm mt phn t th mng Y. Phn t ny c ti a mt con. Thng tin lu
ti Y s c chuyn ln lu ti X. Sau , nt b hy tht s s l Y ging nh 2 trng hp
u.
Vn l phi chn Y sao cho khi lu Y vo v tr ca X, cy vn l CNPTK.
C 2 phn t tha mn yu cu:
Phn t nh nht (tri nht) trn cy con phi.
Phn t ln nht (phi nht) trn cy con tri.
Vic chn la phn t no l phn t th mng hon ton ph thuc vo thch ca ngi lp
trnh. y, chng ta s chn phn t (phi nht trn cy con tri lm phn t th mng.
Sau khi hy phn t X=18 ra khi cy tnh trng ca cy s nh trong hnh di y
(phn t 23 l phn t th mng):
Hm delNode tr v gi tr 1, 0 khi hy thnh cng hoc khng c X trong cy:
int delNode(TREE &T, Data X)
{
if(T==NULL) return 0;
if(T->Key > X)
return delNode (T->pLeft, X);
if(T->Key < X)
return delNode (T->pRight, X);
else { //T->Key == X
TNode*
p = T;
if(T->pLeft == NULL)
T
= T->pRight;
else if(T->pRight == NULL)
T
= T->pLeft;
else {
//T c c 2 con
TNode*
q = T->pRight;
searchStandFor(p, q);
}
delete p;
}
}
Trong , hm searchStandFor c vit nh sau:
//Tm phn t th mng cho nt p
void searchStandFor(TREE &p, TREE &q)
{
if(q->pLeft)
searchStandFor(p, q->pLeft);
else {
p->Key
= q->Key;
p
= q;
q
= q->pRight;
}
}
-----------------------------------------------------------------------------------------------------------08/01/2011 - Cu trc d liu Trang 28

To mt cy nh phn tm kim
Ta c th to mt cy nh phn tm kim bng cch lp li qu trnh thm 1 phn t vo
mt cy rng.
Xa ton b cy
Vic ton b cy c th c thc hin thng qua thao tc duyt cy theo th t sau.
Ngha l ta s hy cy con tri, cy con phi ri mi hy nt gc.
void removeTree(TREE &T)
{
if(T)
{
removeTree(T->pLeft);
removeTree(T->pRight);
delete(T);
}
}
3.3.3. nh gi
Tt c cc thao tc searchNode, insertNode, delNode trn CNPTK u c phc tp
trung bnh O(h), vi h l chiu cao ca cy
Trong trong trng hp tt nht, CNPTK c n nt s c cao h = log2(n). Chi ph tm kim khi
s tng ng tm kim nh phn trn mng c th t.
Tuy nhin, trong trng hp xu nht, cy c th b suy bin thnh 1 DSLK (khi m mi nt u
ch c 1 con tr nt l). Lc cc thao tc trn s c phc tp O(n). V vy cn c ci tin
cu trc ca CNPTK t c chi ph cho cc thao tc l log2(n)
3.4. Cy nh phn cn bng
3.4.1. Cy cn bng hon ton
3.4.1.1. nh ngha
Cy cn bng hon ton l cy nh phn tm kim m ti mi nt ca n th s nt ca cy con
tri chnh lch khng qu mt so vi s nt ca cy con phi. V d cho cy cn bng hon ton
sau:
5
0

3
0

1
0

7
0

4
0

2
0

6
0

4
5

8
0

9
0

-----------------------------------------------------------------------------------------------------------08/01/2011 - Cu trc d liu Trang 29

3.4.1.2. nh gi
Mt cy rt kh t c trng thi cn bng hon ton v cng rt d mt cn bng v
khi thm hay hy cc nt trn cy c th lm cy mt cn bng (xc sut rt ln), chi ph cn
bng li cy ln v phi thao tc trn ton b cy.
Tuy nhin nu cy cn i th vic tm kim s nhanh. i vi cy cn bng hon ton,
trong trng hp xu nht ta ch phi tm qua log2n phn t (n l s nt trn cy).
CCBHT c n nt c chiu cao h log2n. y chnh l l do cho php bo m kh nng
tm kim nhanh trn CTDL ny.
Do CCBHT l mt cu trc km n nh nn trong thc t khng th s dng. Nhng u
im ca n li rt quan trng. V vy, cn a ra mt CTDL khc c c tnh ging CCBHT
nhng n nh hn.
Nh vy, cn tm cch t chc mt cy t trng thi cn bng yu hn v vic cn bng
li ch xy ra phm vi cc b nhng vn phi bo m chi ph cho thao tc tm kim t mc
O(log2n).
3.4.2. Cy cn bng
3.4.2.1. nh ngha:
Cy cn bng l cy nh phn tm kim m ti mi nt ca n th cao ca cy con tri chnh
lch khng qu mt so vi cao ca cy con phi, v d cho cy cn bng sau:
5
0

3
0

1
0

7
0

4
0

2
0

6
0

4
5

8
0

7
5

9
0

D dng thy CCBHT l cy cn bng. iu ngc li khng ng, v d cy cn bng


cho l khng cn bng hon ton
3.4.2.2. Lch s cy cn bng (AVL tree)

-----------------------------------------------------------------------------------------------------------08/01/2011 - Cu trc d liu Trang 30

AVL l tn vit tt ca cc tc gi ngi Nga a ra nh ngha ca cy cn bng


Adelson-Velskii v Landis (1962). V l do ny, ngi ta gi cy nh phn cn bng l cy AVL.
T nay v sau, chng ta s dng thut ng cy AVL thay cho cy cn bng.
T khi c gii thiu, cy AVL nhanh chng tm thy ng dng trong nhiu bi ton
khc nhau. V vy, n mau chng tr nn thnh hnh v thu ht nhiu nghin cu. T cy AVL,
ngi ta pht trin thm nhiu loi CTDL hu dng khc nh cy -en (Red-Black Tree),
B-Tree,
3.4.2.3. Chiu cao ca cy AVL
Mt vn quan trng, nh cp n phn trc, l ta pji khng nh cy AVL n
nt phi c chiu cao khong log2(n).
nh gi chnh xc v chiu cao ca cy AVL, ta xt bi ton: cy AVL c chiu cao
h s phi c ti thiu bao nhiu nt ?
Gi N(h) l s nt ti thiu ca cy AVL c chiu cao h.
Ta c N(0) = 0, N(1) = 1 v N(2) = 2.
Cy AVL ti thiu c chiu cao h s c 1 cy con AVL ti thiu chiu cao h-1 v 1 cy
con AVL ti thiu chiu cao h-2. Nh vy:
N(h) = 1 + N(h-1) + N(h-2) (1)
Ta li c: N(h-1) > N(h-2)
Nn t (1) suy ra:
N(h) > 2N(h-2)
N(h) > 22N(h-4)

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

N(h) > 2h/2-1

h < 2log2(N(h)) + 2

Nh vy, cy AVL c chiu cao O(log2(n)).


3.4.2.4. Cu trc d liu cho cy AVL
Ch s cn bng ca mt nt:
nh ngha: Ch s cn bng ca mt nt l hiu ca chiu cao cy con phi v cy con
tri ca n.
i vi mt cy cn bng, ch s cn bng (CSCB) ca mi nt ch c th mang mt
trong ba gi tr sau y:
-----------------------------------------------------------------------------------------------------------08/01/2011 - Cu trc d liu Trang 31

CSCB(p) = 0 <=> cao cy tri (p) = cao cy phi (p)


CSCB(p) = 1 <=> cao cy tri (p) < cao cy phi (p)
CSCB(p) =-1 <=> cao cy tri (p) > cao cy phi (p)
tin trong trnh by, chng ta s k hiu nh sau:
p->balFactor = CSCB(p);
cao cy tri (p) k hiu l hL
cao cy phi(p) k hiu l hR
kho st cy cn bng, ta cn lu thm thng tin v ch s cn bng ti mi nt. Lc
, cy cn bng c th c khai bo nh sau:
typedef struct tagAVLNode

char balFactor; //Ch s cn bng


Data key;
struct tagAVLNode*

pLeft;

struct tagAVLNode*

pRight;

}AVLNode;
typedef AVLNode

*AVLTree;

tin cho vic trnh by, ta nh ngha mt s hng s sau:


#define LH -1 //Cy con tri cao hn
#define EH -0 //Hai cy con bng nhau
#define RH 1

//Cy con phi cao hn

3.4.2.5. nh gi cy AVL
Cy cn bng l CTDL n nh hn hn CCBHT v ch khi thm hy lm cy thay i
chiu cao cc trng hp mt cn bng mi c kh nng xy ra.
Cy AVL vi chiu cao c khng ch s cho php thc thi cc thao tc tm thm hy
vi chi ph O (log2(n)) v bo m khng suy bin thnh O(n).
3.5. Cy tng qut
3.5.1. nh ngha
Cy tng qut l cy m cc nt trn cy c s con l bt k
V d cho cy tam phn cc k t:

-----------------------------------------------------------------------------------------------------------08/01/2011 - Cu trc d liu Trang 32

Gc

C
A

E
A

F
A

G
A

H
A

J
A

I
A

K
A

3.5.2. Biu din cy tng qut bng danh sch lin kt


Mi nt ca cy l mt bn ghi, ngoi cc trng cha d liu ca bn thn n, cn c
thm cc trng lin kt khc lu tr a ch ca cc nt con
3.5.3. Cc php duyt cy tng qut
Tng t nh cy nh phn, i vi cy tng qut cng c 3 php duyt c bn l:
- Duyt cy theo th t trc (i vi gc): Kiu duyt ny trc tin thm nt
gc, sau ln lt thm cc nt ca cc cy con
. Gc
. Cy con tri nht
. Cc cy con phi
- Duyt cy theo th t gia: Kiu duyt ny trc tin thm nt cc nt ca cy
con tri nht, sau thm nt gc ri n cc cy con phi.
. Cy con tri nht
. Gc
. Cy con phi
- Duyt cy theo th t sau:Kiu duyt ny trc tin thm cc nt ca cy con
tri nht, sau thm cc nt ca cc cy con phi, cui cng thm nt gc
. Cy con tri nht
. Cc cy con phi
. Gc
3.5.4. Cy nh phn tng ng
Nhc im ca cc cu trc cy tng qut l bc ca cc nt trn cy c th dao ng
trong mt bin ln vic biu din gp nhiu kh khn v lng ph. Hn na, vic xy dng
cc thao tc trn cy tng qut phc tp hn trn cy nh phn nhiu. V vy, thng nu khng
qu cn thit phi s dng cy tng qut, ngi ta chuyn cy tng qut thnh cy nh phn.
Ta c th bin i mt cy bt k thnh mt cy nh phn theo qui tc sau:
- Gi li nt con tri nht lm nt con tri.
- Cc nt con cn li chuyn thnh nt con phi.
- Nh vy, trong cy nh phn mi, con tri th hin quan h cha con v con phi th hin
quan h anh em trong cy tng qut ban u.
-----------------------------------------------------------------------------------------------------------08/01/2011 - Cu trc d liu Trang 33

Ta c th xem v d di y thy r hn qui trnh.

Mt v d quen thuc trong tin hc v ng dng ca duyt theo th t sau l vic xc nh tng
kch thc ca mt th mc trn a
Mt ng dng quan trng khc ca php duyt cy theo th t sau l vic tnh ton gi tr ca
biu thc da trn cy biu thc
(3 + 1) 3/(9 5 + 2) (3 (7 4) + 6) = 13
Mt v d hay v cy nh phn l cy biu thc. Cy biu thc l cy nh phn gn nhn,
biu din cu trc ca mt biu thc (s hc hoc logic). Mi php ton hai ton hng (chng
hn, +, -, *, /) c biu din bi cy nh phn, gc ca n cha k hiu php ton, cy con tri
biu din ton hng bn tri, cn cy con phi biu din ton hng bn phi. Vi cc php ton
mt hng nh ph nh hoc ly gi tr i hoc cc hm chun nh exp ( ) hoc cos ( ) th
cy con bn tri rng. Cn vi cc php ton mt ton hng nh php ly o hm ( ) hoc
hm giai tha ( )! Th cy con bn phi rng.
Hnh bn minh ha mt s cy biu thc.
Ta c nhn xt rng, nu i qua cy biu thc theo th t trc ta s c biu thc
Balan dng prefix (k hiu php ton ng trc cc ton hng). Nu i
qua cy biu thc theo th t sau, ta c biu thc Balan dng postfix (k hiu php ton ng
sau cc ton hng); cn theo th t gia ta nhn c cch vit thng thng ca biu thc (k
hiu php ton ng gia hai ton hng).
+

a+b

exp

exp(x)

/
a

n!

or
+

b
a/(b+c)

<
c

>=
b

(a<b) or (c>=d)
---o-O-o---

BI TP CHNG 3

BI TP L THUYT
-----------------------------------------------------------------------------------------------------------08/01/2011 - Cu trc d liu Trang 34

Bi 1. Hy trnh by cc vn sau y:
a. nh ngha v c im ca cy nh phn tm kim.
b. Thao tc no thc hin tt trong kiu ny.
c. Hn ch ca kiu ny l g ?
Bi 2. Xt thut gii to cy nh phn tm kim. Nu th t cc kha nhp vo l nh sau:
8

20

11

30

18

th hnh nh cy to c nh th no ?
Sau , nu hy ln lt cc nt theo th t nh sau :
15, 20
th cy s thay i nh th no trong tng bc hy, v s (nu r phng php hy khi nt
c c 2 cy con tri v phi)
Bi 3. p dng thut gii to cy nh phn tm kim cn bng to cy vi th t cc kha
nhp vo l nh sau :
5

10

th hnh nh cy to c nh th no ? Gii thch r tng tnh hung xy ra khi thm tng kha
vo cy v v hnh minh ha.
Sau , nu hy ln lt cc nt theo th t nh sau :
5, 6, 7, 10
th cy s thay i nh th no trong tng bc hy, v s v gii thch
Bi 4. Vit cc hm xc nh cc thng tin ca cy nh phn T:
a. S nt l
b. S nt c ng 1 cy con
c. S nt c ng 2 cy con
d. S nt c kha nh hn x (gi s T l CNPTK)
e. S nt c kha ln hn x (gi s T l CNPTK)
f. S nt c kha ln hn x v nh hn y (T l CNPTK)
g. Chiu cao ca cy
h. In ra tt c cc nt tng (mc) th k ca cy T
i. In ra tt c cc nt theo th t t tng 0 n tng th h-1 ca cy T (h l chiu cao ca T).
-----------------------------------------------------------------------------------------------------------08/01/2011 - Cu trc d liu Trang 35

j. Kim tra xem T c phi l cy cn bng hon ton khng.


k. lch ln nht trn cy. ( lch ca mt nt l lch gia chiu cao ca cy con tri v
cy con phi ca n. lch ln nht trn cy l lch ca nt c lch ln nht).
Bi 5. Xy dng cu trc d liu biu din cy N-phn (2<N 20).
a. Vit chng trnh con duyt cy N-phn v to sinh cy nh phn tng ng vi cc kho ca
cy N-phn.
b. Gi s kha c lu tr chim k byte, mi con tr chim 4 byte, vy dng cy nh phn thay
cy N-phn th c li g trong vic lu tr cc kho ?
Bi 6. Vit hm chuyn mt cy N-phn thnh cy nh phn.
Bi 7.Vit hm chuyn mt cy nh phn tm kim thnh xu kp c th t tng dn.
Bi 8.Gi s A l mt mng cc s thc c th t tng. Hy vit hm to mt cy nh phn
tm kim c chiu cao thp nht t cc phn t ca A.
Bi 9.Vit chng trnh con o nhnh (nhnh tri ca mt nt trn cy tr thnh nhnh phi ca
nt v ngc li ) mt cy nh phn .
Bi 10.Hy v cy AVL vi 12 nt c chiu cao cc i trong tt c cc cy AVL 12 nt.
Bi 11.Tm mt dy N kha sao cho khi ln lt dng thut ton thm vo cy AVL xen cc
kho ny vo cy s phi thc hin mi thao tc cn bng li( LL,LR, RL,RR) t nht mt ln.
Bi 12.Hy tm mt v d v mt cy AVL c chiu cao l 6 v khi hy mt nt l (ch ra c th)
vic cn bng li lan truyn ln tn gc ca cy. V ra tng bc ca qu trnh hy v cn bng
li ny.

BI TP THC HNH:
Bi 13.Ci t chng trnh m phng trc quan cc thao tc trn cy nh phn tm kim.
Bi 14.Ci t chng trnh m phng trc quan cc thao tc trn cy AVL.
Bi 15.Vit chng trnh cho php to, tra cu v sa cha t in Anh- Vit.
Bi 16.Vit chng trnh kho st tn xut xy ra vic cn bng li ca cc thao tc thm v hy
mt phn t trn cy AVL bng thc nghim. Chng trnh ny phi cho php to lp ngu
nhin cc cy AVL v xa ngu nhin cho n khi cy rng. Qua cho bit s ln xy ra cn
bng li trung bnh ca tng thao tc.
---o-O-o---

-----------------------------------------------------------------------------------------------------------08/01/2011 - Cu trc d liu Trang 36

You might also like