Professional Documents
Culture Documents
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
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
Chng 1:
CC KHI NIM C BN
ht[15] = Le
Li ;
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();
}
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();
}
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();
}
Chng 2:
DANH SCH
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)
y, infor3
z)
int
t)
*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)
y, infor3
z)
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
// 1
// 1
char
infor1[15];
float infor2;
int
infor3;
element
ht;
infor2
infor3
element
cc;
cntc;
*next1, *next2;
};
typedef element
List F1, F2;
*List;
&F2)
- 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;
}
}
y, infor3
z)
phn t ng trc
phn t ng sau
phn t u danh sch
danh sch
}
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);
}
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 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;
delete p;
if(l.pHead == NULL) l.pTail = NULL;
else l.pHead->pPrev = NULL;
}
return x;
}
Hy 1 phn t c kho k
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;
}
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;
}
}
- 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)
y, infor3
z)
&S)
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)
x, infor2
y, infor3
z)
&Rear)
// 1
// 2
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
Chng 3:
CY
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:
A
J
A
B
J
A
A
A
C
J
A
C
A
B
J
A
D
A
G
A
C
A
E
A
13
H
A
F
A
14
I
A
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
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
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
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
h < 2log2(N(h)) + 2
pLeft;
struct tagAVLNode*
pRight;
}AVLNode;
typedef AVLNode
*AVLTree;
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:
Gc
C
A
E
A
F
A
G
A
H
A
J
A
I
A
K
A
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
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---