You are on page 1of 128

Bi tp cu trc d liu v gii thutSGU2010

Trang 0

TRNG I HC SI GN KHOA CNG NGH THNG TIN


B MN KHOA HC MY TNH
-----------o0o----------

BI TP CU TRC D LIU V GII THUT


(lu hnh ni b)

Nm 2010

Bi tp cu trc d liu v gii thutSGU2010

Trang 1

Li gii thiu
Cu trc d liu v gii thut l hc phn bt buc thuc khi kin thc c s ngnh ca sinh vin cc chuyn ngnh cng ngh thng tin v cng l ni dung quan trng cc k thi tt nghip, thi hon chnh i hc cc chuyn ngnh cng ngh thng tin. Gio trnh ny trnh by cc ch bi tp v:Tng quan v cu trc d liu v gii thut, tm kim, sp xp, cu trc danh sch lin kt v cu trc cy theo ngn ng C/C++. Mi ch c thit k gm cc phn: Tm tt l thuyt, mt s dng bi tp in hnh v mt s bi tp chn lc. Phn cui ca gio trnh c hng dn gii cho mt s bi tp tiu biu, ng thi b sung mt s thi mu sinh vin t rn luyn k nng phn tch vn bi ton. Gio trnh ch trnh by vn bi tp, cn cc vn l thuyt lin quan th bn c c th tham kho chi tit cc quyn sch c ch ra phn ti liu tham kho. Quyn gio trnh ny c bin son lm ti liu tham kho khi ging cc hc phn cu trc d liu v gii thut h i hc v cao ng. Chng ti xin trn trng gii thiu vi bn c quyn gio trnh ny v hy vng rng n s gip cho vic ging dy v hc tp hc phn cu trc d liu v gii thut c thun li hn. Thnh ph H Ch Minh, ngy 06 thng 09 nm 2010 CC TC GI

Bi tp cu trc d liu v gii thutSGU2010 Chng 1

Trang 2

TNG QUAN V CU TRC D LIU V GII THUT


A.Tm tt l thuyt
1.Cu trc d liu v gii thut Xuyn sut trong gio trnh ny, chng ti mun cp n hai mt quan trng ca mt vn bi ton l cch thc t chc d liu ca bi ton v cc php x l trn cc d liu . 1.1.Cu trc d liu Cu trc d liu ca bi ton l cch thc t chc d liu sao cho phn nh chnh xc d liu ca bi ton v c th dng my tnh x l cc d liu mt cch hiu qu. Mt cu trc d liu c nh gi l tt nu n tha mn c cc yu cu nh: Phn nh ng thc t bi ton, ph hp vi cc thao tc x l trn , tit kim c ti nguyn h thng, 1.2.Gii thut (trong gio trnh ny chng ti ng nht khi nim thut ton v gii thut) Gii thut l mt bng lit k cc ch dn (hay cc qui tc) cn thc hin theo tng bc xc nh nhm gii quyt mt vn bi ton. Cc c trng ca gii thut Tnh xc nh: mi bc cc ch dn phi r rng. Tnh kt thc: Gii thut phi dng sau mt s hu hn bc. Tnh ng n: Gii thut phi cho ra kt qu ng theo yu cu ca bi ton. Tnh tng qut: Gii thut phi p dng c cho cc bi ton cng loi. 1.3.S lin h gia gii thut v cu trc d liu Gii thut v cu trc d liu c mi lin h cht ch vi nhau. Gii thut phn nh cc php x l, cn i tng x l ca gii thut l cc d liu; d liu cha ng cc thng tin cn thit thc hin gii thut. xc nh c gii thut

Bi tp cu trc d liu v gii thutSGU2010

Trang 3

ph hp cn phi bit n tc ng n nhng loi d liu no v khi chn la mt cu trc d liu cng cn phi hiu r nhng thao tc no s c tc ng ln n. 2. phc tp ca mt gii thut 2.1.Phn tch thi gian thc hin gii thut Vi mt bi ton ch c mt gii thut. Vic chn la gii thut a n kt qu nhanh l mt i hi quan trng. Vn l cn c vo nhng yu t no bit gii thut ny nhanh hn gii thut kia? R rng thi gian thc hin mt gii thut (hay chng trnh thc hin gii thut ) ph thuc vo nhiu yu t. Mt yu t cn ch u tin tin chnh l kch thc ca d liu a vo. Chng hn thi gian sp xp mt dy s chu nh hng bi s lng s ca dy s . Nu gi n l s lng ny, th thi gian thc hin T ca mt gii thut c biu din nh mt hm ca n: T(n). Cc kiu lnh v tc x l ca my tnh, ngn ng vit chng trnh v chng trnh dch ngn ng y u nh hng n thi gian thc hin chng trnh; nhng nhng yu t ny khng ng u vi mi loi my tnh. V vy khng th da vo chng khi xc lp T(n). iu cng c ngha l T(n) khng th c biu din thnh n v thi gian bng giy, bng pht c. Tuy nhin khng phi v th m khng th so snh c cc gii thut v mt tc . Nu nh thi gian thc hin ca mt gii thut l T1(n)=Cn2 v thi gian thc hin gii thut khc l T2(n)= kn (C, n, k l cc hng s no ), th khi n kh ln, thi gian thc hin gii thut t2 t hn so vi gii thut T1 , nh vy nu ni thi gian thc hin gii thut T(n) t l vi vi n2 hay t l vi n cng cho ta nim v tc thc hin gii thut khi n kh ln (vi n nh th vic xt T(n) khng c ngha). Cch nh gi thi gian thc hin gii thut c lp vi my tnh v cc yu t lin quan ti my nh vy s dn ti khi nim v cp ln ca thi gian thc hin gii thut hay cn gi l phc tp tnh ton ca gii thut. 2.2.Thi gian chy ca cc lnh Lnh gn Lnh gn c dng X = <biu thc>

Bi tp cu trc d liu v gii thutSGU2010

Trang 4

Thi gian chy ca lnh gn l thi gian thc hin biu thc. Trng hp hay gp nht l biu thc ch cha cc php ton s cp, v thi gian thc hin n l O(1). Nu biu thc cha cc li gi hm th ta phi tnh n thi gian thc hin hm, v do trong trng hp ny thi gian thc hin biu thc c th khng cn phi O(1). Lnh la chn if (<iu kin>) <lnh 1>; else <lnh 2>; Gi s thi gian nh gi iu kin l T0(n), thi gian thc hin <lnh 1> l T1(n), thi gian thc hin <lnh 2> l T2(n). Thi gian thc hin lnh la chn if-else s l thi gian ln nht trong cc thi gian T0(n) + T1(n) v T0(n) + T1(n). Trng hp hay gp l kim tra iu kin ch cn O(1). Khi nu T1(n) = O(f(n)), T2(n) = O(g(n)) v f(n) tng nhanh hn g(n) th thi gian chy ca lnh ifelse l O(f(n)); cn nu g(n) tng nhanh hn f(n) th lnh if-else cn thi gian O(g(n)). Thi gian chy ca lnh la chn switch c nh gi tng t nh lnh ifelse, ch cn lu rng, lnh if-else c hai kh nng la chn, cn lnh switch c th c nhiu hn hai kh nng la chn. Cc lnh lp for, while, do-while nh gi thi gian thc hin mt lnh lp, trc ht ta cn nh gi s ti a cc ln lp, gi s l L(n). Sau nh gi thi gian chy ca mi ln lp, ch rng thi gian thc hin thn ca mt lnh lp cc ln lp khc nhau c th khc nhau, gi s thi gian thc hin thn lnh lp ln th i (i=1,2,..., L(n)) l Ti(n). Mi ln lp, chng ta cn kim tra iu kin lp, gi s thi gian kim tra l T0(n). Nh vy thi gian chy ca lnh lp l:
L(n) i =1

(T (n ) + T (n ))
0 i

Bi tp cu trc d liu v gii thutSGU2010

Trang 5

Cng on kh nht trong nh gi thi gian chy ca mt lnh lp l nh gi s ln lp. Trong nhiu lnh lp, c bit l trong cc lnh lp for, ta c th thy ngay s ln lp ti a l bao nhiu. Nhng cng khng t cc lnh lp, t iu kin lp suy ra s ti a cc ln lp, cn phi tin hnh cc suy din khng n gin. Trng hp hay gp l: kim tra iu kin lp (thng thng l nh gi mt biu thc) ch cn thi gian O(1), thi gian thc hin cc ln lp l nh nhau v gi s ta nh gi c l O(f(n)); khi , nu nh gi c s ln lp l O(g(n)), th thi gian chy ca lnh lp l O(g(n)f(n)). 2.3. phc tp tnh ton ca gii thut Nu thi gian thc hin mt gii thut l T(n)=Cn2 (vi C l hng s) th ta ni: phc tp tnh ton ca gii thut ny c cp l n2 (hay cp ln ca thi gian thc hin gii thut l n2) v ta k hiu T(n) = O(n2) - k hiu ch O ln. Mt cch tng qut ta c th nh ngha nh sau: Mt hm f(n) c xc nh l O(g(n)) f(n)=O(g(n)) v c gi l c cp g(n) nu tn ti mt hng s C v no sao cho f(n) C.g(n) khi n no Ngha l f(n) b chn trn bi mt hng s nhn vi g(n), vi mi gi tr ca n t mt im no . Ch rng O(C(f(n))=O(f(n)) xc nh phc tp tnh ton ca mt gii thut bt k c th dn ti nhng bi ton phc tp. Tuy nhin trong thc t, i vi mt s gii thut ta cng c th phn tch c bng mt s quy tc n gin. Quy tc cng Gi s T1(n) v T2(n) l thi gian thc hin ca hai on chng trnh P1 v P2 m T1(n) = O(f(n)) v T2(n)=O(g(n)), th thi gian thc hin P1 ri P2 tip theo s l T1(n)+ T2(n) = O( max(f(n), g(n)) Chng hn on lnh for (int i=1;i<=n;i++) x=x+1; c thi gian thc hin l O(n.1) = O(n) Quy tc nhn

Bi tp cu trc d liu v gii thutSGU2010

Trang 6

Nu tng ng vi P1 v P2 l T1(n) v T2(n), T1(n) = O(f(n)) v T2(n)=O(g(n)), th thi gian thc hin P1 v P2 lng nhau l T1(n) * T2(n) = O(f(n).g(n)) Chng hn on lnh for (int i=1;i<=n;i++) for (int j=1;j<=n;j++ ) x=x+1; c thi gian thc hin l O(n.n)=O(n2). Ch rng c nhng trng hp gii thut khng phi ch thuc vo kch thc ca d liu vo m cn ph thuc vo chnh tnh trng ca d liu na. Chng hn vic sp xp mt dy s theo th t tng dn nu gp dy s a vo c ng th t th s khc vi trng hp dy s a vo cha c th t hoc c th t ngc li, lc khi phn tch thi gian thc hin gii thut ta s phi xt ti: i vi mi d liu vo c kch thc n th T(n) trong trng hp thut li nht l th no? ri T(n) trong trng hp xu nht v T(n) trung bnh ? Vic xc nh T(n) trung bnh thng kh v s phi dng ti nhng cng c ton phc tp. Trong cc trng hp m T(n) trung bnh kh xc nh ngi ta thng nh gi gii thut qua gi tr xu nht ca T(n). 2.4.S phn lp cc gii thut Thng thng cc hm th hin phc tp tnh ton ca gii thut c dng hng s, log2n, n, nlogn, n2, n3, 2n, n!, nn, Hng s:Hu ht cc ch th ca cc chng trnh u c thc hin mt ln hay mt s s ln nht nh khng ph thuc vo n Cc hm nh 2n, n!, nn c gi l hm m. Mt gii thut m thi gian thc hin ca n c cp l cc hm loi m th tc rt chm. Cc hm log2n, n, nlogn, n2, n3 c gi l cc hm loi a thc. Gii thut vi thi gian thc hin c cp hm a thc th thng l chp nhn c. Cc cp thi gian chy ca gii thut v tn gi ca chng c lit k trong bng sau: K hiu ln O(1) Tn gi hng

Bi tp cu trc d liu v gii thutSGU2010 O(logn) O(n) O(nlogn) O(n2) O(n3) O(2n) logarit tuyn tnh nlogn bnh phng lp phng M

Trang 7

B.Cc dng bi tp
Dng 1: Bi ton vi cu trc d liu l mng mt chiu V d 1.1: Cng hai s nguyn ln Cho hai s nguyn ln a v b; a c m ch s v b c n ch s. Hy vit chng trnh tnh tng a+b. Gii thut S nguyn ln y l s c th c n vi nghn ch s. lu tr cc s nguyn ln ny ta c th dng chui (mi k t ca chui l mt ch s) hoc dng mng mt chiu (mi phn t ca mng mt chiu l mt ch s). Tuy nhin trong hai phng n ny th phng n dng mng mt chiu lu tr s c gii thut tt hn. Gii thut ny c th trnh by ngn gn nh sau: Bc 1:Nhp hai s nguyn ln a,b. c th thc hin c php a+b mt cch t nhin th khi nhp a,b th a v b phi c ging hng bn phi. V d: Gi s a c m=5 ch s, b c n=4 ch s nh sau: a = 97895 b = 6478 Th vic lu tr hai s ny l nh sau: a[1] = 9, a[2]=7, a[3]=8, a[4]=9, a[5]=5 b[2] = 6, b[3]=4, b[4]=7, b[5]=8 Vic ging hng bn phi cho a v b c th tin hnh bng cch t max l s ln nht trong hai s m v n. for i=max-m+1 to max cin>>a[i]; for i=max-n+1 to max

Bi tp cu trc d liu v gii thutSGU2010

Trang 8

cin>>b[i]; Bc 2: Thc hin php hai s a,b theo cch thng thng: Ngha l cng tng cp ch s a[i], b[i] bt u t pha bn phi v lu kt qu cui cng lu vo mng c. Lu cc mng a,b bt u t ch s 1, cn mng c bt u t ch s 0 v c[0] c th bng 0 (khi php cng hai ch s cui cng khng c nh) v cng c th khc 0 (khi php cng hai ch s cui cng c nh). sonho=0; for (i=max;i >0;i--) { c[i]=(a[i]+b[i]+ sonho)%10; sonho =(a[i]+b[i]+ sonho)/10; } c[0]= sonho; Bc 3: Xut mng c kt qu ra mn hnh. Lu l ch nn xut c[0] khi c[0] khc 0. Chng trnh 1-1 Dng 2: Bi ton vi cu trc d liu l mng hai chiu V d 1.2.Ma trn phn s Cho ma trn hai chiu m dng, n ct; trong mi phn t l mt phn s (gi s t s v mu s ca cc phn s ny l cc s nguyn dng). Hy thc hin cc yu cu sau: a.Tm ma trn phn s ti gin b.Tm phn s c gi tr ln nht. Gii thut Mt cu trc d liu tt cho bi ton ny l nh ngha mt kiu d liu mi kiu bn ghi lu tr d liu l cc phn s nh sau: struct phanso { int tuso;

Bi tp cu trc d liu v gii thutSGU2010 int mauso;

Trang 9

}; -Phn s ti gin l phn s m c s chung ln nht ca t s v mu s bng 1. tm bng phn s ti gin ta ch cn ti gin tng phn s. Lu l so snh phn s 1 c ln phn s 2 hay khng ta dng iu kin: ps1.tu*ps2.mau>ps2.tu*ps1.mau Chng trnh 1-2 #include <conio.h> #include <math.h> #include <iostream.h> #include <stdio.h> #define maxm 50 #define maxn 50 struct phanso { int tu; int mau; }; void nhapmangps(phanso ps[maxm][maxn], int &m, int &n); void xuatmangps(phanso ps[maxm][maxn], int m, int n); int sosanhps(phanso ps1, phanso ps2); void bangphansotoigian(phanso ps[maxm][maxn], int m, int n); void timpslonnhat(phanso ps[maxm][maxn], int m, int n); void main() { clrscr(); phanso ps[maxm][maxn]; int m,n; nhapmangps(ps,m,n); bangphansotoigian(ps,m,n); xuatmangps(ps,m,n);

Bi tp cu trc d liu v gii thutSGU2010 timpslonnhat(ps,m,n); getch(); } void nhapmangps(phanso ps[maxm][maxn], int &m, int &n) { cout<<"Nhap m = ";cin>>m; cout<<"Nhap n = ";cin>>n; for (int i=0; i<m;i++) for (int j=0; j<n;j++) { cin>>ps[i][j].tu; cin>>ps[i][j].mau; } } void xuatmangps(phanso ps[maxm][maxn], int m, int n) { cout<<endl; for (int i=0; i<m;i++) { for (int j=0; j<n;j++) cout<<ps[i][j].tu<<"/"<<ps[i][j].mau<<";"; cout<<endl; } } int sosanhps(phanso ps1, phanso ps2) { return ps1.tu*ps2.mau>ps2.tu*ps1.mau>0; } int uscln(int a, int b) {

Trang 10

Bi tp cu trc d liu v gii thutSGU2010

Trang 11

int r=a%b; while (r!=0) { a=b; b=r; r=a%b; } return b; } void bangphansotoigian(phanso ps[maxm][maxn], int m, int n) { for (int i=0; i<m;i++) for (int j=0; j<n;j++) { int uc=uscln(ps[i][j].tu,ps[i][j].mau); ps[i][j].tu=ps[i][j].tu/uc; ps[i][j].mau=ps[i][j].mau/uc; } } void timpslonnhat(phanso ps[maxm][maxn], int m, int n) { phanso psmax; psmax.tu=ps[0][0].tu; psmax.mau=ps[0][0].mau; for (int i=0; i<m;i++) for (int j=0; j<n;j++) if (sosanhps(ps[i][j],psmax)>0) psmax=ps[i][j]; cout<<"\nPhan so lon nhat la : "<<psmax.tu<<"/"<<psmax.mau; } Dng 3: Cu trc d liu kiu bn ghi

Bi tp cu trc d liu v gii thutSGU2010

Trang 12

V d 1.2.Bi ton qun l Cho mt danh sch lu thng tin ca cc nhn vin trong mt cng ty, thng tin gm : - M nhn vin (chui, ti a l 8 k t) - H v tn (chui, ti a l 20 k t) - Phng ban (chui, ti a 10 k t) - Lng c bn (s nguyn) - Thng (s nguyn) - Thc lnh (s nguyn, trong thc lnh = lng c bn + thng ) Hy thc hin cc cng vic sau: a.Tnh tng thc lnh thng ca tt c nhn vin trong cng ty. b.In danh sch nhng nhn vin c mc lng c bn thp nht. c.m s lng nhn vin c mc thng >= 1200000. d.In danh sch cc nhn vin tng dn theo phng ban, nu phng ban trng nhau th gim dn theo m nhn vin. Chng trnh 1-3 #include<conio.h> #include<iostream.h> #include<stdlib.h> #include<stdio.h> #include<string.h> struct nhanvien { char manv[8]; char hoten[20]; char phongban[16]; float luongcb; float thuong; float thuclanh; }; int n;

Bi tp cu trc d liu v gii thutSGU2010 struct nhanvien nv[100],temp; void nhap(nhanvien nv[], int &n); void xuat(nhanvien nv[], int n); void tongthuclanh(nhanvien nv[], int n); void luongcbthapnhat(nhanvien nv[], int n); void mucthuong(nhanvien nv[], int n); void sapxep(nhanvien nv[], int n); void main() { clrscr(); nhap(nv,n); tongthuclanh(nv,n); luongcbthapnhat(nv,n); mucthuong(nv,n); sapxep(nv,n); xuat(nv,n); getch(); } void nhap(nhanvien nv[], int &n) { cin>>n; for(int i=0;i< n;i++) { cout<<"\nManv:"; fflush(stdin); gets(nv[i].manv); cout<<"Ho ten:"; fflush(stdin); gets(nv[i].hoten); cout<<"Phong Ban:"; fflush(stdin); gets(nv[i].phongban); cout<<"Luong CB:"; cin>>nv[i].luongcb;

Trang 13

Bi tp cu trc d liu v gii thutSGU2010 cout<<"Thuong:"; cin>>nv[i].thuong; nv[i].thuclanh = nv[i].luongcb + nv[i].thuong; } }

Trang 14

void xuat(nhanvien nv[], int n) { for(int i=0;i<n;i++) cout<<nv[i].manv<<nv[i].hoten<<nv[i].phongban<<nv[i].luongcb <<nv[i].thuong<<nv[i].thuclanh; } void tongthuclanh(nhanvien nv[], int n) { long tong=0; for(int i=0;i<n;i++) tong=tong +nv[i].thuclanh; cout<<"\nTong thuc lanh la "<<tong; } void luongcbthapnhat(nhanvien nv[], int n) { long min=nv[0].luongcb; for(int i=1;i<n;i++) if (nv[i].luongcb<min) min=nv[i].luongcb; cout<<"\nLuong co ban thap nhat la:"<<min; } void mucthuong(nhanvien nv[], int n) { int dem=0; for(int i=0;i<n;i++)

Bi tp cu trc d liu v gii thutSGU2010

Trang 15

if (nv[i].thuong>=1200000) dem++; cout<<"\nSo luong nhan vien co muc thuong >=1200000 la: "<<dem; } void sapxep(nhanvien nv[], int n) { for(int i=0;i<n-1;i++) for(int j=i+1;j<n;j++) if ( strcmp(nv[i].phongban,nv[j].phongban) > 0 || (strcmp(nv[i].phongban,nv[j].phongban)==0 && strcmp(nv[i].manv,nv[j].manv)<0)) { temp = nv[i]; nv[i] = nv[j]; nv[j] = temp; } } Dng 4: Cu trc d liu dng th V d 1-4.Dy con chung di nht. Cho hai dy s a, b. Hy tm dy con chung di nht ca hai dy ny. Dy con y khng nht thit phi l cc phn t lin nhau Chng hn cho hai dy s sau: Dy a: 1, 5, 3, 7, 8 Dy b: 6, 2, 5, 7, 1, 9, 8 Gi : Mt cu trc d liu cho bi ton ny l chuyn bi ton ny v cu trc th bng cch thnh lp mt ma trn k, trong a[i][j] =1 nu phn t th i ca dy a trng vi phn t th j trong dy b. Chng hn vi v d trn th ta c ma trn k nh sau: 0 0 0 0 1 0 0

Bi tp cu trc d liu v gii thutSGU2010 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1

Trang 16

Khi dy cn tm l dy ng vi ng i xung di nht trong ma trn k: L phn t cc v tr 2, 4, 5 ca dy a hoc l cc v tr 3, 4, 7 ca dy b. Dng 5: Ti u ha cu trc V d 1.5.Dy con c tng ln nht Cho dy n s nguyn {a} Dy con lin tip l dy m thnh phn ca n l cc thnh phn lin tip nhau trong {a}, ta gi tng ca dy con l tng tt c cc thnh phn ca n. Tm tng ln nht trong tt c cc tng ca cc dy con ca {a} Chng hn n = 7 s sau: 4 5 6 4 2 3 -7 Th kt qu tng dy con cn tm l 7. Gii thut 1: Gii thut n gin nht c th vit ngay l: xt tt c cc cp s nguyn L v U tha mn 1 L U n; i vi mi cp nh vy ta tnh tng ca dy con a[L..U] v so snh tng ny vi gi tr ln nht hin c: for (L=1;L<=n;L++) for (U=L;U<=n;U++) { sum=0; for (int I=L;I<=U;I++) sum=sum+a[I]; maxsofar=max(maxsofar,sum); } chng trnh ny tuy ngn v d hiu, tuy nhin gii thut ny c phc tp l O(n3) Gii thut 2:

Bi tp cu trc d liu v gii thutSGU2010

Trang 17

Ta c th ci tin gii thut trn c gii thut vi phc tp l O(n2) bng cch s dng h thc : Tng a[L..U]= Tng a[L..U-1]+a[U] maxsofar=0; for (L=1;L<=n;L++) { sum=0; for (U=L;U<=n;U++) { sum=sum+a[U]; maxsofar=max(maxsofar,sum); } } Gii thut 3: Tng ln nht trong dy con a[1..i] l tng ln nht trong dy con a[1..i1](gi l maxsofar) hoc tng ln nht trong tt c cc tng ca cc dy con kt thc ti i (gi l maxendinghere). Chng ta c nhn xt rng: Dy con ln nht kt thc ti i l dy con ln nht kt thc ti v tr i-1 c b sung thm phn t a[i] cui hoc l dy con rng trong trng hp tng ca dy con nhn c l s m. Ta c gii thut nh sau: maxsofar=0; maxendinghere=0; for (i=1; i<=n;i++) { maxendinghere=max(maxendinghere+a[i],0); maxsofar=max(maxsofar,maxendinghere); } Minh ha cho Gii thut 3: 1 a[i] maxendinghere 4 4 2 -5 0 3 6 6 4 -4 2 5 2 4 6 3 7 7 -7 0

Bi tp cu trc d liu v gii thutSGU2010 maxsofar 4 4 6 6 6 7

Trang 18 7

Gii thut 3 ny c phc tp l O(n). #include <iostream.h> #include <conio.h> void algorithm1(int a[], int n); void algorithm2(int a[], int n); void algorithm3(int a[], int n); int max(int a,int b); void input(int a[],int &n); void main() { int a[100],n; input(a,n); algorithm1(a,n); getch(); } void input(int a[],int &n) { clrscr(); cin>>n; for (int i=1;i<=n;i++) cin>>a[i]; } void algorithm1(int a[], int n) { int maxsofar=0; for (int L=1;L<=n;L++)

Bi tp cu trc d liu v gii thutSGU2010 for (int U=L;U<=n;U++) { int sum=0; for (int I=L;I<=U;I++) sum=sum+a[I]; maxsofar=max(maxsofar,sum); } cout<<maxsofar; } void algorithm2(int a[], int n) { int maxsofar=0; for (int L=1;L<=n;L++) { int sum=0; for (int U=L;U<=n;U++) { sum=sum+a[U]; maxsofar=max(maxsofar,sum); } } cout<<maxsofar; } void algorithm3(int a[], int n) { int maxsofar=0; int maxendinghere=0; for (int i=1; i<=n;i++) { maxendinghere=max(maxendinghere+a[i],0);

Trang 19

Bi tp cu trc d liu v gii thutSGU2010 maxsofar=max(maxsofar,maxendinghere); } cout<<maxsofar; } int max(int a,int b) { return a>b?a:b; }

Trang 20

Bi tp cu trc d liu v gii thutSGU2010

Trang 21

C.Bi tp
Vit chng trnh hon chnh cho cc bi ton sau y BT1-1.Cho dy n s nguyn a0,a1,...,an-1. a.Tm chiu di ca dy con di nht cha ton s chn. b.Tm dy con lin tip tng di nht. c.Tm gi tr ln th k ca dy. d.Tm dy con tng cha nhiu s nguyn t nht. e.Tm tn s xut hin ca cc s. Cho bit phc tp tnh ton ca cc thut ton trn. BT1-2.Cho dy n s nguyn a0,a1,...,an-1. Hy chuyn k phn t u tin ca dy v cui dy. BT1-3.Cho hai s nguyn ln a v b; trong a c m ch s v s b c n ch s. Vit chng trnh thc hin cc php cng, tr, nhn hai s nguyn ln. BT1-4.Xy dng cu trc d liu lu tr a thc c bc t nhin n (0 n 100) trn trng s nguyn (ai , x Z).

f n ( x) = ai xi
i =0

Vi cu trc d liu c xy dng, hy vit chng trnh thc hin cc cng vic sau: a.Tnh gi tr ca a thc ti gi tr x0 no . b.Tnh tng, hiu, tch, thng hai a thc p v q. BT1-5.Cho mng mt chiu gm n ta im (gi s honh v tung ca cc im l cc s nguyn). a.Tm mt im trong mng xa gc ta nht. b.Tm ta hai im gn nhau nht. c.Xc nh ta ca hnh ch nht nh nht (ta gc trn bn tri v ta gc di bn phi ca hnh ch nht) bao ht c n im trn. V d n = 5 v ta 5 im l: (0,0); (0,3); (3,3); (4,1); (4,4). Th kt qu cu a l im (4,4), kt qu cu b l (3,3) v (4,4), kt qu cu c l (0,4); 4(,0).

Bi tp cu trc d liu v gii thutSGU2010

Trang 22

BT1-6.Cho ma trn hai chiu m dng n ct; trong mi phn t l mt phn s (gi s cc t s v mu s ca cc phn s l cc s nguyn). a.Tnh tng gi tr ca cc phn s trong mng (kt qu l phn s dng ti gin). b.Tnh tch gi tr ca cc phn s trong mng (kt qu l phn s dng ti gin). c.Sp xp cc phn s theo chiu tng dn t tri qua phi (theo dng) v t trn xung di (theo ct). BT1-7.Cho ma trn hai chiu m dng n ct (m,n>=3); cc phn t l cc s nguyn dng. a.Hy chuyn cc s ca ma trn v s chnh phng nh nht ln hn hoc bng n. b.Hy chuyn cc s ca ma trn v s nguyn t gn n nht c.Tm mt mt n 3 dng 3 ct cha nhiu s nguyn t nht (mt n di c cc cnh song song vi cc cnh ca ma trn). BT1-8.Cho mt tp tin vn bn c tn l BANGSO.INP c cu trc nh sau: -Dng u tin ghi hai s m v n. -Trong m dng tip theo mi dng ghi n s nguyn; cc s cch nhau t nht mt khong cch. a.Xoay vng cc ct qua phi mt v tr (ct 0 s qua ct 1, ct 1 qua ct 2,... ct cui cng n-1 s v v tr ca ct 0). b.Xoay vng cc dng xung di mt v tr (dng 0 s qua dng 1, dng 1 qua dng 2,... dng cui cng n-1 s v v tr ca dng 0). c.Xoay vng cc dng xung di k v tr (v d khi k =2 th ngha l dng 0 chuyn n dng 2, dng 1 chuyn n dng 3, dng n-1 chuyn n dng 1). Kt qu ca cc cu a,b,c ny c ghi vo tp tin BANGSO.OUT BT1-9.Khai bo kiu cu trc d liu mng m mi phn t cha thng tin v mt quyn sch bao gm cc trng: M s sch, tn sch, tc gi, nm xut bn. a.m s sch xut bn nm X. b.Sp xp danh sch theo m s sch tng. BT1-10.Trong mt phng OXY cho a gic li A1,A2,,An

Bi tp cu trc d liu v gii thutSGU2010

Trang 23

a.Tnh chu vi ca a gic. b.Tnh din tch ca a gic. BT1-11.Xt tp tt c phn s ti gin (s hu t) gia 0 v 1 vi mu s nh hn hoc bng N. V d, vi N = 5, ta c tp sau: 0/1 1/5 1/4 1/3 2/5 1/2 3/5 2/3 3/4 4/5 1/1 Cho s nguyn N (1 <= N <= 500), vit chng trnh in ra s lng cc phn s v in ra mt phn cc phn s chng t bn lm ng. BT1-12.Tm phc tp ca cc thut ton sau: a.Tm gi tr ln nht ca mt dy s. b.Tm c s chung ln nht ca 2 s nguyn dng a,b. c.Kim tra xem n c phi l s nguyn t hay khng ?

Bi tp cu trc d liu v gii thutSGU2010 Chng 2

Trang 24

TM KIM V SP XP
A.Tm tt l thuyt
1.Phng php tm kim 1.1.Bi ton tm kim Cho dy n s nguyn a0,a2,...,an-1 v mt s nguyn x. Hy tm xem x c thuc vo dy s trn hay khng ? Nu tm c v tr th i th xut kt qu l i, ngc li nu khng tm thy th xut kt qu l 1 (ch dy bt u t ch s 0). Sau y l hai gii thut tm kim thng c s dng nht. 1.2.Tm kim tuyn tnh Bt u t phn t th nht a[0], ta ln lt so snh x vi cc gi tr a[i]. Nu c a[i] bng x th i chnh l kt qu cn tm v kt thc gii thut. Nu trong dy khng c s a[i] no bng x th xut kt qu l 1 v cng kt thc gii thut. int LinearSearch ( int a[], int n, int x ) { int i = 0; while ( i<n && a[i]!=x) i++; if( i==n) return -1; // tm ht nhng khng c x return i; // tm thy a[i] l phn t c kha x } Hiu qu ca gii thut c nng cao bng cch t thm phn t cm canh (sentinel) cui mng (a[n]=x) bo m rng trong dy a[i] lc ny lun c phn t bng x v vng lp while lun kt thc. Do khng cn kim tra iu kin (i<n) na. int LinearSearch ( int a[], int n, int x ) { int i = 0; // mng gm n phn t t a[0]...a[n-1] a[n] = x; // thm phn t th n+1

Bi tp cu trc d liu v gii thutSGU2010 while (a[i]!=x) i++; if( i==n) return -1; // tm ht nhng khng c x return i; // tm thy x ti v tr i } Gii thut tm kim tuyn tnh c phc tp tnh ton l O(n).

Trang 25

1.3.Tm kim nh phn (vi phng php tm kim nh phn th dy n s a0,a1,a2,..,an-1 phi c th t - gi s l th t khng gim). Gi s dy tm kim hin hnh bao gm cc phn t aleft,,arght. Gi midle=(left+right)/2 Nhn xt rng nu x > a[i] th x ch c th xut hin bn phi a[i] - ngha l trong on [amidle+1, aright] ca dy, ngc li nu x < a[i] th x ch c th xut hin bn tri a[i] - trong on [aleft, amidle-1] ca dy, nh vy gii thut s thu gn phm vi tm kim mt cch ng k. Mi ln so snh loi c mt na thng tin khng c ch. V d; Cho dy s 1 3 4 5 6 7 8 9 10 12 Cn tm phn t x=3 Bc 1: left=0, right=9, mid=4, a[mid]= 6 Do x < a[mid] nn right=3. Do left<=right tip tc qua bc 2. Bc 2: left=0, right=3, mid=1, a[mid]= 3 Do x = a[mid] nn v tr cn tm l mid =1. Gi s cn tm phn t x=11 Bc 1: left=0, right=9, mid=4, a[mid]= 6 Do x > a[mid] nn left=5. Do left<=right tip tc qua bc 2. Bc 2: left=5, right=9, mid=7, a[mid]= 9 Do x > a[mid] nn left=8.

Bi tp cu trc d liu v gii thutSGU2010 Do left<=right tip tc qua bc 3. Bc 3: left=8, right=9, mid=8, a[mid]= 10 Do x > a[mid] nn left=9. Do left<=right tip tc qua bc 4. Bc 4: left=9, right=9, mid=9, a[mid]= 12 Do x < a[mid] nn left=10. Do left> right vng lp kt thc v kt qu tr v l -1 Ci t theo kiu quy int BinarySearch_Recursive(int a[],int n,int x,int left,int right) { if (left>right) return -1; int mid=(left+right)/2; if (x==a[mid]) return mid; if (x<a[mid]) return BinarySearch_Recursive(a,n,x,left,mid-1); return BinarySearch_Recursive(a,n,x,mid+1,right); } Ci t theo kiu khng quy int BinarySearch(int a[],int n,int x) { int left=0,right=n-1,mid; do { mid=(left+right)/2; if (x==a[mid]) return mid; else if (x<a[mid]) right=mid -1; else left=mid+1;

Trang 26

Bi tp cu trc d liu v gii thutSGU2010 } while (left<=right); return -1; } Gii thut tm kim nh phn c phc tp tnh ton l O(log2n)

Trang 27

2.2.Phng php sp xp 2.1.Bi ton sp xp Cho mt dy n s, hy sp xp dy s theo th t tng dn (hoc gim dn). V d dy ban u : S1 = {5 6 1 9 8 6} Dy sau khi bin i: S2 = {1 5 6 6 8 9} Khi nim nghch th Xt mt mng n s a0, a1,.., an-1. Nu c i < j v ai > aj, th ta gi l mt nghch th. Mng cha sp xp s c nghch th, v ngc li mng c th t s khng cha nghch th. sp xp mt mng, ta c th tm cch lm gim s cc nghch th trong mng ny bng cch hon v cc phn t ai,aj nu c i < j v ai > aj theo mt quy lut no no . Hai thao tc so snh v gn l nhng thao tc c bn ca hu ht cc gii thut sp xp, cc kt qu ca cc php so snh cho php gii thut quyt nh nhng tnh hung cn phi thay i v tr trong dy. Sau y l mt s phng php sp xp thng dng nht. 2.2.Phng php i ch trc tip Nh cp trn, sp xp mt dy s, ta c th xt cc nghch th c trong dy v lm trit tiu dn chng i. tng chnh ca gii thut i ch trc tip l xut pht t u dy, tm tt c nghch th cha phn t ny, trit tiu chng bng cch i ch phn t ny vi phn t tng ng trong cp nghch th. Lp li qu trnh trn vi cc phn t tip theo trong dy. V d: Cho dy s 5 6 1 9 8 6 Th kt qu tng bc nh sau: dng 0 i 0 j 2 a[0] 5 a[1] 6 a[2] 1 a[3] 9 a[4] 8 a[5] 6

Bi tp cu trc d liu v gii thutSGU2010 1 2 3 4 5 1 3 3 4 2 4 5 5 1 1 1 1 1 6 5 5 5 5 5 6 6 6 6 9 9 8 6 6 8 8 9 9 8 6 6 6 8 9

Trang 28

void interchangesort(int a[], int n) { for (int i=0; i<n-1;i++) for (int j=i+1;j<n ;j++) if (a[i]>a[j]) swap(a[i],a[j]); } phc tp tnh ton ca gii thut l: O(n2) 2.3.Phng php chn trc tip Nhn xt ta thy, vi mng c th t (khng gim), phn t ai l min (ai,ai+1,..,an-1). tng ca gii thut chn trc tip m phng mt trong nhng cch sp xp t nhin nht trong thc t: Gi nh rng, tt c d liu nhp (input data) c cng kiu, tp d liu nhp l hu hn. cc d liu kt qu (output data) l cc s nguyn theo th t khng gim; chn phn t nh nht trong n phn t khi to, a phn t ny v v tr ng l u dy hin hnh; sau khng quan tm n n na, xem dy hin hnh mi ch cn n-1 phn t ca dy ban u, bt u t v tr th hai; lp li qu trnh trn cho dy hin hnh... cho n khi dy hin hnh ch cn mt phn t. V d : Cho dy s 5 6 1 9 8 6 Nu dy cn c sp theo th t tng dn, dng 0 1 2 3 i 0 1 2 3 j 2 2 2 5 a[0] 5 1 1 1 a[1] 6 6 5 5 a[2] 1 5 6 6 a[3] 9 9 9 9 a[4] 8 8 8 8 a[5] 6 6 6 6

Bi tp cu trc d liu v gii thutSGU2010 4 5 4 4 1 1 5 5 6 6 6 6 8 8 9 9

Trang 29

void selectionsort(int a[],int n) { for(int i = 0;i < n -1; i++) { int min = i; for ( int j = i+1; j < n; j++) if (a[j] < a[min]) min = j; swap( a[min], a[i] ); } } phc tp tnh ton ca gii thut l: O(n2) 2.4.Phng php ni bt (Bubble Sort) Xut pht t cui dy (hoc u dy), i ch bt k hai phn t k cn no ngc th t a phn t nh nht (hoc ln nht) trong cc cp phn t v v tr ng l u (cui) dy hin hnh, k tip khng xt n n na bc tip theo, do vy ln x l th i s c v tr u dy l i. Lp li qu trnh trn cho n khi khng cn cp phn t no xt. V d: Cho dy s 5 6 1 9 8 6 Nu dy cn c sp theo th t tng dn, dng 0 1 2 3 4 5 j-1 4 3 1 0 4 j 5 4 2 1 5 a[0] 5 5 5 5 1 1 a[1] 6 6 6 1 5 5 a[2] 1 1 1 6 6 6 a[3] 9 9 6 6 6 6 a[4] 8 6 9 9 9 8 a[5] 6 8 8 8 8 9

Bi tp cu trc d liu v gii thutSGU2010 void bubblesort(int a[],int n) { for (int i=1;i<n;i++) for (int j=n-1;j>=i;j--) if (a[j]<a[j-1]) swap(a[j],a[j-1]); } phc tp tnh ton ca gii thut l: O(n2)

Trang 30

2.5.Sp xp chn trc tip Gii s c mt dy a0, a2,.., an-1 trong i-1 phn t u tin c th t. tng chnh: Dy u tin ch c mt th t a0 l dy c sp. Ta tng bc m rng dy c sp bng cch ln lt thm phn t ai (i=1..n-1) vo. Khi chn ai vo dy c sp th ta tin hnh cc cng on sau: Th nht l t x=ai lu gi tr cn chn. Th hai tm v tr pos thch hp trong on a0 n ai-1 chn ai vo. Th ba l chn x vo v tr pos. V d : Cho dy s 5 6 1 9 8 6 Nu dy cn c sp theo th t tng dn, dng 0 1 2 3 4 5 pos+1 1 0 3 3 3 i 1 2 3 4 5 a[0] 5 5 1 1 1 1 a[1] 6 6 5 5 5 5 a[2] 1 1 6 6 6 6 a[3] 9 9 9 9 8 6 a[4] 8 8 8 8 9 8 a[5] 6 6 6 6 6 9

void insertionsort(int a[], int n) { int pos,x; for(int i=1; i<n; i++) {

Bi tp cu trc d liu v gii thutSGU2010 x=a[i]; pos=i-1; while(pos>=0 && a[pos]>x) a[pos+1] = a[pos--]; a[pos+1]=x; } } phc tp tnh ton ca gii thut l: O(n2)

Trang 31

2.6.Sp xp nhanh (Quick sort) Quick Sort c thc hin bng cch phn hoch dy cho thnh hai phn sau sp cc phn ny ring bit nhau nh sau: u tin chn phn t ty x=a[(l+r)/2] lm mc - l phn t s ri vo v tr t cui cng ca n, k tip qut t u tri ca mng cho n khi gp mt phn t ln hn x v qut t u phi ca mng cho n khi gp mt phn t b hn x, hai phn t dng vic qut d nhin l khng ng ch trong mng kt qu cui cng nn phi hon v chng. Sau khi thc hin bc ny th bo m rng tt c cc phn t bn tri con tr tri nh hn x v cc phn t bn phi con tr phi ln hn x. y x l phn t phn hoch; i, j ln lt l con tr qut t pha tri v pha phi. Sau bc ny ta chia dy thnh hai dy con; ta li tip tc phn hoch cho mi dy con ny. V d : Cho dy s 5 6 1 9 8 6 Nu dy cn c sp theo th t tng dn, dng 0 1 2 3 4 5 l 0 0 1 1 2 3 r 5 1 5 4 4 4 x 1 1 9 5 6 6 a[0] 5 1 1 1 1 1 a[1] 6 6 6 6 5 5 a[2] 1 5 5 5 6 6 a[3] 9 9 9 6 6 6 a[4] 8 8 8 8 8 8 a[5] 6 6 6 9 9 9

Bi tp cu trc d liu v gii thutSGU2010 6 7 4 5 8 1 1 5 5 6 6 6 6

Trang 32 8 8 9 9

void quicksort(int a[],int l,int r) { int x=a[(l+r)/2]; int i=l; int j=r; do { while (a[i]<x) i++; while (a[j]>x) j--; if (i<=j) swap(a[i++],a[j--]); } while (i<j); if (l<j) quicksort(a,l,j); if (i<r) quicksort(a,i,r); } phc tp tnh ton ca gii thut l: O(nlogn) 2.7.Sp xp cy (Heap sort) tm phn t nh nht bc i, phng php sp xp chn trc tip khng tn dng c cc thng tin c c do cc php so snh bc i-1. Phng php Heap Sort khc phc c nhc im ny. nh ngha heap: Gi s xt trng hp sp xp tng dn, khi Heap c nh ngha l mt dy cc phn t al,..,ar tho cc quan h sau vi mi i [l,r] ai a2i ai a2i+1 (ai,a2i), (ai,a2i+1) l cc cp phn t lin i Tnh cht ca heap: Tnh cht 1: Nu al,.,ar l mt Heap th khi ct b mt s phn t hai u ca Heap th dy con cn li vn l mt Heap .

Bi tp cu trc d liu v gii thutSGU2010

Trang 33

Tnh cht 2: Nu cc phn t a1,..,an l mt Heap th phn t a1 (u heap) lun l phn t ln nht trong Heap. Tnh cht 3: Mi dy al,al+1,,ar vi 2l > r l mt Heap Gii thut Gii thut heap sort gm hai giai on sau: Giai on 1: Hiu chnh dy s ban u thnh Heap Giai on 2: Sp xp dy s da trn Heap Bc 1:a phn t ln nht v v tr ng cui dy r = n; Hon v (a1,ar) Bc 2: Loi b phn t ln nht ra khi Heap r=r-1; Hiu chnh phn cn li ca dy t al n ar thnh mt Heap. Bc 3:Nu r >1 ( heap cn phn t) : lp li bc 2 Ngc li: dng Da vo tnh cht 3, ta c th thc hin giai on 1 bng cch bt u t heap mc nhin an/2+1, an/2+2,,an, ln lt thm vo cc phn t an/2, an/2-1,,a1. ta s nhn c Heap theo mong mun. Nh vy gii on 1 tng ng vi n/2 ln thc hin bc 2 ca giai on 2. Ci t ci t Heap sort cn xy dng mt s th tc ph tr: 1.Th tc hiu chnh mt dy al,ar thnh heap Gi s c al,al+1,ar, trong on al+1,ar, l mt heap. ta cn xy dng al,al+1,,ar thnh mt heap. lm iu ny ta ln lt xt quan h ca mt phn t ai no vi cc phn t lin i ca n trong dy l a2i v a2i+1, nu n vi phm quan h ca heap th i ch ai vi phn t lin i thich hp ca n vic i ny c th gy phn ng dy chuyn. 2.Hiu chnh ao,..,an-1 thnh heap. Cho mt dy bt k al,,ar , theo tnh cht 3 ta c dy an/2+1, an/2+2,,an l mt heap. Ghp thm phn t an/2 vo bn tri ca heap hin hnh v hiu chnh li dy an/2,an/2+1,..,ar thnh heap. STT l j a[0] a[1] a[2] a[3] a[4] a[5]

Bi tp cu trc d liu v gii thutSGU2010 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 void { 2 1 0 1 2 0 0 1 0 0 1 0 0 1 0 0 0 4 3 1 2 5 5 1 2 4 1 3 3 1 2 2 1 1 5 5 5 9 9 9 5 8 8 1 6 6 1 6 6 1 5 1 6 6 9 5 8 8 8 5 6 6 1 6 6 1 5 5 1 5 1 8 8 8 5 6 6 6 5 5 5 5 5 5 1 6 6 6 9 9 6 6 6 6 6 6 6 6 6 1 6 6 6 6 6 6 8 1 1 1 1 1 1 1 1 8 8 8 8 8 8 8 8 8

Trang 34 6 6 6 6 6 5 9 9 9 9 9 9 9 9 9 9 9 9

insertheap(int a[],int l,int r) int j; j=l*2; while (j<=r) { if (j<r) if (a[j] <a[j+1]) if (a[j] <=a[l]) swap(a[l],a[j]); output(a,n); l=j; j=l*2; }

j++; return;

Bi tp cu trc d liu v gii thutSGU2010 } void heapsort(int a[],int n) { int l=n/2; int r=n; while (l>0) insertheap(a,l--,r); while (r>0) { swap(a[1],a[r]); output(a,n); r--; insertheap(a,1,r); } } phc tp tnh ton ca gii thut l: O(nlog2n)

Trang 35

2.8.Sp xp trn trc tip (Merge sort) Bc 1: Chun b k=1;// k l chiu di ca dy con trong bc hin hnh Bc 2:Tch dy a0,a1,an-1 thnh hai dy b,c theo nguyn tc lun phin tng nhm k phn t. Bc 3:Trn tng cp dy con gm k phn t ca hai dy b,c vo dy a. Bc 4: k=k*2; Nu k<n th tr li bc 2. Ngc li: Dng V d : Cho dy s 8 5 1 3 6 9 Nu dy cn c sp theo th t tng dn, k=1; 12 4 7 10

Bi tp cu trc d liu v gii thutSGU2010 Bc tch a thnh b,c Dy b: 8 1 6 Dy c: 5 3 9 Trn : 5 8 1 k=2; Bc tch a thnh b,c Dy b: 5 8 6 Dy c: 1 3 4 Trn : 1 3 5 k=4; Bc tch a thnh b,c Dy b: 1 3 5 Dy c: 4 6 9 Trn : 1 3 4 k=8; Bc tch a thnh b,c Dy b: 1 3 4 Dy c: 7 10 Trn : 1 3 4 void mergesort(int a[],int n) { int up,j,k,q,t,r,s,d,p; for (int i=n;i>0;i--) a[i]=a[i-1]; up=1; p=1; do { d=1; int m=n; if (up)

Trang 36

12 4 3

7 10 6

12

10

9 12 8

7 4

10 6 9 12 7 10

8 12 5

7 6

10 8 9 12 7 10

5 5

6 6

8 7

9 8

12 9 10 12

Bi tp cu trc d liu v gii thutSGU2010 { i=1;j=n;k=n+1;q=2*n; } else { i=n+1;j=2*n;k=1;q=n; } do {

Trang 37

if (m>=p) s=p; else s=m; m=m-s; if (m>=p) r=p; else r=m; m=m-r; while ((s!=0) && (r!=0)) { if (a[i]<a[j]) { a[k]=a[i];i=i+1;s=s-1; } else { a[k]=a[j];j=j-1;r=r-1; } k=k+d; } while (s!=0) { a[k]=a[i];k=k+d;i=i+1;s=s-1; } while (r!=0) {

Bi tp cu trc d liu v gii thutSGU2010

Trang 38

a[k]=a[j];k=k+d;j=j-1;r=r-1; } d=-d;t=k;k=q;q=t; } while (m!=0); up=!up; p=p*2; } while (p<n); if (!up) for (i=1;i<=n;i++) a[i]=a[i+n]; for (i=0;i<n;i++) a[i]=a[i+1]; } phc tp tnh ton ca gii thut l: O(nlog2n)

B.Cc dng bi tp
Dng 1: ng dng tm kim V d 2-1.Cho dy n s nguyn ai. a.Vit hm tm xem x c thuc dy ai hay khng ? Nu c tr v 1, nu khng c tr v 0. b.Vit hm tm gi tr ln nh ca dy. c.Tm cc gi tr xut hin nhiu ln nht Dng 2: ng dng sp xp V d 2-2.Cho dy n s nguyn ai. a.Vit hm tm gi tr ln th k ca dy. b.Hy cho bit k gi tr khc nhau ln nht ca dy.

C.Bi tp
Vit chng trnh hon chnh cho cc bi ton sau y BT2-1.a.Ci t hon chnh cc gii thut sau: Tm kim tuyn tnh, tm kim nh phn. b.Hy chng minh phc tp ca cc gii thut trn. BT2-2.a.Cho dy n s nguyn sau:

Bi tp cu trc d liu v gii thutSGU2010

Trang 39

8 5 1 3 6 9 12 4 7 10 Hy m phng cc bc sp xp tng dn dy s trn bng cc gii thut i ch trc tip, chn trc tip, chn trc tip v ni bt. b.Ci t hon chnh cc gii thut: Sp xp i ch trc tip, sp xp chn trc tip, sp xp chn trc tip, sp xp ni bt. c.Hy chng minh phc tp cho cc gii thut trn. BT2-3.Cho dy gm n s nguyn sau: 8 5 1 3 6 9 12 4 7 10 Hy m phng cc bc sp xp tng dn dy s trn bng cc gii thut sp xp nhanh, sp xp trn trc tip v sp xp cy. b.Ci t hon chnh cc gii thut: Sp xp nhanh (quick sort), sp xp trn trc tip (merge sort), sp xp cy (heap sort). c.Hy chng minh phc tp cho cc gii thut trn. BT2-4.Cho dy n s nguyn a0,a1,,an-1 a.Hy cho bit v tr ca k phn t c gi tr ln nht ca dy. b.Sp xp cc phn t tng dn theo tng cc ch s ca tng phn t. c.Hy xa tt c cc s nguyn t c trong dy. BT2-5.Cho ma trn hai chiu m dng n ct; cc phn t l cc s nguyn dng. a.Tm s nguyn t ln nht ca mng b.Tm nhng dng ca mng c cha gi tr nguyn t c.Tm nhng dng ca mng ch cha cc s nguyn t. BT2-7.Cho ma trn hai chiu m dng n ct; cc phn t l cc s nguyn dng. a.Tm dng c tng ln nht b.Sp xp cc dng sao cho dng c tng cc phn t ln hn s nm pha trn c.Sp xp sao cho cc dng c nhiu s nguyn t hn s nm pha trn. BT2-8.Cho mng mt chiu gm n phn t l cc s nguyn khng m. Hy sp xp cc s chn trong mng theo th t tng, sp xp cc s l theo th t gim dn, cc s 0 gi nguyn v tr. BT2-9.Cho mng mt chiu gm n phn t l cc s nguyn dng. Hy sp xp sao cho cc phn t chn u, cc phn t l v cui. Yu cu phc tp l O(n).

Bi tp cu trc d liu v gii thutSGU2010

Trang 40

BT1-10.Vi mi han v A(a1,a2,a3,aN) ca N s t nhin u tin, ta k hiu b=(b1,b2,,bN) l mt mng m bi bng s cc phn t ng trc s i v ln hn i (1<= i <=n). Mng B c gi l mng nghch th ca mng A. V d : Nu A l mt han v ca 9 s t nhin u tin 5 9 1 8 2 6 4 7 3 Th mng nghch th s l: 236402210 a.Vit hm tm nghch th ca mt hon v b.Vit hm tm han v ca mt nghch th(nu c) BT2-10.Cho hai file cha cc s nguyn c sp tng dn, hy trn hai file ny c mt file cng c sp tng dn. BT2-11.Cho file vn bn cha n dng; mi dng cha mt cu bao gm cc ch ci thng t a n z v k t khong trng (cu to thnh cc t, u v cui cu khng c k t khong trng, gia cc t cch nhau ng mt khong trng). a.Hy sp xp cc chui theo s lng cc t trong chui (chui t t hn s nm pha trn). b.Hy sp xp cc chui theo s lng cc nguyn m c trong chui (chui t nguyn m hn s nm pha trn). c.Hy sp xp cc chui theo s lng tn s ca cc k t trong chui (chui c nhiu k t khc nhau hn s nm pha trn). BT2-12.Hy cho bit thi gian thi hnh ca mi gii thut sp xp hc trn cng mt b d liu cha khong 30000 s nguyn ngu nhin v trn cng mt my tnh ca bn (d liu vo v ra c lu trn file vn bn).

Bi tp cu trc d liu v gii thutSGU2010 Chng 3

Trang 41

DANH SCH LIN KT


A.Tm tt l thuyt
Trong phn lp trnh C, bn c c gii thiu cc kiu d liu c s nh: kiu s, kiu k t hoc cc kiu d liu c cu trc n gin nh: kiu mu tin, kiu mng. Cc i tng c biu din bi cc kiu d liu ny c kch thc khng i trong sut qu trnh sng ca n gi l cc kiu d liu tnh. Tuy nhin mt i tng trong qu trnh sng ca n c th thay i ln; khi nu dng cc kiu d liu tnh biu din th vic gii quyt vn tr nn phc tp, khng c t nhin v khng hiu qu. Trong chng 3 ny, chng ti gii thiu mt cch thc t chc d liu linh ng hn nhm khc phc c cc khuyt im trn l cu trc d liu ng m dng n gin v quan trng nht l danh sch lin kt.

1.Danh sch lin kt (Link List)


1.1.nh ngha Cho T l mt kiu c nh ngha trc, kiu danh sch Tx gm cc phn t thuc kiu T c nh ngha l: Tx = <Vx, Ox> ,trong : Vx = {tp hp c th t cc phn t kiu T c mc ni vi nhau theo trnh t tuyn tnh}; Ox = {to danh sch; Tm mt phn t trong danh sch; chn mt phn t vo danh sch; hu mt phn t khi danh sch ; lit k cc phn t ca danh sch, sp xp danh sch,...} 1.2.Cc hnh thc t chc danh sch C nhiu kiu t chc lin kt gia cc phn t trong danh sch nh : -Danh sch lin kt n -Danh sch lin kt kp -Danh sch lin kt vng -Danh sch tng qut Hnh thc lin kt ny cho php cc thao tc thm, hu phn t trn danh sch c thc hin d dng hn, phn nh c bn cht linh ng ca danh sch.

2.Danh sch lin kt n

Bi tp cu trc d liu v gii thutSGU2010

Trang 42

2.1.T chc danh sch n theo cch cp pht lin kt Cu trc d liu ca mt phn t trong danh sch n: Mi phn t ca danh sch n l mt cu trc cha hai thng tin : -Thnh phn d liu: lu tr cc thng tin v bn thn phn t . -Thnh phn mi lin kt: lu tr a ch ca phn t k tip trong danh sch, hoc lu tr gi tr NULL nu l phn t cui danh sch. Ta c nh ngha tng qut struct Node { Data Info;//data l kiu d liu nh ngha trc Node* Next;//con tr ch n cu trc Node }; Mt phn t trong danh sch n l mt bin ng s c yu cu cp pht khi cn. V danh sch n chnh l s lin kt cc bin ng ny vi nhau do vy t c s linh ng khi thay i s lng cc phn t . Nu bit c a ch ca phn t u tin trong danh sch n th c th da vo thng tin next ca n truy xut n phn t th hai trong xu, v li da vo thng tin next ca phn t th 2 truy xut n phn t th 3,...Ngha l qun l mt xu n ch cn bit a ch phn t u xu. Thng mt con tr head s c dng lu tr a ch phn t u xu, ta gi head l u xu. Ta c khai bo: Node *head; Tuy v nguyn tc ch cn qun l xu thng qua u xu head, nhng thc t c nhiu trng hp cn lm vic vi phn t cui xu, khi mi ln mun xc nh phn t cui xu li phi duyt t u xu. tin li, c th s dng thm mt con tr tail gi a ch phn t cui xu. Khai bo tail nh sau : Node *tail; 2.2. Cc thao tc c bn trn danh sch n Gi s c cc nh ngha: struct node { int info;

Bi tp cu trc d liu v gii thutSGU2010 node *next; }; struct list { node list }; head,tail; *head,*tail;

Trang 43

V xy dng th tc tont (getnode(x)) to ra mt phn t cho danh sch vi thng tin cha trong x: node* taonut (int x) { p=new node; if (p==NULL) exit(1); p->info=x; p->next=NULL; return p; } 2.2.1.Chn mt phn t vo danh sch: C 3 loi thao tc chn mt phn t x c tr bi con tr p vo danh sch: Chn vo u danh sch Gii thut : nu danh sch rng th l.head = p; l.tail = p; ngc li p->next = l.head; l.head = p; void chennutvaodau(List &l,Node *p)

Bi tp cu trc d liu v gii thutSGU2010 { if (l.head==NULL) { l.head=p; l.tail=p; } else { p->next=l.head; l.head=p; }

Trang 44

} Nh vy to mt danh sch bng cch chn u ta c th vit hm nh sau: void danhsachchendau(List &l) { int x,n; cout<<"Nhap vao so n = ";cin>>n; for (int i=1;i<=n;i++) { cin>>x; chennutvaodau(l,taonut(x)); } } Chn vo cui danh sch Gii thut : Nu danh sch rng th l.head = new_elelment; l.tail = head; ngc li l.tail ->next = new_elelment; l.tail = new_elelment ; Ci t

Bi tp cu trc d liu v gii thutSGU2010 void { chennutvaocuoi(List &l,Node *p) if (l.head==NULL) { l.head=p; l.tail=p; } else { l.tail->next=p; l.tail=p; } }

Trang 45

Nh vy to mt danh sch bng cch chn cui ta c th vit hm nh sau: void danhsachchencuoi(List &l) { int x,n; cout<<"Danh sach co bao nhieu phan tu : ";cin>>n; for (int i=1;i<=n;i++) { cin>>x; chennutvaocuoi(l,taonut(x)); } } Chn vo danh sch sau mt phn t q Gii thut : Nu ( q != NULL) th new_ele -> next = q->next; q->next = new_ele ;

Bi tp cu trc d liu v gii thutSGU2010 void chensaunutq(List &l,Node *q,int x) { Node *p=taonut(x); if (p==NULL) exit(1); if (q!=NULL) { p->next=q->next; q->next=p; if (q==l.tail) l.tail=p; } else chennutvaodau(l,p); }

Trang 46

3.2.2.2. Tm mt phn t trong danh sch n Gii thut : Xu n i hi truy xut tun t, do ch c th p dng gii thut tm tuyn tnh xc nh phn t trong xu c kho k. S dng mt con tr ph tr p ln lt tr n cc phn t trong xu. Gii thut c th hin nh sau : Bc 1: p = Head; //Cho p tr n phn t u danh sch Bc 2: Trong khi (p != NULL) v (p->next != k ) thc hin: p:=p->next;// Cho p tr ti phn t k Bc 3: Nu p != NULL th p tr ti phn t cn tm Ngc li: khng c phn t cn tm. Ci t:

Bi tp cu trc d liu v gii thutSGU2010

Trang 47

Node* Search(List l,int x) { p=l.pH; while ((p!=NULL)&&(p->Info!=x)) p=p->next; return p; } 3.2.2.3. Duyt danh sch Duyt danh sch l thao tc thng c thc hin khi c nhu cu x l cc phn t ca danh sch theo cng mt cch thc hoc khi cn ly thng tin tng hp t cc phn t ca danh sch nh: m cc phn t ca danh sch, Tm tt c cc phn t tho iu kin, Hu ton b danh sch (v gii phng b nh) duyt danh sch (v x l tng phn t) ta thc hin cc thao tc sau: Gii thut : Bc 1: p = Head; //Cho p tr n phn t u danh sch Bc 2: Trong khi (Danh sch cha ht) thc hin B21 : X l phn t p; B22 : p:=p->pNext; // Cho p tr ti phn t k Ci t: void ProcessList(List &l) { p=l.pH; while (p!=NULL) { cout<<p->Info<<" "; p=p->pNext; }

Bi tp cu trc d liu v gii thutSGU2010 cout<<endl;

Trang 48

} 3.2.2.4. Hu mt phn t khi danh sch C 3 loi thao tc thng dng hu mt phn t ra khi xu. Chng ta s ln lt kho st chng. Lu l khi cp pht b nh, chng ta dng hm new. V vy khi gii phng b nh ta phi dng hm delete. Cch 1: Hu phn t u xu: Gii thut : Nu (Head != NULL) th B1: p = Head; // p l phn t cn hu B2: Head = Head->pNext; // tch p ra khi xu free(p); // Hu bin ng do p tr n Nu Head=NULL th Tail = NULL; //Xu rng B3: Cch 2: Hu mt phn t ng sau phn t q Gii thut : Nu (q!= NULL) th b1: p = q->pNext; // p l phn t cn hu b2: Nu (p != NULL) th // q khng phi l cui xu q->pNext = p->pNext; // tch p ra khi xu free(p); // Hu bin ng do p tr n void RemoveNode(List &l,Node *q) { if (q!=NULL) { p=q->pNext; if (p!=NULL) { if(p==l.pT) l.pT=q; q->pNext=p->pNext; free(p); } }

Bi tp cu trc d liu v gii thutSGU2010 }

Trang 49

Cch 3: Hu 1 phn t c kho k Gii thut : Bc 1: p=l.head; if p->info==k goi ham xoa phan tu dau cua danh sach l else { q=p ->pNext while (q->info!=k) { p=q; q=q->pNext } p->pnext=q->pnext } LU : hu ton b danh sch, ta c mt cht thay i trong th tc duyt (x l) danh sch trn ( y, thao tc x l bao gm hnh ng gii phng mt phn t, do vy phi cp nht cc lin kt lin quan) : Gii thut : Bc 1: Trong khi (Danh sch cha ht) thc hin p = Head; Head:=Head->pNext; // Cho p tr ti phn t k Hy p; Bc 2: Tail = NULL; //Bo m tnh nht qun khi xu rng

Bi tp cu trc d liu v gii thutSGU2010

Trang 50

3.3.SP XP DANH SCH Mt danh sch c th t (danh sch c sp) l mt danh sch m cc phn t ca n c sp xp theo mt th t no da trn mt trng kho. V d, danh sch cc phn t s c th t tng l danh sch m vi mi cp phn t X, Y ta lun c X Y nu X xut hin trc Y trong danh sch (danh sch c 1 hoc khng c phn t no c xem l mt danh sch c sp). sp xp mt danh sch, ta c th thc hin mt trong 2 phng n sau:

Phng n 1: Hon v ni dung cc phn t trong danh sch (thao tc trn vng Info). Vi phng n ny, c th chn mt trong nhng gii thut sp xp bit ci t li trn xu nh thc hin trn mng, im khc bit duy nht l cch thc truy xut n cc phn t trn xu thng qua lin kt thay v ch s nh trn mng. Do da trn vic hon v ni dung ca cc phn t, phng php ny i hi s dng thm vng nh trung gian nn ch thch hp vi cc xu c cc phn t c thnh phn Info kch thc nh. Hn na s ln hon v c th ln n bc n2 vi xu n phn t. Khi kch thc ca trng Info ln, vic hon v gi tr ca hai phn t s chim chi ph ng k. iu ny s lm cho thao tc xp xp chm li. Nh vy, phng n ny khng tn dng c cc u im ca xu . 3.3.2.Mt s Phng php sp xp trn danh sch V d : Ci t gii thut sp xp Chn trc tip trn xu : void ListSelection(List &l) { for (Node *p=l.head;p!=l.tail;p=p->pNext) { Node *min=p; for (Node *q=p->pNext;q!=NULL;q=q->pNext) if (q->Info<min->Info) min=q; int temp=min->Info; min->Info=p->Info;

Bi tp cu trc d liu v gii thutSGU2010 p->Info=temp; } } Ci t gii thut sp xp i ch trc tip trn xu : void ListInterchengeSort(List &l) { for (Node *p=l.head;p!=NULL;p=p->pNext) for (Node *q=p->pNext;q!=NULL;q=q->pNext) if (p->Info>q->Info) { int temp=p->Info; p->Info=q->Info; q->Info=temp; } }

Trang 51

Phng n 2: Thay i cc mi lin kt (thao tc trn vng Next) Do cc nhc im ca cc phng php sp xp theo phng n 1, khi liu lu ti mi phn t trong xu c kch thc ln ngi ta thng dng mt cch tip cn khc. Thay v hon i gi tr, ta s tm cch thay i trnh t mc ni ca cc phn t sao cho to lp nn c th t mong mun. Cch tip cn ny s cho php ta ch thao tc trn cc mc ni (trng pNext). Nh ta bit, kch thc ca trng ny khng ph thuc vo bn cht d liu lu trong xu v c bng ng mt con tr (2 byte hoc 4 byte trong mi trng 16 bit v 4 byte hoc 8 byte trong mi trng 32 bit, .). Tuy nhin thao tc trn cc mc ni thng s phc tp hn l thao tc trc tip trn d liu. V vy, ta cn cn nhc k lng trc khi chn cch tip cn. Nu d liu khng qu ln th ta nn chn phng n 1 hoc mt gii thut hiu qu no . Mt trong nhng cch thay i mc ni n gin nht l to mt danh sch mi l danh sch c th t t danh sch c (ng thi hy danh sch

Bi tp cu trc d liu v gii thutSGU2010

Trang 52

c). Gi s danh sch mi s c qun l bng con tr u xu Result, ta c phng n 2 ca gii thut chn trc tip nh sau : Bc1: Khi to danh sch mi Result l rng; Bc2: Tm trong danh sch c l phn t nh nht; Bc3: Tch min khi danh sch l; Bc4: Chn min vo cui danh sch Result; Bc5: Lp li bc 2 khi cha ht danh sch Head; void ListSelectionSort2(List &l) { List lRes; Node *min; // ch? d?n ph?n t? c gi tr? nh? nh?t trong xu Node *p,*q,*minrightev; lRes.head= lRes.pT = NULL; // kh?i t?o lRes while(l.head!= NULL) { p = l.pH; q = p->pNext;min = p; minrightev=NULL; while(q != NULL) { if(q->Info< min->Info ) { min = q; minrightev = p; } p = q; q = q->pNext; } if(minrightev != NULL) minrightev->pNext = min->pNext; else l.pH = min->pNext;

Bi tp cu trc d liu v gii thutSGU2010 min->pNext = NULL; InsertTail(lRes,min); } l = lRes;

Trang 53

} 3.4.Danh sch hn ch 3.4.1.Stack Stack l mt vt cha (container) cc i tng lm vic theo c ch LIFO (Last In First Out) ngha l vic thm mt i tng vo stack hoc ly mt i tng ra khi stack c thc hin theo c ch "Vo sau ra trc". Cc i tng c th c thm vo stack bt k lc no nhng ch c i tng thm vo sau cng mi c php ly ra khi stack. Thao tc thm 1 i tng vo stack thng c gi l "Push". Thao tc ly 1 i tng ra khi stack gi l "Pop". Ta c th nh ngha CTDL stack nh sau: stack l mt CTDL tru tng (ADT) tuyn tnh h tr 2 thao tc chnh: Push(o): Thm i tng o vo u stack Pop(): Ly i tng u stack ra khi stack v tr v gi tr ca n. Nu stack rng th li s xy ra. Ngoi ra, stack cng h tr mt s thao tc khc: isEmpty(): Kim tra xem stack c rng khng. Top(): Tr v gi tr ca phn t nm u stack m khng hy n khi stack. Nu stack rng th li s xy ra. Cc thao tc thm, trch v hu mt phn t ch c thc hin cng mt pha ca Stack do hot ng ca Stack c thc hin theo nguyn tc LIFO (Last In First Out - vo sau ra trc). biu din Stack, ta c th dng mng 1 chiu hoc dng danh sch lin kt.

Bi tp cu trc d liu v gii thutSGU2010

Trang 54

3.4.2 Hng i (Queue) Hng i l mt vt cha (container) cc i tng lm vic theo c ch FIFO (First In First Out) ngha l vic thm mt i tng vo hng i hoc ly mt i tng ra khi hng i c thc hin theo c ch "Vo trc ra trc". Cc i tng c th c thm vo hng i bt k lc no nhng ch c i tng thm vo u tin mi c php ly ra khi hng i. Thao tc thm mt i tng vo hng i v ly mt i tng ra khi hng i ln lt c gi l "enqueue" v "dequeue". Vic thm mt i tng vo hng i lun din ra cui hng i v mt phn t lun c ly ra t u hng i. Trong tin hc, CTDL hng i c nhiu ng dng: kh qui, t chc lu vt cc qu trnh tm kim theo chiu rng v quay lui, vt cn, t chc qun l v phn phi tin trnh trong cc h iu hnh, t chc b m bn phm, . Ta c th nh ngha CTDL hng i nh sau: hng i l mt CTDL tru tng (ADT) tuyn tnh. Tng t nh stack, hng i h tr cc thao tc: EnQueue(o): Thm i tng o vo cui hng i DeQueue(): Ly i tng u queue ra khi hng i v tr v gi tr ca n. Nu hng i rng th li s xy ra. IsEmpty(): Kim tra xem hng i c rng khng. Front(): Tr v gi tr ca phn t nm u hng i m khng hy n. Nu hng i rng th li s xy ra. Cc thao tc thm, trch v hu mt phn t phi c thc hin 2 pha khc nhau ca hng i do hot ng ca hng i c thc hin theo nguyn tc FIFO (First In First Out - vo trc ra trc). Cng nh stack, ta c th dng cu trc mng 1 chiu hoc cu trc danh sch lin kt biu din cu trc hng i. 3.4.3. u nhc im ca danh sch lin kt Do cc phn t (nt) c lu tr khng lin tip nhau trong b nh, do vy danh sch lin kt c cc u nhc im sau y: -Mt s dng b nh ca danh sch lin kt khng ti u tuyt i (<100%).

Bi tp cu trc d liu v gii thutSGU2010

Trang 55

-Vic truy xut v tm kim cc phn t ca danh sch lin kt mt nhiu thi gian bi lun lun phi duyt tun t qua cc phn t trong danh sch; -Tn dng c nhng khng gian b nh nh lu tr tng nt, tuy nhin b nh lu tr thng tin mi nt li tn nhiu hn do cn phi lu thm thng tin v vng lin kt. Nh vy nu vng d liu ca mi nt l ln hn th t l mc tiu tn b nh ny l khng ng k, ngc li th n li gy lng ph b nh. -Vic thm, bt cc phn t trong danh sch, tch nhp cc danh sch kh d dng do chng ta ch cn thay i mi lin kt gia cc phn t vi nhau. ng dng ca danh sch hn ch Danh sch hn ch c s dng trong nhiu trng hp, v d: -Hng i thng c s dng lu tr cc lung d liu cn x l tun t; -Ngn xp thng c x l trong cc lung d liu truy hi, c bit l trong vic kh quy cho cc gii thut.

B.Cc dng bi tp
Dng 1: To danh sch, duyt danh sch V d: Cho mt danh sch lin kt n l, mi nt l mt s nguyn a.To danh sch l cha n s nguyn. b.In danh sch #include <conio.h> #include <stdlib.h> #include <iostream.h> #include <alloc.h> struct Node { int info; Node *next; }; struct List { Node *head,*tail;

Bi tp cu trc d liu v gii thutSGU2010 }; Node* taonut(int x); void chennutvaocuoi(List &l,Node *p); void danhsachchencuoi(List &l); void duyetdanhsach(List l); void chennutvaodau(List &l,Node *p); void danhsachchendau(List &l); void chensaunutq(List &l,Node *q,int x); void main() { clrscr(); List l; danhsachchencuoi(l); duyetdanhsach(l); getch(); } Node* taonut(int x) { Node *p=new Node; if (p==NULL) { cout<<"Khong du bo nho"; exit(1); } p->info=x; p->next=NULL; return p; } void chennutvaocuoi(List &l,Node *p)

Trang 56

Bi tp cu trc d liu v gii thutSGU2010 { if (l.head==NULL) { l.head=p; l.tail=p; } else { l.tail->next=p; l.tail=p; } } void danhsachchencuoi(List &l) { int x,n; cout<<"Danh sach co bao nhieu phan tu : ";cin>>n; for (int i=1;i<=n;i++) { cin>>x; chennutvaocuoi(l,taonut(x)); } } void duyetdanhsach(List l) { cout<<endl; Node *p = l.head; while (p!=NULL) { cout<<p->info<<" "; p=p->next;

Trang 57

Bi tp cu trc d liu v gii thutSGU2010 } } void { chennutvaodau(List &l,Node *p) if (l.head==NULL) { l.head=p; l.tail=p; } else { p->next=l.head; l.head=p; } } void danhsachchendau(List &l) { int x,n; cout<<"Nhap vao so n = ";cin>>n; for (int i=1;i<=n;i++) { cin>>x; chennutvaodau(l,taonut(x)); } } void chensaunutq(List &l,Node *q,int x) { Node *p=taonut(x); if (p==NULL) exit(1);

Trang 58

Bi tp cu trc d liu v gii thutSGU2010 if (q!=NULL) { p->next=q->next; q->next=p; if (q==l.tail) l.tail=p; } else chennutvaodau(l,p); }

Trang 59

Dng 2: Cc hm tm kim v sp xp Tm xem x c thuc v danh sch l hay khng ? Nu c tr v con tr tr n nt tm c; nu khng tr v gi tr NULL Node* timkiem(List l,int x) { Node *p=l.head; while ((p!=NULL) && (p->info!=x)) p=p->next; return p; } Tm xem x c thuc v danh sch l hay khng ? Nu c tr v gi tr 1; nu khng tr v gi tr 0. int timkiem01(List l,int x) { Node *p=l.head; while ((p!=NULL) && (p->info!=x)) p=p->next; return (p!=NULL); }

Bi tp cu trc d liu v gii thutSGU2010

Trang 60

Sp xp cc phn t theo chiu tng dn bng phng php chn trc tip void sapxepchontructiep(List &l) { for (Node *p=l.head;p!=l.tail;p=p->next) { Node *min=p; for (Node *q=p->next;q!=NULL;q=q->next) if (q->info<min->info) min=q; hoanvi(min->info,p->info); } } Sp xp cc phn t theo chiu tng dn bng phng php i ch trc tip void sapxepdoichotructiep(List &l) { for (Node *p=l.head;p!=l.tail;p=p->next) for (Node *q=p->next;q!=NULL;q=q->next) if (p->info>q->info) hoanvi(p->info,q->info); } void hoanvi(int &x, int &y) { int temp=x;x=y;y=temp; } Dng 5: Cc hm lin quan n xa nt //Xa nt u ca danh sch void xoanutdau(List &l) { Node *p=l.head; if (p!=NULL)

Bi tp cu trc d liu v gii thutSGU2010 { l.head=l.head->next; delete(p); } else l.tail=NULL; } //Xa nt k sau nt c tr bi con tr q void xoanutsauq(List &l,Node *q) { if (q!=NULL) { Node *p=q->next; if (p!=NULL) { if (p==l.tail) l.tail=q; q->next=p->next; delete(p); } } } //Xa nt c gi tr k void xoanutkhoak(List &l, int k) { Node* p=l.head; if (p->info==k) xoanutdau(l); else { Node *q=p->next;

Trang 61

Bi tp cu trc d liu v gii thutSGU2010 while (q->info!=k && q!=NULL) { p=q; q=p->next; } p->next=q->next; } } void noihaidanhdanh(List &l1,List l2) { l1.tail->next=l2.head; l1.tail=l2.tail; } void chenphantu(List &l,int x) { cin>>x; if (l.head->info>=x) chennutvaodau(l,taonut(x)); else { Node*p=l.head; while (p->next->info<x && p->next!=NULL) p=p->next; if (p->next==NULL) chennutvaocuoi(l,taonut(x)); else { Node*q=taonut(x); q->next=p->next; p->next=q;

Trang 62

Bi tp cu trc d liu v gii thutSGU2010 } } }

Trang 63

C.Bi tp
BT3-1.Cho danh sch lin kt n l, mi nt l mt s nguyn dng. a.Tnh tng gi tr ca cc nt. b.m xem trong danh sch c bao nhiu nt c gi tr chn? bao nhiu nt c gi tr l? c.Tm s nguyn t ln nht. d.Hy to danh sch l1 ch cha cc s nguyn t t danh sch l. e.In ra cc run t nhin t danh sch lin kt cho: V d danh sch lin kt ban u biu din cc s: 1 5 6 4 8 3 7 th kt qu l cc dy s: 156 48 37 f.Xa mt nt c tr bi con tr q. g.Chn vo sau mi nt c gi nguyn t mt s chnh phng nh nht ln hn n (v d sau s nguyn t 29 l s chnh phng 36). BT3-2.a.Cho hai danh sch lin kt n l1,l2 cha cc s nguyn. Hy ni danh sch l2 vo sau danh sch l1. b.Cho mt danh sch lin kt n l cha cc s nguyn c th t tng. Hy chn mt s nguyn x vo danh sch l l vn c th t tng. c.Cho hai danh sch lin kt n l1,l2 cha cc s nguyn. Hy trn cc phn t ca l1 v l2 vo l3 l3 cng c sp xp tng (Hy gii li bi ton bng cch chn cc phn t ca l2 vo l1 l1 sau cng c sp tng (l1 cha cc phn t ca l1 v l2 trc ). d.Cho mt danh sch lin kt n l cha cc s nguyn. Hy gi li mt gi tr trong cc gi tr trng nhau ca l. e.Cho mt danh sch lin kt n l cha cc s nguyn. Hy tm tn s xut hin ca cc gi tr BT3-3.Bng cc thao tc c bn trn hng i hy trnh by cc gii thut:

Bi tp cu trc d liu v gii thutSGU2010

Trang 64

o ngc th t mt hng i. Tm mt phn t c kha ca trng key l x trong hng i. Ci t cc gii thut trn bng hng i cc s nguyn vi cch t chc hng i bng danh sch lin kt. BT3-4.a.Cho mt ngn xp vi cc thao tc c bn. Hy vit cc hm thc hin cc cng vic sau y: -Ly ra phn t cui cng ca ngn xp -Ly ra phn t th n ca ngn xp, vi n l s nguyn dng. Ci t c th cc gii thut trn bng ngn xp cc s nguyn vi cch t chc ngn xp bng mng. b.Trnh by gii thut o ngc mt danh sch bng hai cch: i gi tr ca cc phn t i lin kt ca cc phn t. Ci t cc gii thut trn cho danh sch cc s nguyn. Nu dng quy th hy dng ngn xp kh quy. BT3-5.Tnh gi tr ca biu thc s hc Khi thc hin chng trnh, cc ngn ng lp trnh thng phi tnh gi tr ca biu thc. Thng thng, cc ngn ng lp trnh tnh gi tr biu thc bng hai bc sau: Th nht: Chuyn biu thc t dng trung t (infix)sang dng hu t (postfix). Th hai: Tnh gi tr biu thc hu t. Biu thc trung t l cch m chng ta thng s dng, trong biu thc dng trung t th cc php ton hai ngi c vit xen gia hai ton hng. Vic tnh trc tip cc biu thc trung t s gp kh khn v phi dng cc cp du ngoc n quy nh th t thc hin cc biu thc con. tnh cc biu thc, ngi Ba Lan a ra mt k php quy nh cch vit cc biu thc (gi l k php Ba Lan) trong cc php ton c t sau ton hng. Vic dng k php Ba Lan khng cn du ngoc nhng vn th hin c th t u tin khi tnh gi tr biu thc nn d dng xy dng gii thut tnh. V d: Biu thc dng trung t 3+ (5-2)*3/7- c vit di dng biu thc hu t l 3 5 2 3 * 7/4 -+

Bi tp cu trc d liu v gii thutSGU2010

Trang 65

Ci t chng trnh tnh biu thc s hc bng cch chuyn biu thc trung t thnh biu thc hu t dng k php Ba Lan.Gii hn ch xt cc biu thc s hc gm cc php ton hai ngi: +- */ trn cc s c mt ch s. BT3-6.a.Hy ci t cc gii thut sp xp hc trn xu n bng cch thay i cc mi lin kt (khng hon i vng info ca cc nt) b.Hy ci t cc gii thut sp xp hc trn xu kp BT3-7.Cho danh sch lin kt n l, mi nt l mt phn s (gi s t s v mu s ca cc phn s l cc s nguyn dng). Cu trc ca danh sch lin kt l c cho nh sau: struct Phanso {int tu; int mau;}; struct Node {Phanso info; struct Node *next;}; struct List {Node *head,*tail;}; Hy vit cc hm thc hin cc yu cu sau: a.Tm phn s c gi tr ln nht ca danh sch l. b.Hy m xem trong sch l c bao nhiu phn s nh hn 1 v ln hn 0 ? c.Sp xp cc phn s theo chiu tng dn. d.m s lng phn s ti gin ca danh sch l (phn s ti gin l phn s m c s chung ln nht ca t s v mu s ca n bng 1). e.Hy to danh sch l1 ch cha cc phn s c gi tr nh hn 1 t danh sch l. BT3-8.Cho mt danh sch lin kt n. Mi phn t info l mt k t ('A'..'Z'). a.To mt danh sch lin kt n mi cha cc k t khng c trong danh sch cho. b.Vit chng trnh con loi khi danh sch cho cc phn t vi phm iu kin tng dn ca danh sch. Bit rng phn t u tin c gi li trong danh sch. V d: Danh sch lin kt biu din : D F H G K M A B Q Danh sch lin kt sau khi loi: D F H K M Q. c.Vi danh sch cho c th t tng dn (khng c phn t trng nhau). Vit chng trnh b sung vo danh sch ny sao cho cho danh sch s cha y cc k t t 'A' n 'Z'. BT3-9.S dng danh sch lin kt n vit chng trnh thc hin cc yu cu sau:

Bi tp cu trc d liu v gii thutSGU2010

Trang 66

a.Khai bo cu trc d liu ca mt danh sch lin kt n cc tnh. Bit rng thng tin ca mi tnh bao gm: tn tnh, din tch, dn s. b.Ci t cc thao tc c bn cho danh sch lin kt n cc tnh (thm, sa, xa, duyt). c.Tnh tng din tch ca tt c cc tnh trong danh sch lin kt. d.Tm cc tn tnh c din tch ln nht. e.Tm mt tnh c dn s ln nht. f.Sp xp danh sch tng dn theo tn tnh. BT3-10.Cho mt danh sch lin kt n lu thng tin ca cc th sinh khi thi tuyn vo lp 10 vi ba mn thi l mn1, mn 2 v mn 3, thng tin gm : - S bo danh (chui, ti a 8 k t) - H tn (chui, ti a 20 k t) - im mn 1 (s nguyn) - im mn 2 (s nguyn) - im mn 3 (s nguyn) Hy thc hin yu cu sau: a.Hy in ln mn hnh nhng th sinh c im tng 18 v khng c mn no di im 5; danh sch ny phi c sp theo th t im tng gim dn. b.Xa h s th sinh c s bo danh l x. c.Cp nht im thi ca mt th sinh c s bo danh l y (y l chui k t) theo cc gi tr mi nhp t bn phm. d.Chn vo cui danh sch thng tin v mt th sinh c s bo danh z vi y cc thng tin trn c nhp t bn phm. BT3-11.Dng danh sch lin kt n biu din mt a thc. Nu gii thut v ci t cc hm sau: -Nhp a thc -Xut mt a thc -Tnh gi tr ca a thc ti im xo -Cng a thc -Nhn a thc

Bi tp cu trc d liu v gii thutSGU2010

Trang 67

BT3-12.Dng danh sch lin kt n trong cc phn t l cc s nguyn c sp theo th t ci t cho tp hp cc s nguyn. Hy t chc d liu v ci t cc hm sau: -Thm mt phn t vo tp hp -Loi mt phn t khi tp hp -Kim tra mt phn t c trong tp hp hay khng -Giao hai tp hp -Hp hai tp hp -Hiu hai tp hp T cc hm trn, hy vit chng trnh thc hin cc cng vic: -Nhp vo hai tp hp -Tm giao, hp. hiu ca hai tp hp v in kt qu

Bi tp cu trc d liu v gii thutSGU2010 Chng 4

Trang 68

CU TRC CY
A.Tm tt l thuyt
4.1.Cu trc cy 4.1.1.nh ngha

Cy l mt tp hp T cc phn t (gi l nt ca cy) trong c mt nt c bit c gi l gc, cc nt cn li c chia thnh nhng tp ri nhau T1, T2 , ..., Tn theo quan h phn cp trong Ti cng l mt cy. Mi nt cp i s qun l mt s nt cp i+1, y gi l quan h cha-con. Chng hn sau y l hnh nh ca mt cy
A

Hnh 4.1.
E

Nt A gi l nt gc ca cy. Cc nt B,C,D l gc ca cc cy con ca A. Nt A l cha ca cc nt B,C,D v B,C,D l cc nt con ca A. 4.1.2.Mt s khi nim c bn Bc ca mt nt: L s cy con ca nt . V d bc ca A l 3, bc ca H l 2, bc ca D l 3. Bc ca mt cy: L bc ln nht ca cc nt trong cy (s cy con ti a ca mt nt thuc cy). Cy c bc n th gi l cy n-phn. V d cy trn c bc l 3.

Bi tp cu trc d liu v gii thutSGU2010

Trang 69

Nt gc: L nt khng c nt cha. V d A l nt gc ca cy. Nt l: L nt c bc bng 0. V d E,C,K,I, l cc nt l Nt nhnh: L nt c bc khc 0 v khng phi l gc . V d B,D,Hl cc nt nhnh Mc ca mt nt: mc (gc (T) ) = 0. gi T1, T2, T3, ... , Tn l cc cy con ca T0 mc (T1) = mc (T2) = ... = mc (Tn) = mc (T0) + 1. chng hn nt A c mc l 0, D c mc l 1, G c mc l 2, J c mc l 3. di ng i t gc n nt x: Bng s nt trn ng i tr i 1. chng hn ng i t A n G l 2, ng i t A n K l 3. Chiu cao ca mt cy L s mc ln nht ca nt c trn cy cng thm 1 chng hn cy trn c chiu cao l 4. 4.2.Cy nh phn 4.2.1.nh ngha Cy nh phn l cy m mi nt c ti a 2 cy con Trong thc t thng gp cc cu trc c dng cy nh phn. Mt cy tng qut c th biu din thng qua cy nh phn. 4.2.2 Mt s tnh cht ca cy nh phn: S nt nm mc i 2I. Vi h l chiu cao ca cy th S nt l 2h-1 th log2(s nt trong cy). h S nt trong cy 2h 1.

Bi tp cu trc d liu v gii thutSGU2010 chng hn cho mt cy nh phn c chiu cao l 4 nh sau: Hnh 4.2.
B A

Trang 70

D G H I

Th s nt nm mc 0 l 1, s nt nm mc 1 l 2, s nt nm mc 2 l 4, s nt nm mc 3 l 8 v s nt l ca cy l 8. 4.2.3 Biu din cy nh phn T Cy nh phn l mt cu trc bao gm cc phn t (nt) c kt ni vi nhau theo quan h cha-con vi mi cha c ti a 2 con. biu din cy nh phn ta chn phng php cp pht lin kt. ng vi mt nt, ta dng mt bin ng lu tr cc thng tin: -Thng tin lu tr ti nt. -a ch nt gc ca cy con tri trong b nh. -a ch nt gc ca cy con phi trong b nh. Khai bo tng ng trong ngn ng C/C++ c th nh sau: struct node { Data info; struct node *left,*right; }; typedef node *tree; tree root;

Bi tp cu trc d liu v gii thutSGU2010

Trang 71

Do tnh cht mm do ca cch biu din bng cp pht lin kt, phng php ny c dng ch yu trong biu din cy nh phn. T y tr i, khi ni v cy nh phn, chng ta s dng phng php biu din ny. 4.2.4 Duyt cy nh phn Nu nh khi kho st cu trc d liu dng danh sch lin kt ta khng quan tm nhiu n bi ton duyt qua tt c cc phn t ca chng th bi ton duyt cy ht sc quan trng. N l ct li ca nhiu thao tc quan trong khc trn cy. Do cy nh phn l mt cu trc d liu phi tuyn nn bi ton duyt cy l bi ton khng tm thng. C nhiu kiu duyt cy khc nhau, v chng cng c nhng ng dng khc nhau. i vi cy nh phn, do cu trc qui ca n, vic duyt cy tip cn theo kiu qui l hp l v n gin nht. Sau y chng ta s xem xt mt s kiu duyt thng dng. C 3 kiu duyt chnh c th p dng trn cy nh phn: duyt theo th t trc (NLR), th t gia (LNR) v th t sau (LRN). Tn ca 3 kiu duyt ny c t da trn trnh t ca vic thm nt gc so vi vic thm 2 cy con. Tng t nh vy ta c 3 cch duyt khc l: NRL, RNL, RLN. Duyt theo th t trc (node-left-right) Kiu duyt ny trc tin thm nt gc sau thm cc nt ca cy con tri ri n cy con phi. Th tc duyt c th trnh by n gin nh sau: (trong mc ny vic x l cc nt ch l in gi tr ca phn t ) Duyt theo th t gia (Left- Node-Right) Kiu duyt ny trc tin thm cc nt ca cy con tri sau thm nt gc ri n cy con phi. Th tc duyt c th trnh by n gin nh sau: Duyt theo th t sau (left-right-node) Kiu duyt ny trc tin thm cc nt ca cy con tri sau thm n cy con phi ri cui cng mi thm nt gc. rooth tc duyt c th trnh by n gin nh sau: A Chng hn vi hnh 4.3.sau y
B C

Bi tp cu trc d liu v gii thutSGU2010

Trang 72

Hnh 4.3 th dy cc tn ng vi nt c thm trong cc php duyt l: Theo th t trc: A,B,D,E,C,F,G Theo th t gia: D,B,E,A,F,C,G Theo th t sau: D,E,B,F,G,C,A Bn c hy lit k cc nt c thm ng vi cc cch duyt: NRL, RNL, RLN. 4.3.Cy nh phn tm kim 4.3.1. cy nh phn tm kim nh ngha: Cy nh phn tm kim (CNPTK) l cy nh phn trong ti mi nt, 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. Nu s nt trn cy l N th chi ph tm kim trung bnh ch khong log2N. Trong thc t, khi xt n cy nh phn ch yu ngi ta xt CNPTK. Sau y l mt v d v cy nh phn tm kim:
4

Hnh 4.4

4.3.2.3.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. chng hn vi hnh 4.4 th kt qu ca cc php duyt nh sau:

Bi tp cu trc d liu v gii thutSGU2010 Theo th t trc: 4,2,1,3,6,5,7 Theo th t gia: 1,2,3,4,5,6,7 Theo th t sau: 1,3,2,5,7,6,4 B.CC DNG BI TP Dng 1: Hm to cy nh phn tm kim, cc hm duyt cy #include <iostream.h> #include <conio.h> #include <alloc.h> struct node { int info; struct node *left,*right; }; typedef node *tree; int chennutvaoBST(tree &root,int k); void taoBST(tree &root); void LNR(tree root); void NLR(tree root); void LRN(tree root); void main() { clrscr(); tree root; taoBST(root); LNR(root); getch(); } //---------------Chn nt c gi tr k vo cy c gc l root------------------

Trang 73

Bi tp cu trc d liu v gii thutSGU2010

Trang 74

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 chennutvaoBST tr v gi tr 1, 0, 1 khi khng b nh, gp nt c hay thnh cng: int chennutvaoBST(tree &root,int k) { if (root!=NULL) { if (root->info==k) return 0; if (root->info>k) return chennutvaoBST(root->left,k); else return chennutvaoBST(root->right,k); } else { root=new node; if (root==NULL) return -1; root->info=k; root->left=root->right=NULL; return 1; } } //---------------To cy c gc l root--------------Ta c th to mt cy nh phn tm kim bng cch lp li qu trnh chn thm mt phn t vo mt cy rng. void taoBST(tree &root) { int k,n; cout<<"\nIn put n=";cin>>n; root=NULL;

Bi tp cu trc d liu v gii thutSGU2010 for (int i=1;i<=n;i++) { cin>>k; chennutvaoBST(root,k); } root1=root;// dng cho nhng hm pha sau } //---------------Cc hm duyt cy--------------void LNR(tree root) { if (root!=NULL) { LNR(root->left); cout<<root->info<<" "; LNR(root->right); } } void NLR(tree root) { if (root!=NULL) { cout<<root->info<<" "; NLR(root->left); NLR(root->right); } } void LRN(tree root) {

Trang 75

Bi tp cu trc d liu v gii thutSGU2010

Trang 76

if (root!=NULL) { LRN(root->left); LRN(root->right); cout<<root->info<<" "; } } Dng 2: Cc hm tm kim nt c gi tr x trn cy nh phn tm kim Kim tra xem k c trong cy root hay khng ? Nu c th tr v con tr tr n nt tm c; trong trng hp khng c th tr v gi tr NULL. node* timkiem(tree root,int k) { if (root==NULL) return NULL; else if (root->info==k) return root; if (k>root->info) return timkiem(root->right,k); else return timkiem(root->left,k); } Lu : Hy vit li hm trn bng cch khng s dng phng php quy. Kim tra xem k c trong cy root hay khng ? Nu c th tr v gi tr 1; nu khng c th tr v gi tr 0. int timkiem01(tree root,int k) { if (root==NULL) return 0; else if (root->info==k) return 1; if (k>root->info) return timkiem01(root->right,k); else return timkiem01(root->left,k); }

Bi tp cu trc d liu v gii thutSGU2010

Trang 77

D dng thy rng s ln so snh ti a phi thc hin tm phn t k l h, vi h l chiu cao ca cy. Nh vy thao tc tm kim trn CNPTK c n nt tng chi ph trung bnh khong O(log2n) . Dng 3: Cc hm ng dng php duyt cy n gin //----------Tnh tng gi tr ca cc nt trong cy ---------int tong(tree root) { if (root==NULL) return 0; return root->info+tong(root->left)+tong(root->right); } //-----------------Tm gi tr ln nht ca cy ----------int giatrilonnhat(tree root) { while (root->right!=NULL) root=root->right; return root->info; } //------------m s nt ca cy---------------int demnut(tree root) { if (root==NULL) return 0; return demnut(root->left)+demnut(root->right)+1; } //-------------m s nt l ca cy------------int demnutla(tree root) { if (root==NULL) return 0; if ((root->left==NULL) && (root->right==NULL)) return 1;

Bi tp cu trc d liu v gii thutSGU2010 else return demnutla(root->left)+demnutla(root->right);

Trang 78

} //--------------- m s nt c ng mt cy con --------------int demnut1caycon(tree root) { if (root==NULL) return 0; else { if ((root->left!=NULL && root->right==NULL) || (root->left==NULL && root->right!=NULL)) return 1+demnut1caycon(root->left)+demnut1caycon(root->right); return demnut1caycon(root->left)+demnut1caycon(root->right); } }

//--------------- m s nt c hai cy con--------------int demnut2caycon(tree root) { if (root==NULL) return 0; else { if (root->left!=NULL && root->right!=NULL) return 1+demnut2caycon(root->left)+demnut2caycon(root->right); return demnut2caycon(root->left)+demnut2caycon(root->right); } } int nguyento(int n) { if (n<2) return 0; int k=sqrt(n);

Bi tp cu trc d liu v gii thutSGU2010 for (int i=2;i<=k;i++) if (n%i==0) return 0; return 1;

Trang 79

} //----------------m xem c bao nhiu nt c gi tr nguyn t ?---------------int demnutnguyento(tree root) { if (root==NULL) return 0; return nguyento(root->info)+demnutnguyento(root->left)+demnutnguyento(root>right); } Dng 4: Mt s hm lin quan n khi nim chiu cao v mc ca cy //---------------Chiu cao ca cy--------------int chieucao(tree root) { if (root==NULL) return 0; else { long hr=chieucao(root->left); long hl=chieucao(root->right); return 1+((hl<hr) ? hr:hl); } } //---------------Tm mc ca nt c gi tr l x---------------int muccuanut(tree root, int x) { if (root!=NULL) { if (root->info==x) return 0; if (root->info>x) return 1+muccuanut(root->left,x); if (root->info<x) return 1+muccuanut(root->right,x); }

Bi tp cu trc d liu v gii thutSGU2010 return 0; }

Trang 80

Dng 5: Cc hm xa mt nt ca cy Vic hy mt phn t k ra khi cy phi bo m iu kin rng buc ca CNPTK. C 3 trng hp khi hy nt k c th xy ra: k l nt l. k ch c 1 con (tri hoc phi).

k c c 2 con Trng hp th nht: Ch n gin hy k v n khng mc ni n phn t no khc. Trng hp th hai: Trc khi hy k ta mc ni cha ca k vi con duy nht ca n. Trng hp cui cng: Ta khng th hy trc tip do k c 2 con Ta s hy gin tip. Thay v hy k, ta s tm mt phn t th mng k. Phn t ny c ti a mt con. Thng tin lu ti k s c chuyn ln lu ti k. Sau , nt b hy tht s s l k ging nh 2 trng hp u. Vn l phi chn k sao cho khi lu k vo v tr ca k, 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 ti s chn phn t (phi nht trn cy con tri lm phn t th mng. Hm xoanut tr v gi tr 1, 0 khi hy thnh cng hoc khng c k trong cy: Hy ton b CNPTK 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. //--------Hm tm phn t th mng-----------------------void phantuthemang(tree &p,tree &q)

Bi tp cu trc d liu v gii thutSGU2010 { if (q->left) phantuthemang(p,q->left); else { p->info=q->info; p=q; q=q->right; } } //---------------Xa nt c gi tr l k---------------------int xoanut(tree &root,int k) { if (root==NULL) return 0; if (root->info>k) return xoanut(root->left,k); if (root->info<k) return xoanut(root->right,k); else { node *p=root; if (root->right==NULL) root=root->left; else if (root->left==NULL) root=root->right; else { node *q=root->right; phantuthemang(p,q); } delete(p); } return 1; }

Trang 81

Bi tp cu trc d liu v gii thutSGU2010

Trang 82

C.Bi tp
BT4-1.a.Hy v cy nh phn tm kim T bit rng khi duyt cy T theo th t left right - node th c dy nh sau: 1, 4, 7, 5, 3, 16, 18, 15, 29, 25, 30, 20, 8 -Hy duyt cy T trn theo th t node - left - right. b.Hy v cy nh phn tm kim T bit rng khi duyt cy T theo th t Node Left -Right th c dy: 9, 4, 1, 3, 8, 6, 5, 7, 10, 14, 12, 13, 16, 19. -Hy duyt cy T trn theo th t left right node, left -node-right. -Hy v li cy sau khi xo nt 10 sao cho T vn l cy nh phn tm kim. BT4-2.a.Hy v li cy nh phn T bit khi duyt cy T ta c dy s sau: NLR: 24 5 12 14 18 20 33 13 19 28 LNR: 12 5 18 14 33 20 24 19 28 13 b.Hy v cy nh phn tm kim T bit rng th t cc s nhp vo l: 8, 3, 5, 2, 20, 11, 30, 9, 18, 4. Sau , nu hy ln lt cc nt 5, 20 (theo th t ) th cy s thay i nh th no trong tng bc hy (v li cy cho mi bc). BT4-3.Cho cy nh phn tm kim T, mi nt cha mt s nguyn. Hy vit cc hm thc hin cc yu cu sau: a.m xem trong cy c bao nhiu nt c gi tr m? bao nhiu nt c gi tr dng? b.Tm phn t dng nh nht ca cy. BT4-4.a.m xem trong cy c bao nhiu nt m gia tr ca n cng vi gi tr ca hai cy con trc tip ca n cng l s nguyn t? b.Tm cy con sao cho (s nt ca cy con s nt nguyn t ca cy con) l nh nht. c.Tm cy con T c tng ln nht (chi tm mt cy tha). d.Tm cy con khc nt l ch cha ton s nguyn t. BT4-5.Xy dng cu trc cy sao cho mi nt ca cy lu tr mt phn s (t s v mu s l cc s nguyn). a.Hy tm phn s c gi tr ln nht b.Tnh tng gi tr cc phn s trong cy. BT4-6.Biu din tnh trng cy cn bng AVL sau khi thc hin cc thao tc sau: Ln lt thm cc node theo trnh t: 13,7,2,11,19,16,4,3,1,8,12,6,24,14,20,23,18 a.Xa 13

Bi tp cu trc d liu v gii thutSGU2010

Trang 83

b.Xa 19 BT4-7.Cho mt cy nh phn T, mi nt l mt s nguyn. Hy vit cc hm thc hin cc yu cu sau: a.Cho bit chiu cao ca cy AVL b.Kim tra xem T c phi l cy cn bng hon ton khng ? c.Kim tra xem T c phi l cy nh phn cn bng khng ? d.Thm mt phn t vo cy AVL e.Hy mt phn t trn cy AVL. BT4-8.a.Tm mt dy n kha sao cho khi ln lt dng gii thut thm vo cy AVL s phi thc hin mi thao tc cn bng (LL, LR, RL, RR) li t nht mt ln. b.Hy v cy AVL vi 12 nt c chiu cao cc i trong tt c cc cy AVL 12 nt. BT4-9.Cho mt cy nh phn biu din 1 biu thc ton hc. Bit rng gc ca cy l root, mi nt c thuc tnh key (kiu char) , cha 1 php tnh(+,- , *,/) hay mt gi tr nguyn (cc nt l). Hy vit hm tnh gi tr biu thc cha trong cy. BT4-10.Vit chng trnh qun l mt danh b in thoi n gin bao gm cc thng tin: s thu bao, h tn ch thu bao, a ch. Chng trnh cho php tm kim thng tin, thm hoc xa i mt s thu bao no . BT4-11.Xy dng cu trc cy t in sao cho mi nt ca cy lu tr ngha ting Anh v ngha ting Vit ca mt t no . Hy vit chc nng tra Anh-Vit cho mt t no BT4-12.Cho cy nh phn T trong thng tin ti mi nt trong cy biu din cc thnh phn thng tin ca mt c gi. Bit rng mi c gi gm nhng thnh phn: M c gi, tn c gi, ngy sinh, a ch, ngy lp th. a.Tm a ch ca c gi ln tui nht trong cy. b.Lit k cc c gi trong cy sinh sau nm 1985 c.m s lng node c 2 cy con c ngy lp th trong ngy 09/09/2010. d.Tm kim a ch theo m c gi. e.Lit k cc c gi trong cy.

Bi tp cu trc d liu v gii thutSGU2010

Trang 84

Mt s thi mu
MN: CU TRC D LIU V THUT TON ( S 1) Thi gian lm bi: 90 pht, khng k thi gian pht Cu I (2 im) a.Vit hm sp xp dy n s nguyn ao,a1,a2,...an-1 tng dn theo gii thut Heap sort. b.Hy minh ha cch sp xp tng dn dy s sau y theo gii thut Heap sort: 26, 7, 22, 15, 1, 18, 11, 27 Cu II (2 im) Cho cy nh phn tm kim T gm 12 s nguyn vi php duyt LRN cho kt qu nh sau: 1, 3, 2, 6, 7, 5, 4, 10, 9, 12, 11, 8 a.Hy v cy nh phn tm kim T. b.Duyt cy T theo th t NLR c.V li cy sau khi xo nt 8 sao cho T vn cy nh phn tm kim. Cu III (3 im) Cho mt danh sch lin kt n l; mi nt l mt s nguyn dng. a.Vit hm to danh sch l1 ch cha cc s nguyn t t danh sch l. b.Vit hm xa cc s nguyn t trong danh sch l. Cu IV(3 im) Cho cy nh phn tm kim T; mi nt l mt s nguyn. a.Vit hm tm mc ca nt c gi tr ln nht. b.Vit hm tm tt c cc ng i t gc c di l 4 trn cy. c.Vit hm m s cy con ch cha ton l s nguyn t. --------------------------------------------------Ht-----------------------------------------

Bi tp cu trc d liu v gii thutSGU2010

Trang 85

MN: CU TRC D LIU V THUT TON ( S 2) Thi gian lm bi: 90 pht, khng k thi gian pht Cu I (2 im) a.Vit hm sp xp dy n s nguyn ao,a1,a2,...an-1 tng dn theo gii thut Quick sort. b.Hy minh ha cch sp xp tng dn dy s sau y theo gii thut Quick sort: 28, 9, 25, 19, 5, 21, 14, 31. Cu II (2 im) Cho mt mng cc gi tr nguyn nh sau: Ch s Gi tr 0 10 1 3 2 16 3 7 4 1 5 4 6 9 7 14 8 2 9 8

a.Cho bit kt qu sau khi bin i mng trn thnh dy heap. b.Th hin dy heap theo dng cy nh phn. Cu III (3 im) Hy khai bo kiu cu trc d liu lin kt n m mi phn t cha thng tin v mt quyn sch bao gm cc trng: M s sch (s nguyn 4 byte), tn sch (chui, ti a 40 k t), tc gi (chui, ti a 30 k t), nm xut bn (s nguyn 4 byte). a.m s sch xut bn nm X. b.Sp xp danh sch theo m s sch. Cu IV (3 im) Gi s T l mt cy nh phn tm kim m ti mi nt lu mt s nguyn. Hy khai bo kiu d liu T v xy dng cc hm sau: a.Hm tm kim mt node c kha X (tr v con tr tr dn nt tm c). b.Hm m s nt c kha ln hn X. c.Hy tm cy con c tng ln nht. --------------------------------------------------Ht-----------------------------------------

Bi tp cu trc d liu v gii thutSGU2010

Trang 86

MN: CU TRC D LIU V THUT TON ( S 3) Thi gian lm bi: 90 pht, khng k thi gian pht Cu I (2 im) a.Vit hm ci t gii thut Selection-Sort bng qui v khng qui. b.Cch ci t gii thut ny bng qui c g tt (khng tt) so vi kiu ci t bng php lp thng thng. c.Hy cho bit s ln so snh v s ln gn ca thut ton Selection-Sort. Cu II(2 im) Lm th no chuyn cc phn t trong stack S1 sang stack S2 vi nhng yu cu nh sau: Th t cc phn t trong S2 ging nh trong S1 Khng c dng thm stack ph, ch c dng thm vi bin ph. Vit gii thut dng m gi.

Cu III (3 im) a.Cho hai danh sch lin kt n l1,l2 c cc phn t l cc s nguyn v c sp tng dn. Hy trn hai danh sch ny c mt danh sch l3 cng c sp tng dn (khng c sp xp). b.Cho mt hng i vi cc thao tc c bn. Hy vit cc hm thc hin cc cng vic sau y: -Ly ra phn t cui cng ca hng i Ly ra phn t th n ca hng i, vi n l s nguyn dng. Ci t c th cc gii thut trn bng ngn xp cc s nguyn vi cch t chc hng i bng danh sch lin kt. Cu IV(3 im) Cho cy nh phn tm kim T, mi nt cha mt s nguyn. Hy vit cc hm thc hin cc yu cu sau: a.In ra tt c cc nt mc th k ca cy T b.In ra tt c cc nt theo th t tng 0 n tng th h-1 ca cy T( h l chiu cao ca cy) --------------------------------------------------Ht-----------------------------------------

Bi tp cu trc d liu v gii thutSGU2010

Trang 87

MN: CU TRC D LIU V THUT TON ( S 4) Thi gian lm bi: 90 pht, khng k thi gian pht Cu I (2 im) a.Nu ta xa 1 phn t khi cy BST v sau thm n vo li cy. Hi: hnh dng ca cy b thay i khng? Gii thch? b.Chng minh rng mt cy nh phn vi chiu cao h s c ti a 2h-1 nt Cu II (2 im) a.S dng Stack, vit chng trnh chuyn i mt s nguyn n trong h thp phn (h 10) sang biu din h nh phn (h 2). b.Hy p dng gii thut Balan ngc bin i biu thc sau thnh dng postfit: (a+b/(c-d))*e. Trnh by trng thi ca stack sau mi ln c s thay i. Cu III (3 im) Hy qun l cc s thu bao in thoi bng danh sch lin kt n. Mi phn t cha cc thng tin: h tn, a ch, s in thoi c nh. Hy vit hm tm kim a ch ca mt s in thoi cho trc. Cu IV (3 im) Cho cy nh phn tm kim T, mi nt cha mt s nguyn. Hy vit cc hm thc hin cc yu cu sau: a.In ng i t gc n nt c gi tr ln nht. b.Tm mt cy con khng cha s nguyn t no. --------------------------------------------------Ht-----------------------------------------

Bi tp cu trc d liu v gii thutSGU2010

Trang 88

MN: CU TRC D LIU V THUT TON ( S 5) Thi gian lm bi: 90 pht, khng k thi gian pht Cu I(2 im) Cho mng A cha cc phn t: V tr i A[i] 0 5 1 1 2 2 3 8 4 6 5 10 6 3 7 9 8 4 9 7

a.Hy cho bit kt qu sau khi hiu chnh mng A thnh (binary) heap? b.V (binary) heap dng cy nh phn. c.Cho bit s phn t ti thiu v ti a ca mt (binary) heap c chiu cao l h? Cu II(2 im) a.Hy minh ha cch sp xp tng dn dy s sau y theo gii thut Quick sort: 28, 9, 25, 19, 5, 21, 14, 31. b.Chng minh gii thut Merge sort c phc tp l O(Nlog2N) Cu III (3 im) Cho danh sch lin kt n, mi nt l mt phn s (t s v mu s l cc s nguyn) a.Hy m xem trong danh sch c bao nhiu phn s c gi tr ln hn 1. b.Hy xa cc phn s khng phi l phn s ti gin trong danh sch. Cu IV (3 im) Cho cy nh phn tm kim T c kha l cc s nguyn. a.In cc kha theo chiu gim dn. b.Tm gi tr nt l mc su nht (ch tm 1 gi tr tha) --------------------------------------------------Ht-----------------------------------------

Bi tp cu trc d liu v gii thutSGU2010

Trang 89

MN: CU TRC D LIU V THUT TON ( S 6) Thi gian lm bi: 90 pht, khng k thi gian pht Cu I (2 im) Hy v cy nh phn tm kim T bit rng khi duyt cy T theo th t left right node th c dy nh sau: 1, 4, 7, 5, 3, 16, 18, 15, 29, 25, 30, 20, 8 -Hy duyt cy T trn theo th t node - left - right. -Cy T c chiu cao l bao nhiu ? Tm cc ng i t gc c di l 4 trn cy. Cu II (2 im) a.Trong gii thut Quick sort c bn, phn t pivot c chn l: pivot=a[r]. Hy cho bit u/khuyt im ca cch chn ny. b.Vi cch chn pivot=a[(l+r)/2], hy cho bit chi ph cn thit quick sort sp xp mt mng gm c n phn t bng nhau. Cu III(3 im) Hy khai bo kiu d liu danh sch lin kt n m mi phn t cha thng tin v mt sinh vin bao gm cc trng: m s sinh vin (chui, 12 k t), h lt sinh vin (chui, ti a 12 k t), tn sinh vin (chui, ti a 12 k t), im trung bnh tch ly (s thc). Vi cc kiu d liu va khai bo, hy xy dng cc hm sau: a.Hm xp loi tt nghip cho sinh vin. Trong xp loi X(xut sc) nu c im trung bnh tch ly (TB) >=9.0; Loi G(Gii) nu c im trung bnh tch ly 8<= (TB)<9.0; Loi K(kh) nu c im trung bnh tch ly 7<= TB < 8; Loi T (trung bnh) nu c im trung bnh tch ly 5<= TB <7. b.Hm sp xp danh sch theo im trung bnh tch ly. c.Hm sp xp danh sch t loi X, danh sch cn c sp theo tn tng dn, nu tn trng th sp theo h tng dn. Cu IV (3 im) Gi s T l mt cy nh phn tm kim m ti mi nt lu mt s nguyn. Hy khai bo kiu d liu T v xy dng cc hm sau: a.Hm thm mt node c kha X vo T. b.Hm m s nt c kha ln hn X nhng nh hn Y (X<Y). --------------------------------------------------Ht-----------------------------------------

Bi tp cu trc d liu v gii thutSGU2010

Trang 90

MN: CU TRC D LIU V THUT TON ( S 7) Thi gian lm bi: 90 pht, khng k thi gian pht Cu I (2 im) Cho cy nh phn tm kim T gm 12 s nguyn vi th t cc nt c chn vo cy nh sau: 11 (nt gc), 7, 5, 1, 6, 8, 10, 9, 18, 12, 13, 19. -Hy v cy nh phn tm kim T. -Hy duyt cy T trn theo th t NLR. -Hy duyt cy T trn theo th t RNL. -Hy v li cy sau khi xo nt 11 sao cho T vn l cy nh phn tm kim. Cu II(2 im) a.Hy nu s khc nhau ca cy nh phn tm kim (BST) v Heap? b.C th lit k N phn t ca Heap theo th t tng dn vi chi ph O(N) khng? V sao? Cu III (3 im) Cho danh sch lin kt n l, mi nt l mt phn s (gi s t s v mu s ca cc phn s l cc s nguyn dng). Cu trc ca danh sch lin kt l c cho nh sau: struct Phanso {int tu; int mau;}; struct Node {Phanso info; struct Node *next;}; struct List {Node *head,*tail;}; Hy vit cc hm thc hin cc yu cu sau: a.Hy m s lng phn s c gi tr ln hn 1 ca danh sch l. b.Hy to danh sch l1 ch cha cc phn s ti gin t danh sch l (phn s ti gin l phn s m c s chung ln nht ca t s v mu s ca n bng 1). c.m s lng phn s ti gin ca danh sch l (phn s ti gin l phn s m c s chung ln nht ca t s v mu s ca n bng 1). Cu IV (3 im) Hy vit phn khai bo cu trc d liu m t mt cy nh phn tm kim m mi phn t l mt s nguyn dng. Hy vit cc hm thc hin cc yu cu sau: a.Vit hm m xem trong cy c bao nhiu nt c ng 2 cy con ? b.Vit hm tnh tng cc nt c gi tr nguyn t trong cy. --------------------------------------------------Ht-----------------------------------------

Bi tp cu trc d liu v gii thutSGU2010

Trang 91

MN: CU TRC D LIU V THUT TON ( S 8) Thi gian lm bi: 90 pht, khng k thi gian pht Cu I (2 im) a.S dng danh sch lin kt kp khai bo cu trc cho mt danh sch m mi nt l mt s nguyn. b.Hy vit hm sp xp mt danh sch tng dn bng cch s dng danh sch lin kt kp. Cu II (2 im) Hy vit cc hm tm kim mt phn t x trong cc trng hp: Danh sch cn tm c biu din bng mt mng 1 chiu, danh sch cn tm c biu din bng mt danh sch lin kt n, danh sch cn tm c biu din bng mt cy nh phn tm kim. Cc hm ny nu tm thy tr v gi tr 1, nu khng tm thy tr v gi tr 0. Cu III (3 im) 1.Cho mt danh sch lin kt n trong , mi phn t cha 1 s nguyn Hy vit hm xa phn t c gi tr ln nht trong danh sch. Lu : Ch c php duyt danh sch 1 ln Nu c nhiu phn t ln nht ging nhau, xa phn t u tin 2.Dng ngn xp cc s nguyn vi cc php ton push,pop. Hy lp chng trnh i mt s thp phn thnh s nh phn. Cu IV (3 im) Cho cy nh phn tm kim T c kha l cc s nguyn. a.Lit k tt c cc phn t ca mt cy nh phn tm kim tha iu kin gi tr ca phn t nm trong khong [Min, Max] cho trc. b.Tm cy con T c tng ln nht (chi tm 1 cy tha) --------------------------------------------------Ht-----------------------------------------

Bi tp cu trc d liu v gii thutSGU2010

Trang 92

MN: CU TRC D LIU V THUT TON ( S 9) Thi gian lm bi: 90 pht, khng k thi gian pht Cu I (2 im) a.Hy nh ngha mt heap v nu cc tnh cht ca mt heap b.Hy hiu chnh dy s sau y thnh mt heap 12 2 8 5 1 6 4 15 Cu II (2 im) a.Hy vit hm sp xp chn trc tip bng cch s dng danh sch lin kt n. Yu cu thay i cc mi lin kt (thao tc trn vng next). b.Bng cc thao tc c bn trn hng i sau y: int Qisempty(List Q) : kim tra hng i rng void Qpush(List &Q, int x) :Thm mt phn t vo cui hng i int Qpop(List &Q) : Trch/hy phn t u hng i Hy vit hm tnh tng cc phn t ca mng mt chiu n phn t. Cu III (3 im) a.Cho mt danh sch lin kt n l cha cc s nguyn c th t tng. Hy chn mt s nguyn x vo danh sch l l vn c th t tng. b.Cho mt danh sch lin kt n l cha cc s nguyn. Hy gi li mt gi tr trong cc gi tr trng nhau ca l. Cu IV (3 im) a.Hy vit phn khai bo cu trc d liu m t mt danh sch lin kt n l m mi phn t l mt s nguyn. Hy vit hm sp xp cc phn t trong danh sch l theo chiu tng dn. b.Hy vit phn khai bo cu trc d liu m t mt cy nh phn tm kim m mi phn t l mt s nguyn. Hy vit hm tm chiu cao ca cy. --------------------------------------------------Ht-----------------------------------------

Bi tp cu trc d liu v gii thutSGU2010

Trang 93

MN: CU TRC D LIU V THUT TON ( S 10) Thi gian lm bi: 90 pht, khng k thi gian pht Cu I (2 im) a.Nu cc nh ngha sau: Cy nhi phn, cy nh phn tm kim, cy nh phn cn bng hon ton, cy nh phn cn bng. b.Hy ci t thut ton tm kim tuyn tnh c.Hy cho bit s ln so snh ca gii thut tm kim tuyn tnh trong trng hp xu nht, tt nht, trung bnh. Hy cho bit phc tp ca thut ton ny. Cu II (2 im) Vit cc hm sau y: a.Thm mt phn t x vo stack S bng cch dng danh sch lin kt. b.Xem thng tin ca phn t nh stack S bng cch dng danh sch lin kt. c.Thm mt phn t x vo cui hng i Q bng cch dng danh sch lin kt. d.Xem thng tin ca phn t u hng i Q bng cch dng danh sch lin kt. Cu III (3 im) Cho mt danh sch lin kt n trong , mi phn t cha 1 s nguyn b.Vit hm xa tt c cc s nguyn t trong danh sch. c.Hy tm tn s xut hin ca cc gi tr Cu IV (3 im) Cho cy nh phn tm kim T c kha l cc s nguyn. a.Vit hm tm mc ca mt nt c gi tr x. b.Vit hm in cc nt mc k ca cy. --------------------------------------------------Ht-----------------------------------------

Bi tp cu trc d liu v gii thutSGU2010

Trang 94

MN: CU TRC D LIU V THUT TON ( S 11) Thi gian lm bi: 90 pht, khng k thi gian pht Cu I (2 im) a. Nu cc nh ngha v cch t chc danh sch lin kt sau: Danh sch lin kt n, danh sch lin kt kp, danh sch lin kt vng, danh sch c nhiu mi lin kt. b.Hy ci t gii thut tm kim nh phn bng qui. c.Hy cho bit s ln so snh ca gii thut tm kim nh phn trong trng hp xu nht, tt nht, trung bnh. Hy cho bit phc tp ca thut ton ny. Cu II (2 im) S dng Stack, vit chng trnh nhp vo mt s nguyn, khng m bt k, sau xut ra mn hnh s o ngc th t cc ch s ca s nhp vo. V d: - Nhp vo mt s nguyn: 10245 - S nguyn dng o ngc: 54201 Cu III (3 im) a.Cho hai danh sch lin kt n l1,l2 cha cc s nguyn. Hy ni danh sch l2 vo sau danh sch l1. b.Khai bo mt danh sch lin kt n trong , mi phn t lu tr d liu gm: Gi tr ca nt : kiu s nguyn Tn s xut hin ca gi tr:Kiu s nguyn. Hy vit hm rt gn danh sch lin kt n theo dng sau: Nu cc phn t c cng gi tr th ch gi li mt phn t v tn s ca gi tr th c cng thm 1. Cu IV (3 im) Gi s ta c mt tp hp gm n phn t kiu s nguyn cn lu tr bng cu trc cy nh phn tm kim (BST). Lu rng cc phn t c th trng nhau. Hy trnh by mt xut v cu trc cy BST sao cho: a.Lu tr v tm kim c cc phn t. Vi cc trng hp phn t trng nhau, cn th hin c s lng phn t trng lp. b.M t cu trc bng C/C++ c.Vit hm cho hai thao tc chnh: Thm phn t, xa phn t. --------------------------------------------------Ht-----------------------------------------

Bi tp cu trc d liu v gii thutSGU2010

Trang 95

MN: CU TRC D LIU V THUT TON ( S 12) Thi gian lm bi: 90 pht, khng k thi gian pht Cu I (2 im) a.Hy vit cc hm sp xp theo gii thut chn trc tip v ni bt. b.Cho dy gm cc s nguyn sau: 99 52 33 84 21 75 68 Hy m phng cc bc sp xp tng dn dy s trn bng cc gii thut chn trc tip v ni bt. Cu II (2 im) a.Hy v li cy nh phn T bit khi duyt cy T ta c dy s sau: NLR: 15 1 2 4 7 10 21 3 9 19 LNR: 2 1 7 4 21 10 15 9 19 3 b.Nu ta xa 1 phn t khi cy BST v sau thm n vo li cy. Hi: hnh dng ca cy b thay i khng? Gii thch? Cu III (3 im) a.Cho 2 s nguyn ln a v b (s ch s >= 100). S dng danh sch lin kt n biu din cho s nguyn a v s nguyn b. Hy vit hm tnh tng a+b b. Cho hai danh sch lin kt n l1,l2 cha cc s nguyn. Hy trn cc phn t ca l1 v l2 vo l3 l3 cng c sp xp tng (Hy li gii bi ton bng cch chn cc phn t ca l2 vo l1 l1 sau cng c sp tng (l1 cha cc phn t ca l1 v l2 trc ) Cu IV (3 im) Cho cy nh phn tm kim T, mi nt cha mt s nguyn. Hy vit cc hm thc hin cc yu cu sau: a.m cc nt l c gi tr > n1 v <n2 b.Xa tt c cc nt mang gi tr l s nguyn t. --------------------------------------------------Ht-----------------------------------------

Bi tp cu trc d liu v gii thutSGU2010

Trang 96

Gi v hng dn gii bi tp
Chng 1: Tng quan v cu trc d liu v gii thut
BT1-1a. #include<stdio.h> #include<conio.h> #include<iostream.h> //-----------------------------------------------------------void nhapmang(int a[],int &n) { cin>>n; for(int i=0;i<n; i++) cin>>a[i]; } int daychandainhat(int a[],int n) { int chieudaimax=0,demchan=0; for (int i=0;i<n;i++) if (a[i]%2==0) demchan++; else { if (demchan>chieudaimax) chieudaimax=demchan; demchan=0; } return demchan>chieudaimax?demchan:chieudaimax; } void main() {

Bi tp cu trc d liu v gii thutSGU2010 clrscr(); int a[100],n; nhapmang(a,n); cout<<daychandainhat(a,n); getch(); } BT1-2. #include <iostream.h> #include <conio.h> void nhap(int a[], int &n, int &k); void xuat(int a[], int n); void daonguoc(int a[], int u,int v); void daodoan(int a[], int n, int k); void main(void) { int a[100],n,k; nhap(a,n,k); daodoan(a,n,k); xuat(a,n); } void nhap(int a[], int &n, int &k) { clrscr(); cin>>n; for (int i=0;i<n;i++) cin>>a[i]; cin>>k; } void daonguoc(int a[],int u,int v)

Trang 97

Bi tp cu trc d liu v gii thutSGU2010 { int tam; while (u<v) { tam=a[u]; a[u++]=a[v]; a[v--]=tam; } } void daodoan(int a[], int n, int k) { daonguoc(a,0,k-1); daonguoc(a,k,n-1); daonguoc(a,0,n-1); } void xuat(int a[], int n) { for (int i=0;i<n;i++) cout<<a[i]<<" "; getch(); } BT1-3 #include <conio.h> #include <iostream.h> void congsolon(int a[], int m, int b[], int n); void trusolon(int a[], int m, int b[], int n); void nhansolon(int a[], int m, int b[], int n); void main() { clrscr(); int m,n;

Trang 98

Bi tp cu trc d liu v gii thutSGU2010 int a[100],b[100]; nhansolon(a,m,b,n); getch(); } void congsolon(int a[], int m, int b[], int n) { cin>>m>>n; int max=m>n?m:n; for (int i=0;i<=max;i++) {a[i]=0;b[i]=0;} for (i=max-m+1;i<=max;i++) cin>>a[i]; for (i=max-n+1;i<=max;i++) cin>>b[i]; int c[100]; int sonho=0; for (i=max;i>0;i--) { c[i]=(a[i]+b[i]+sonho)%10; sonho=(sonho+a[i]+b[i])/10; } c[0]=sonho; if (c[0]!=0) cout<<c[0]; for (i=1;i<=max;i++) cout<<c[i]; } void trusolon(int a[], int m, int b[], int n) { cin>>m>>n; int max=m>n?m:n; for (int i=0;i<=max;i++) {a[i]=0;b[i]=0;} for (i=max-m+1;i<=max;i++) cin>>a[i]; for (i=max-n+1;i<=max;i++) cin>>b[i]; int c[100];

Trang 99

Bi tp cu trc d liu v gii thutSGU2010 for (i=max;i>=1;i--) if (a[i]<b[i]) { c[i]=a[i]+10-b[i]; b[i-1]=b[i-1]+1; } else c[i]=a[i]-b[i]; if (c[1]!=0) cout<<c[1]; for (i=2;i<=max;i++) cout<<c[i]; } void nhansolon(int a[], int m, int b[], int n) { int c[100]; cin>>m>>n; for (int i=1;i<=m;i++) cin>>a[i]; for (i=1;i<=n;i++) cin>>b[i]; for (i=1;i<=m+n;i++) c[i]=0; for (i=1;i<=m;i++) for (int j=1;j<=n;j++) c[i+j]=c[i+j]+a[i]*b[j]; for (i=m+n;i>=3;i--) { c[i-1]=c[i-1] + c[i]/10; c[i]=c[i]%10; } for (i=2;i<=m+n;i++) cout<<c[i]; }

Trang 100

Bi tp cu trc d liu v gii thutSGU2010 BT1-4 #include<conio.h> #include<iostream.h> void nhapdathuc(int a[], int &n) { cin>>n; for(int i=n; i>=0;i--) cin>>a[i]; } int giatridathuc(int a[],int n,int x) { cout<<"Nhap gia tri xo = ";cin>>x; int mu=1; int tong=0; for(int i=0;i<=n;i++) { tong+=a[i]*mu; mu=mu*x; } return tong; } void tongdathuc(int a[], int m, int b[], int n, int c[], int &l) { l=m>n?m:n; for(int i=l;i>=0;i--) c[i]=0; for(i=0;i<=l;i++) c[i]=a[i]+b[i]; } void hieudathuc(int a[], int m, int b[], int n, int c[], int &l)

Trang 101

Bi tp cu trc d liu v gii thutSGU2010 { l=m>n?m:n; for(int i=l;i>=0;i--) c[i]=0; for(i=0;i<=l;i++) c[i]=a[i]-b[i]; } void tichdathuc(int a[], int m, int b[], int n, int c[], int &l) { for(int i=m+n;i>=0;i--) c[i]=0; for(i=0;i<=n;i++) for(int j=0;j<=m;j++) c[i+j]+=a[i]*b[j]; l=m+n; } void xuatdathuc(int nc[],int n) { cout<<endl<<"Da thuc ket qua : "; for(int i=n;i>0;i--) cout<<c[i]<<"x^"<<i<<" + "; cout<<c[0]; } void main() { clrscr(); int a[100],b[100],c[100],x; int m,n,l; nhapdathuc(a,m); nhapdathuc(b,n); tichdathuc(a,m,b,n,c,l); xuatdathuc(c,l);

Trang 102

Bi tp cu trc d liu v gii thutSGU2010 getch(); }

Trang 103

Bi tp cu trc d liu v gii thutSGU2010

Trang 104

Chng 2: Tm kim v sp xp
BT2-2. #include <iostream.h> #include <conio.h> void input(int a[],int &n); int linearsearch ( int a[], int n, int x ); int linearsearch_sentinel( int a[], int n, int x ); int binarysearch(int a[],int n,int x); int binarysearch_recursive(int a[],int n,int x,int left,int right); void main() { clrscr(); int a[1000],n,x; input(a,n); cout<<"Nhap phan tu can tim : ";cin>>x; cout<<binarysearch(a,n,x); getch(); } void input(int a[],int &n) { cin>>n; for (int i=0;i<n;i++) cin>>a[i]; } int linearsearch ( int a[], int n, int x ) { int i = 0; while (i<n && a[i]!=x) i++;

Bi tp cu trc d liu v gii thutSGU2010 if (i==n) return -1; return i; } int linearsearch_sentinel( int a[], int n, int x ) { int i = 0; a[n] = x; while (a[i]!=x) i++; if( i==n) return -1; return i; } int binarysearch(int a[],int n,int x) { int left=0,right=n-1,mid; do { mid=(left+right)/2; if (x==a[mid]) return mid; else if (x<a[mid]) right=mid -1; else left=mid+1; } while (left<=right); return -1;

Trang 105

Bi tp cu trc d liu v gii thutSGU2010 } int binarysearch_recursive(int a[],int n,int x,int left,int right) { if (left>right) return -1; int mid=(left+right)/2; if (x==a[mid]) return mid; if (x<a[mid]) return binarysearch_recursive(a,n,x,left,mid-1); return binarysearch_recursive(a,n,x,mid+1,right); } #include <iostream.h> void input(int a[],int &n); void output(int a[],int n); void interchangesort(int a[], int n); void selectionsort(int a[],int n); void insertionsort(int a[], int n); void bubblesort(int a[],int n); void swap(int &x,int &y);

Trang 106

void main() { int a[100],n; input(a,n); bubblesort(a,n); output(a,n); } void input(int a[],int &n)

Bi tp cu trc d liu v gii thutSGU2010 { cin>>n; for (int i=0;i<n;i++) cin>>a[i]; } void output(int a[],int n) { for (int i=0;i<n;i++) cout<<a[i]<<" : "; } void swap(int &x,int &y) { int temp=x; x=y; y=temp; } void interchangesort(int a[], int n) { for (int i=0; i<n-1;i++) for (int j=i+1;j<n ;j++) if (a[i]>a[j]) swap(a[i],a[j]); } void selectionsort(int a[],int n) { for(int i = 0;i < n -1; i++) { int min = i;

Trang 107

Bi tp cu trc d liu v gii thutSGU2010 for ( int j = i+1; j < n; j++) if (a[j] < a[min]) min = j; swap( a[min], a[i] ); } } void insertionsort(int a[], int n) { int pos; int x; for(int i=1; i<n; i++) { x=a[i]; pos=i-1; while((pos>=0) && (a[pos]>x)) { a[pos+1] = a[pos]; pos--; } a[pos+1]=x; } } void bubblesort(int a[],int n) { for (int i=1;i<n;i++) for (int j=n-1;j>=i;j--) if (a[j]<a[j-1]) swap(a[j],a[j-1]); } #include <iostream.h> #include <stdlib.h>

Trang 108

Bi tp cu trc d liu v gii thutSGU2010 #include <conio.h> void input(int a[],int &n); void output(int a[],int n); void insertheap(int a[],int l,int r); void heapsort(int a[],int n); void quicksort(int a[],int l,int r); void mergesort(int a[],int n); void swap(int &x,int &y); int n; void main() { clrscr(); int a[100]; input(a,n); //heapsort(a,n); mergesort(a,n); output(a,n); getch(); } void input(int a[],int &n) { cin>>n; for (int i=0;i<n;i++) cin>>a[i]; }

Trang 109

Bi tp cu trc d liu v gii thutSGU2010 void output(int a[],int n) { for (int i=0;i<n;i++) cout<<a[i]<<" : "; cout<<endl; } void { insertheap(int a[],int l,int r) int j; j=l*2; while (j<=r) { if (j<r) if (a[j] <a[j+1]) j++; if (a[j] <=a[l]) return; swap(a[l],a[j]); l=j; j=l*2; } } void heapsort(int a[],int n) { int l=n/2; int r=n-1; while (l>=0) insertheap(a,l--,r); while (r>0) { swap(a[0],a[r]);

Trang 110

Bi tp cu trc d liu v gii thutSGU2010 r--; insertheap(a,0,r); } } void quicksort(int a[],int l,int r) { int x=a[(l+r)/2]; int i=l; int j=r; do { while (a[i]<x) i++; while (a[j]>x) j--; if (i<=j) swap(a[i++],a[j--]); } while (i<j); if (l<j) quicksort(a,l,j); if (i<r) quicksort(a,i,r); } void mergesort(int a[],int n) { int up,j,k,q,t,r,s,d,p; for (int i=n;i>0;i--) a[i]=a[i-1]; up=1; p=1; do {

Trang 111

Bi tp cu trc d liu v gii thutSGU2010 d=1; int m=n; if (up) { i=1;j=n;k=n+1;q=2*n; } else { i=n+1;j=2*n;k=1;q=n; } do { if (m>=p) s=p; else s=m; m=m-s; if (m>=p) r=p; else r=m; m=m-r; while ((s!=0) && (r!=0)) { if (a[i]<a[j]) { a[k]=a[i];i=i+1;s=s-1; } else { a[k]=a[j];j=j-1;r=r-1; } k=k+d; } while (s!=0) { a[k]=a[i];k=k+d;i=i+1;s=s-1;

Trang 112

Bi tp cu trc d liu v gii thutSGU2010 } while (r!=0) { a[k]=a[j];k=k+d;j=j-1;r=r-1; } d=-d;t=k;k=q;q=t; } while (m!=0); up=!up; p=p*2; } while (p<n); if (!up) for (i=1;i<=n;i++) a[i]=a[i+n]; for (i=0;i<n;i++) a[i]=a[i+1]; } void swap(int &x,int &y) { int temp=x; x=y; y=temp; }

Trang 113

Bi tp cu trc d liu v gii thutSGU2010

Trang 114

Chng 3: Cu trc danh sch lin kt


Dng 3: ng dng hm duyt danh sch //Tm gi tr ln nht ca danh sch int giatrilonnhat(List l) { Node *p=l.head; int max=p->info; while (p!=NULL) { p=p->next; if (p->info>max) max=p->info; } return max; } int nguyento(int n) { if (n<2) return 0; int k=sqrt(n); for (int i=2;i<=k;i++) if (n%i==0) return 0; return 1; } // m xem trong danh sch c bao nhiu s nguyn t int demsonguyento(List l) { Node *p=l.head; int d=0; while (p!=NULL) {

Bi tp cu trc d liu v gii thutSGU2010 if (nguyento(p->info)) d++; p=p->next; } return d; } Dng 4: Tch danh sch void tachdanhsachchanle(List l, List &l1, List &l2) { for (Node *p=l.head;p!=NULL;p=p->next) if (p->info%2!=0) chennutvaocuoi(l1,taonut(p->info)); else chennutvaocuoi(l2,taonut(p->info)); } //Xa cc nt c gi tr nguyn t void xoanutnguyento(List &l) { Node *p=l.head; while (p!=NULL) { if (nguyento(p->info)) xoanutkhoak(l,p->info); p=p->next; } } BT3-2 #include<iostream.h> #include<stdlib.h>

Trang 115

Bi tp cu trc d liu v gii thutSGU2010 #include<alloc.h> #include<conio.h> struct phanso { int tu; int mau; }; struct Node { phanso info; struct Node * next; }; struct List { Node *head; Node *tail; }; Node * taonut(phanso x); void chennutvaocuoi(List &l, Node * New_ele); void danhsachchencuoi(List &l); void duyetdanhsach(List l); void phansolonnhat(List l); void demphanso01(List l); void hoanvi(phanso &ps1,phanso &ps2); void sapxepphanso(List &l); void main()

Trang 116

Bi tp cu trc d liu v gii thutSGU2010 { clrscr(); phanso ps; List l; danhsachchencuoi(l); phansolonnhat(l); demphanso01(l); sapxepphanso(l); duyetdanhsach(l); } Node * taonut (phanso ps) { Node *p; p=new Node; if(p==NULL) { cout<<"Khong du bo nho"; exit; } p->info=ps; p->next=NULL; return p; } void chennutvaocuoi(List &l, Node * New_ele) { if(l.head==NULL) { l.head=New_ele; l.tail=New_ele;

Trang 117

Bi tp cu trc d liu v gii thutSGU2010 } else { l.tail->next=New_ele; l.tail=New_ele; } } void danhsachchencuoi(List &l) { int n; phanso ps; cout<<"So phan tu cua danh sach : ";cin>>n; for(int i=1;i<=n;i++) { cout<<"Tu so:";cin>>ps.tu; cout<<"Mau so:";cin>>ps.mau; chennutvaocuoi(l,taonut(ps)); } } void duyetdanhsach(List l) { Node *p=l.head; while (p!=NULL) { cout<<p->info.tu<<"/"<<p->info.mau<<" "; p=p->next; } cout<<endl; }

Trang 118

Bi tp cu trc d liu v gii thutSGU2010

Trang 119

void phansolonnhat(List l) { phanso psmax; Node *p=l.head; psmax=p->info; for(p=l.head;p!=NULL;p=p->next) if(p->info.tu*psmax.mau>psmax.tu*p->info.mau) psmax=p->info; cout<<psmax.tu<<"/"<<psmax.mau; } void demphanso01(List l) { int dem=0; for(Node*p=l.head;p!=NULL;p=p->next) if(p->info.tu * p->info.mau>0 && p->info.tu<p->info.mau) dem++; cout<<"\nSo luong phan so 0< va <1 : "<<dem; } void hoanvi(phanso &ps1,phanso &ps2) { phanso ps=ps1;ps1=ps2;ps2=ps; } void sapxepphanso(List &l) { for(Node *p=l.head;p!=l.tail;p=p->next) for(Node *q=p->next;q!=NULL;q=q->next) if(p->info.tu*q->info.mau>p->info.mau*q->info.tu)

Bi tp cu trc d liu v gii thutSGU2010 hoanvi(p->info,q->info); } void xoadanhsach(List &l) { Node *p; while (l.head!=NULL) { p=l.head; l.head=l.head->next; delete p; } l.tail=NULL; } void noihaidanhdanh(List &l1,List l2) { l1.tail->next=l2.head; l1.tail=l2.tail; } void chenphantu(List &l,int x) // thay Quoc { cin>>x; if (l.head->info>=x) chennutvaodau(l,taonut(x)); else { Node*p=l.head; while (p->next->info<x && p->next!=NULL) p=p->next;

Trang 120

Bi tp cu trc d liu v gii thutSGU2010 if (p->next==NULL) chennutvaocuoi(l,taonut(x)); else { Node*q=taonut(x); q->next=p->next; p->next=q; } } } #include #include #include #include <conio.h> <stdlib.h> <iostream.h> <alloc.h>

Trang 121

struct Node { int int struct }; struct List {

info; tanso; Node *next;

Node *head,*tail; }; void tansocacgiatri(List l) { for (Node *p=l.head;p!=NULL;p=p->next) p->tanso=1; for (p=l.head;p!=l.tail;p=p->next)

Bi tp cu trc d liu v gii thutSGU2010 for (Node *q=p->next;q!=NULL;q=q->next) if (p->info==q->info && p->tanso!=0) { p->tanso++; q->tanso=0; } for (p=l.head;p!=NULL;p=p->next) if (p->tanso!=0) cout<<p->info<<" xuat hien " <<p->tanso<<endl; }

Trang 122

Bi tp cu trc d liu v gii thutSGU2010

Trang 123

Chng 4. Cu trc cy
//---------------In cc nt mc k ca cy--------------void duyetnutmuck(tree root, int k) { if (root!=NULL) { duyetnutmuck(root->left,k); if (muccuanut(root1,root->info)==k) cout<<root->info<<" "; duyetnutmuck(root->right,k); } } //In cc nt ca cy theo tng mc t mc 0 mc h-1 (vi h l chiu cao ca cy) void duyetnuttheotungmuc(tree root) { int h=chieucao(root); for (int i=0;i<h;i++) { duyetnutmuck(root,i); cout<<endl; } } //------------In cc nt trn ng i t gc n nt c gi tr x---------void duongditugoc(tree root, int x) { if (timkiem01(root,x)) { while (root->info!=x) {

Bi tp cu trc d liu v gii thutSGU2010 cout<<root->info<<" ->"; if (root->info>x) root=root->left; else if (root->info<x) root=root->right; } cout<<root->info; } else cout<<"Khong co duong di tu goc den "<<x; } //In ng i t gc n nt c mc su nht void duongdidennucsaunhat(tree root) { if (root!=NULL) { duongdidennucsaunhat(root->right); if (muccuanut(root1,root->info)==chieucao(root1)-1) duongditugoc(root1,root->info); duongdidennucsaunhat(root->left); } } //--------------- lch ca cy--------------int dolech(tree root) { return abs(chieucao(root->left) - chieucao(root->right)); } BT4-2.c.

Trang 124

Bi tp cu trc d liu v gii thutSGU2010

Trang 125

//---------------Dem so nut co dung 2 cay con--------------int demnut2connt(tree root) { if (root==NULL) return 0; else { if (root->left!=NULL && root->right!=NULL && nguyento(root->info) && nguyento(root->left->info) && nguyento(root->right->info)) return 1+demnut2connt(root->left)+demnut2connt(root->right); return demnut2connt(root->left)+demnut2connt(root->right); } } BT4-2.d. void caynguyento(tree root) { int max=0; if (root!=NULL) { if (demnut(root)-demnutnguyento(root)>max) { max=demnut(root)-demnutnguyento(root); root2=root; } caynguyento(root->right); caynguyento(root->left); } } BT4-2.e. void caycontonglonnhat(tree root) { if (root!=NULL)

Bi tp cu trc d liu v gii thutSGU2010 { if (tong(root)>max) { max=tong(root); root3=root; } caycontonglonnhat(root->left); caycontonglonnhat(root->right); } }

Trang 126

Bi tp cu trc d liu v gii thutSGU2010

Trang 127

Ti liu tham kho


[1]Nhp mn cu trc d liu v gii thut Trn Hnh NhiDng Anh cHKHTN-HQGTPHCM [2]CTDL, phn tch gii thut v pht trin phn mm, NXB Gio dc, 2007. H Thun, H Cm H, Trn Thin Thnh [3]Cu trc d liu v gii thut Xun Li - HBK HQG H Ni [4]Cu trc d liu v gii thut, HQG H Ni, 2007 inh Mnh Tng, [5]Nhng vin ngc trong k thut lp trnh. Jhon Bentley, [6]B thi mn Cu trc d liu v gii thut dnh cho cc lp i hc Khoa Cng ngh thng tin, trng i hc Si Gn. [7]B thi hon chnh i hc mn cu trc d liu i hc Khoa hc t nhin, HQG TPHCM

You might also like