cau truc du lieu va giai thuat bang ngon ngu c 1607

78
ĐẠI HC ĐÀ NNG TRƯỜNG ĐẠI HC SƯ PHM KHOA TIN HC Phan Đoàn Ngc Phương GIÁO TRÌNH CU TRÚC DLIU VÀ GII THUT Đà Nng - 2007

Upload: khai-hoang-nguyen

Post on 23-Nov-2015

33 views

Category:

Documents


3 download

DESCRIPTION

Tài liệu cấu trúc DL

TRANSCRIPT

  • I HC NNG TRNG I HC S PHM

    KHOA TIN HC "

    Phan on Ngc Phng

    GIO TRNH CU TRC D LIU V GII THUT

    Nng - 2007

  • Gio trnh cu trc d liu v gii thut 2

    Phan on Ngc Phng

    Chng 1 Tng quan v cu trc d liu v gii thut I. Khi nim :

    Xem xt cc cu trc d liu kinh in v cc cch x l tng ng. I.1. Cu trc d liu (CTDL): Cu trc d liu l nhng d liu phc hp gm nhiu thnh phn. V d mng,

    bn ghi, tp hp ... Cu trc d liu l 1 i tng ch c mt tn gi v tn ti mt c ch truy cp

    n tng thnh phn ca i tng . Nhng im cn quan tm khi xem xt mt cu trc d liu: - m hnh quan nim - cu trc lu tr : cch thc b tr cc phn t ca cu trc d liu bn trong b nh - Cc php ton c bn trn cu trc : + Cch thnh lp cu trc + B sung v loi b phn t + Duyt cu trc ( mi phn t n mt ln ) + Tm kim (tm phn t tha mn iu kin no ) + Sp xp - Cc u, khuyt im ca cu trc . Hiu sut ca gii thut (nu ta xem xt gii thut) I.2. Gii thut (GT) : nh ngha:

    Gii thut l mt khi nim quan trng ca ton hc. Gii thut l mt dy xc nh , hu hn cc thao tc m sau khi thc hin chng mt cch tun t ta s c kt qu mong mun. "Hu hn" c hiu l c v mt thi gian thc hin ln cng c thc hin. V d: vo phng my B1: m kho B2: Bt n

    B3: Bt cu dao B4: Bt cng tc CPU B5: Bt cng tc mn hnh

    Ni cch khc GT th hin mt gii php c th , thc hin tng bc mt, a ti li gii cho mt bi ton no . Khi gii mt bi ton trn my tnh in t (MTT) ta quan tm n thit k gii thut. Nhng cn nh rng: gii thut l c trng cho cch x l, m cch x l th thng lin quan n i tng x l, tc l "d liu". Cung cch th hin d liu m theo chng c lu tr v c x l trong MTT c gi l cu trc d liu (CTDL). Nh vy gia CTDL v gii thut lun c quan h: thay i CTDL s dn n thay i gii thut. Cc c trng ca gii thut : - Tnh dng : sau mt bc hu hn gii thut phi dng. - Tnh xc nh : cc bc ca thao tc phi r rng, khng gy s nhp nhng. Ni r hn l trong cng mt iu kin, hai b x l cng thc hin mt bc ca gii thut phi cho kt qu nh nhau.

  • Gio trnh cu trc d liu v gii thut 3

    Phan on Ngc Phng

    - Tnh hiu qu : gii thut cn phi ng n ngha l sau khi a d liu vo gii thut s hot ng v a ra kt qu nh mun. - Tnh ph dng : gii thut c th gii bt k bi ton no trong lp cc bi ton. C th l gii thut c th c cc u vo l cc b d liu khc nhau trong mt min xc nh. - Yu t vo ra : Mt gii thut lun lun c mt i tng vo v mt i tng ra. I.3. Ngn ng gii thut : Gii thut thng c m t bng mt dy cc lnh. B x l s thc hin lnh theo mt trt t nht nh cho n khi gp lnh dng th kt thc. Ngn ng GT gm 3 loi : NN lit k tng bc, s khi v NN cu trc V d : Giai thut gii phng trnh bc hai ax2 + bx + c = 0

    - S khi :

    S

    x1 = x2 = -b/2a Kim tra == 0 ?

    Bt u

    Nhp a, b, c

    Kim tra a == 0

    = b2 4ac

    Kim tra < 0 PTVN

    x1 = (- b + sqrt())/2a v x2 = (- b - sqrt())/2a

    In kt qu Kt thc

  • Gio trnh cu trc d liu v gii thut 4

    Phan on Ngc Phng

    NN lit k tng bc : B1 : xc nh cc h s a, b, c B2 : kim tra xem a < > 0 khng ? nu a = 0 th quay li B1 B3 : Tnh = b2 - 4ac B4 : nu < 0 th thng bo " PTVN" v chuyn n B8 B5 : nu = 0 th tnh x1 = x2 = -b/2a v chuyn B7 B6 : nu > 0 th tnh x1 = (- b + sqrt())/2a v (- b - sqrt())/2a v chuyn B7 B7 : Thng bo cc nghim x1, x2 B8 : kt thc GT - NN lp trnh : my tnh hiu c GT, ta s dng mt ngn ng lp trnh c th din t GT thng qua ngn ng , c th trong gio trnh ny l ngn ng C. II. Cng c biu din gii thut : Da trn ngn ng lp trnh C II.1 Cc lnh vo ra : printf() : xut d liu Printf() + scanf(..) : nhp d liu II.2 Lnh tnh ton : . II.3 Lnh iu khin : (i) if (Biu thc logic) ;

    [ else ;]

    (ii) switch (biu thc nguyn) { case N1: Lenh1; break ; case N2: Lenh2; break ; [default : Lenh;] break ; }

    iii) for (bt1; bt2; bt3) Lenh ; iv) while (Biu thc logic) ; v) do Lenh ;

    while (biu thc logic); * Ch : Lnh break ; thot khi vng lp trong cng. Lnh continue ; b qua phn cn li trong vng lp v thc hin vng lp tip theo. II.4 Khai bo: bin, hng, kiu d liu, hm, th tc ... II.5 Hm v chng trnh : Mt chng trnh C bao gm nhiu hm. Hm l mt n v c lp, khp kn.Hm main() l hm bt buc ca chng trnh. * Ch : - Mt hm khng c bao gm cc hm khc.

    - Trnh dng bin ton cc trong hm - Cc bin trong mi hm ch c s dng trong ni b hm .

    - Cc gii thut trong gio trnh ny c trnh by di dng hm.

    S

    S

  • Gio trnh cu trc d liu v gii thut 5

    Phan on Ngc Phng

    III. Chng trnh qui : Khi nim: Chng trnh (CT) qui l chng trnh c cha li gi n chnh bn thn n, ngha l chng trnh qui thc hin sau khi thc hin bn sao ca chnh n iu kin lp CT qui : + Khi bi ton c th pht biu thng qua chnh bn thn n, nhng vi kch thc nh hn + Kch thc ca bi ton bng cch ny hay cch khc phi tr thnh tham s (gin tip hoc trc tip) * Ch : - Khi gp CT qui ta phi phn bit c cc trng hp suy bin v trng hp qui (trng hp suy bin khng gi qui na) - CT qui c hiu sut km hn so CT khng qui, tuy nhin CT qui n gin v d hiu hn V d 1: Tnh giai tha ca mt s nguyn >=0. Pht biu bi ton: giaithua(n) = 1, khi n=0 // trng hp suy bin giaithua(n) = n * giaithua(n-1), khi n>0 // trng hp qui CT qui: long giaithua(int n) { if (n = = 0) return 1; else return (n * giaithua(n-1)) ; } V d 2: Tm c s chung ln nht ca hai s nguyn dng a va b. Pht biu bi ton: USCLN(a, b) = b , nu (a % b = = 0) // trng hp suy bin USCLN(a, b) = USCLN(b, a % b), nu (a % b != 0) // trng hp qui CT qui: int uscln(int a, int b) { if (a % b = = 0) return b; else return (uscln(b, a % b); } Bi tp : 1) c chng 1 v 3 sch CU TRC D LIU v GII THUT ca xun Li. IV. phc tp ca gii thut (GT) : IV.1 Khi nim : Tmh hiu qu ca GT bao gm hai yu t c bn: - Khng gian nh cn thit cho nhng d liu vo, cc kt qu tnh ton trung gian v cc kt qu ca GT. - Thi gian cn thit thc hin GT (ta gi l thi gian chy CT). Vic nh gi hai yu t trn s cho ta c s xc nh gii thut no l tt hn. Tuy nhin hai yu t trn li hay mu thun nhau: tt v thi gian thng li khng tt

  • Gio trnh cu trc d liu v gii thut 6

    Phan on Ngc Phng

    v khng gian v ngc li. V vy trong thc t i vi tng loi bi ton, mt trong hai yu t s c coi trng hn. Thng thng thi gian thc hin GT vn c ch hn; v vy sau y ta s xt vic nh gi thi gian thc hin GT. C hai cch tip cn nh gi thi gian thc hin ca mt GT. Thi gian chy chng trnh ph thuc vo cc yu t chnh sau: (1) Cc d liu vo. (2) chng trnh dch chuyn chng trnh ngun thnh m my. (3) Tc thc hin cc php ton ca my tnh c s dng chy chng trnh. Thi gian thc hin GT chu nh hng ca nhiu yu t. V vy ta khng th tnh chnh xc thi gian bng pht, giy, ... nh cch o thi gian thng thng. Trong phng php l thuyt, ta s coi thi gian thc hin GT ph thuc vo kch thc ca d liu vo hay ni cch khc n nh l hm s ca c d liu vo. C d liu vo l mt tham s c trng cho d liu vo, n c nh hng quyt nh n thi gian thc hin chng trnh. Thng thng c ca d liu vo l mt s nguyn dng n. Ta s s dng hm s T(n), trong n l c d liu vo, biu din thi gian thc hin ca mt GT. Thi gian thc hin ca mt GT khng nhng ph thuc vo c d liu m cn ph thuc vo d liu c bit. Chng hn, ta xt bi ton tm kim mt i tng x trn mt danh sch n phn t. Nu xem T(n) l s php so snh, ta c T(n) l cc php ton s cp. Php ton so snh chui k t khng th xem l php ton s cp v thi gian thc hin ph thuc vo di ca chui. Tm li, phc tp ca GT l thi gian thc hin GT . GT A vi kch thc u vo l n th thi gian thc hin GT c biu din l T(n) v c phc tp l O(f(n)) nu tm c 1 hng c sao cho: T(n) = n0 IV. 2 Cch tnh phc tp :

    Q1 : mt lnh c thi gian thc hin khng ph thuc vo u vo th lnh c phc tp l O(1) (hay thi gian thc hin l hng s)

    Q2 : Nu lnh b thc hin sau lnh a v nu a c phc tp O(f(n)) v b c phc tp O(g(n)) th phc tp tng cng l O(max( f(n), g(n) ) hay O(f(n), g(n)) = O(max(f(n), g(n))

    Q3 : Nu b lng trong a v a c phc tp l O(f(n)) v b c phc tp l O(g(n)) th phc tp l O(f(n)*g(n)) hay O(f(g(n))) = O(f(n)*g(n))

    Ghi ch : i khi phc tp ca GT ph thuc vo gi tr c th ca d liu, trong trng hp ny ta c th xt ti phc tp trong trng tt nhp, ti nht v phc tp bnh qun

  • Gio trnh cu trc d liu v gii thut 7

    Phan on Ngc Phng

    phc tp l n.0(1) = 0(n) phc tp l n.0(n) = 0(n2)

    i s thay i 1, 2, 4, 8 cho n khi vt n. s php lp khi l 1 + |log2n| . Do phc tp thi gian l : 0(log2n)

    S php so snh cn dng tt c l 2(n-1) + 1 do phc tp l 0(n)

    IV.3 Mt s phc tp thng gp :

    K hiu ln Tn gi thng thng

    Cc php ton

    O(1) Hng gn, so snh O(logn) logarit tm nh phn O(n) Tuyn tnh tm tuyn tnh

    O(nlogn) nlogn QuickSort, TreeSort...

    O(n2) bnh phng SX chn, SX chn...

    O(n3) lp phng a thc bc 3 O(2n) m (lu tin)

    V d: *) Xt on chng trnh sau : for (i = 0; i

  • Gio trnh cu trc d liu v gii thut 8

    Phan on Ngc Phng

    0. Tng quan: 0.1 M hnh quan nim : Mng l 1 dy c th t (v mt v tr) cc phn t vi 2 c im sau: - S lng phn t c nh - Mi phn t u c cng kiu d liu (d liu c s ca mng ) 0.2 Cu trc lu tr : Cc phn t c b tr st nhau trong b nh v theo th t tng dn ca cc ch s nn d dng tm c a ch ca 1 phn t bt k nu bit ch s:

    Loc(a[i]) = a0 + (i-1) * l a0 l a ch ca phn t th nht ; l l di 1 nh (byte) 0.3 Cc c trng c bn : + Cho php truy cp ngu nhin n tng phn t. Thi gian truy cp n mi phn t u bng nhau. + S lng phn t ca mng l c nh. Vic b sung v loi b phn t l kh khn (mt thi gian) 0.4 Cc php ton c bn : To mng, duyt mng, tm kim, sp xp, trn mng, tch mng I. To mng: I.1 Khai bo: - C php: Tnmng[s phn t ln nht] hoc Tnmng[] - Khai bo mng s nguyn: int m[50] ; hoc int m[] ; - Khai bo mng sinh vin c ti a 100 sinh vin:

    struct sv { char malop[5]; char hoten[25]; float diem[3]; } danhsach[100];

    I.2 Nhp mng: *) Nhp mng s nguyn t bn phm: void nhapmang(int *m,int *n) { int i; printf("\n Cho biet so phan tu cua mang :"); scanf("%d",n); for (i=0;i

  • Gio trnh cu trc d liu v gii thut 9

    Phan on Ngc Phng

    void nhapmang_ngaunhien(int *m,int *n) { int i; printf("\n Cho biet so phan tu cua mang :"); scanf("%d",n); randomize(); for (i=0;i

  • Gio trnh cu trc d liu v gii thut 10

    Phan on Ngc Phng

    GT : duyt mng a, khi thm 1 PT th ty iu kin m sa li gi tr ca Sa, Sd, So void tong(int *a,int n) { int i,Sa, Sd, So;

    Sa = 0 ; Sd = 0 ; So = 0 ; for (i=0;i 0 then Sd = Sd + 1 Else So = So + 1 ; printf("Tong cac phan tu am la:%4d",Sa); printf("Tong cac phan tu duong la:%4d",Sd); printf("Tong cac phan tu bang khong la:%4d",So); } V d 2 : a l ma trn nguyn cp n x n ;Tnh tng cc PT trn ng cho chnh ca a. GT : c 2 phng n : PA1 : duyt ton b ma trn a ri kim tra nu thuc ng cho chnh th cng dn vo S. PHC TP l O(n2) PA2 : duyt cc PT trn ng cho chnh m thi. PHC TP l O(n) II.3 Duyt t do : GT : duyt cc PT theo 1 trnh t logic sao cho mi PT u c thm v khng c PT no c thm qu 1 ln. V d : Lp ma trn xon cp m x n. GT : < cho aij = 0 , vi bt k i,j > Khi ng : i =1, j = 1 , s = 1 , a[i,j] = 1 (i, j) : ta ca im hin ti s l gi tr ca aij v l phn t gieo while (s < m * n) { while (( j + i } III. Tm kim tun t: III.1 Bi ton : Cho mng s nguyn int a[30];; v mt s nguyn x. Tm ch s i a[i] = x III.2 GT c bn : - Bt u t PT u tin - tm cch i sang phi : nu tha mn 2 iu kin cha vt qu gii hn mng v PT ang xt khc vi x - Ty theo v tr ca phn t ang xt ta c kt lun : hoc c li gii l ch s phn t ang xt, hoc khng c li gii, ta qui c li gii = 0 trong trng hp ny

  • Gio trnh cu trc d liu v gii thut 11

    Phan on Ngc Phng

    GT : i := 0 ; { i l ta ca phn t hin ti} While ((i < n) && (a[i] != s)) i = i + 1 ; {sang phi} Nu i < n --> li gii = i+1 Ngc li li gii = 0 {qui c} Ci t : int tktt(int a[],int x) { int i=0; while (i n php so snh O(n) - Bnh qun cn (n+1)/2 php so snh --> O(n) III.3 K thut dng phn t cm canh :

    - mc tiu : n gin ha iu kin vng lp, c th loi b iu kin i < n - cch lm : mn thm 1 phn t na l a[n] v t a[n] = x , khi a[n] c gi l PT cm canh - nh gi : tng ng k tc thc hin vng lp nhng tn km thm 1 nh

    int tktt_camcanh(int a[],int x) { int i=0;a[n]=x; while (a[i]!=x) i++; if (i

  • Gio trnh cu trc d liu v gii thut 12

    Phan on Ngc Phng

    Ngc li nu s < a[g] th s khng th thuc on a[g..r] bi ton qui v tm s trn on a[l..g-1] Ngc li s khng thuc a[l..g] bi ton qui v tm s trn on a[g+1..r] GT mc 1 : (khng qui) 1) l =0 ; r = n ; g = (l + r) / 2 ; 2) while ((l s)) { nu s < a[g] th r = g - 1 ngc li l = g + 1 ; g = (l + r) / 2 ; } 3) Nu l =start); if (found) return i+1; else return 0; } IV.3 PHC TP ca GT : - Cas tt nht xy ra khi s = a[n/2] --> PHC TP l O(1) { 1 php so snh } - Trng hp xu nht : xy ra khi s khng thuc a[start..end], lc ny cn 1 + log2n php so snh --> PHC TP l O(log2n) - PHC TP bnh qun l O(log2n) V. Tm kim bng phng php ni suy : V.1 iu kin p dng : - Dy a[l..r] c th t - Cc gi tr kha (ai) phn b u trn on a[l..r] V.2 Gii thut : tng ng tm kim nh phn nhng gi tr g c xc nh theo cng thc : g = (s - a[r]) (r - l + 1) / (a[r] - a[l] +1) PHC TP c chng minh l : O(log2(log2n)) VI. Sp xp bng phng php chn (Selection Sort) :

  • Gio trnh cu trc d liu v gii thut 13

    Phan on Ngc Phng

    VI.1 Bi ton : Cho mng a[n]. Cn hon v cc PT ca mng a chng tr thnh c th t tc l a0

  • Gio trnh cu trc d liu v gii thut 14

    Phan on Ngc Phng

    VI.3 Ci t : void selectionsort(int *a, int n) { int i,j,k; for (i=0;i PHC TP l O(n2) + Nhn xt : S lng php hon v ti thiu so vi mi GT sp xp. Suy ra trong nhng trng hp kch thc d liu (kch thc 1 phn t a[i]) l rt ln so vi kch thc kha (tc l phn d liu c so snh) th sp xp chn l phng php tt. VII. Sp xp bng phng php chn (Insertion Sort) : VII.1 Gii thut : * Mc 0 : - Ly PT u tin ca dy ngun v chn PT vo dy ch sao cho dy ch c th t - Lp li bc trn cho n khi dy ngun "cn" * Mc 1 : SX dy a[0..n-1] qua n -1 bc, vi i = 0, n -2 bc th i : + Tnh trng : - dy ch l a[0..i] gm nhng phn t c th t ni b - dy ngun a[i +1..n] gm cc phn t cha c xem xt + Thao tc : - Ly phn t u tin khi dy ngun x = ai+1 . V tr th i +1 c xem l l hng v c php vo dy ch - Chn x vo v tr thch hp ca dy ch a[0..i +1] dy ch c th t Minh ha: Ta cn sp xp dy s sau: 44 55 12 42 94 18 6 67 i = 0 44 : 55 12 42 94 18 06 67 i = 1 44 55 : 12 42 94 18 06 67 i = 2 12 44 55 : 42 94 18 06 67 i = 3 12 42 44 55 : 94 18 06 67

  • Gio trnh cu trc d liu v gii thut 15

    Phan on Ngc Phng

    i = 4 12 42 44 55 94 : 18 06 67 i = 5 12 18 42 44 55 94 : 06 67 i = 6 06 12 18 42 44 55 94 : 67 06 12 18 42 44 55 67 94 VII.2 Ci t : void insertionsort(int *a, int n) { int i,j,x; for (i=0;i0) && (x

  • Gio trnh cu trc d liu v gii thut 16

    Phan on Ngc Phng

    i = 0 1 2 3 4 5 6 7 44 06 06 06 06 06 06 06 55 44 12 12 12 12 12 12 12 55 44 18 18 18 18 18 42 12 55 44 42 42 42 42 94 42 18 55 44 44 44 44 18 94 42 42 55 55 55 55 06 18 94 67 67 67 67 67 67 67 67 94 94 94 94 94

    VIII.2 Ci t : void bublesort() { int i,j,k; for (i=0;ii;j--) { if (a[j-1]>a[j]) { k=a[j-1]; a[j-1]=a[j]; a[j]=k; } } } VIII.3 Nhn xt : - phc tp: O(n2) - Cn chnh xc (n -1) + (n - 2) + ... + 1 = n(n -1) / 2 - Cn ti thiu 0 php hon v, ti a n(n -1) / 2 php hon v - Trung bnh : chm hn sp xp chn v chn IX. Sp xp bng phng php phn hoch ( QuickSort ) : IX.1 Bi ton phn hoch : Cho dy a[ l..r ] , cn phn hoch dy thnh 2 dy con sao cho 1 PT bt k ca dy con bn tri

  • Gio trnh cu trc d liu v gii thut 17

    Phan on Ngc Phng

    SX dy a[l..r] ta phn hoch thnh 2 dy con vi tnh cht nh trn, sau tin hnh SX ring dy con tri v dy con phi cng bng cch thc trn. Qu trnh SX chm dt khi dy con cn SX cn t hn 2 PT. Minh ha: Ta cn sp xp dy s sau: 44 55 12 42 94 18 06 67 Ta qui c chn kha cht l s gia ca dy, c th l

    x=a[(i+j)/2]= 42 vi i=l v j=r Sau y l din bin ca mt bc u: i j 44 55 12 42 94 18 06 67 06 55 12 42 94 18 44 67 06 18 12 42 94 55 44 67 (dng v i > j) j i Nh vy dy s c chia lm hai phn on v 42 ng v tr ca n. Qu trnh s c lp li tng t vi tng phn on cho n khi dy s c sp xp hon ton. Mi ln dy c phn thnh hai dy con th vic x l tip theo s c thc hin hoc bng gii thut lp (dng stack) hoc bng gii thut qui. IX.3 Ci t gii thut qui: void sort(int l, int r) { int i,j,x,w; i=l; j=r; x=a[(i+j)/2]; do { while (a[i]x) j--; if (i

  • Gio trnh cu trc d liu v gii thut 18

    Phan on Ngc Phng

    void quicksort() { sort(0,n-1); } IX.4 Nhn xt GT QuickSort : 1. Ti im 1) khng th thay kin a[i] < x v a[j] > x bng k a[i] = x v x l PT cm canh cho qu trnh duyt ca i&j (vd mng 5 5 5 5 5 i&j s i qu gii hn mng ) 2. Ti k i PHC TP l O(nlog2n) + Trng hp ti nht xy ra khi ta lun chn phi x l PT ln nht hoc nh nht. Lc ny bi ton cp n qui v bi ton cp n -1 sau n php so snh. Vy PHC TP l O(n2) + Trng hp bmh qun : PHC TP l O(nlog2n) 4. Ci tin : + Khi n nh (n < 20) chuyn sang phng php chn hoc chn + Kh qui bng cch dng ngn xp + Ci tin cch tm phn t cht ( ly trung v l 3 phn t u, cui v gia ) X. Chn, xo phn t trong mng: X.1 Chn 1 phn t vo mng: Bi ton: Cho mng s nguyn a[0..n-1]. Chn mt phn t vo sau mt phn t x cho trc trong mng. Nu x khng c trong mng th s khng chn. S c chn s c ly ngu nhin. void chen(int *a,int *n) { int i=0, x; printf("\nCho biet so can chen sau:"); scanf("%d",&x); randomize(); while (i

  • Gio trnh cu trc d liu v gii thut 19

    Phan on Ngc Phng

    X.2 Xo phn t trong mng: Bi ton: Cho mng s nguyn a[0..n-1]. Hy xo phn t c d liu l x c trong mng vi x c nhp t bn phm. void xoa(int *m,int *n) { int i=0, x; printf("\nCho biet so can xoa:"); scanf("%d",&x); while (i=b) break; if (m[i1]< a[i2]) { c[i]=m[i1]; i1++; } else { c[i]=a[i2]; i2++;

  • Gio trnh cu trc d liu v gii thut 20

    Phan on Ngc Phng

    } } if (i1

  • Gio trnh cu trc d liu v gii thut 21

    Phan on Ngc Phng

    Chng 3 Danh sch lin kt (DSLK) I. Tng quan v danh sch lin kt : I.1 Khi nim : DSLK l danh sch gm nhiu phn t (PT) tha mn iu kin : - Cc PT u thuc cng mt kiu d liu. - Mi PT ngoi phn d liu bn thn n cn cha thng tin v v tr ca PT ng ngay sau n. - V tr ca PT u tin c bit. PT u tin c i din cho ton b danh sch. * Ch : Ta chp nhn 1 danh sch c bit gi l danh sch rng, l danh sch khng cha PT no. PT cui cng ca DS phi cha thng tin c bit nhm th hin r vn ny I.2 Biu din : * Mi PT s c : - Phn d liu ( n gin l 1 s nguyn - kha ) - Phn thng tin v v tr tip theo ca PT th hin bng con tr. Gi tr NULL c s dng cho PT cui * Danh sch s c i din bng 1 con tr ( tr n PT u) Con tr NULL c s dng cho DS rng. typedef struct node *nodep; typedef int infotype; struct node { infotype data; nodep next; }; nodep L ; I.3 Cc c im c bn : 1. Truy cp tun t n cc phn t (mun truy cp phn t th k th phi duyt qua k -1 phn t trc n) 2. Thun li cho vic thm, bt PT II Cc php ton trn danh sch : II.0 Lp DS rng : void init(nodep *L) { *L = NULL; }

    Data

    Next

    Data

    Next

    Data

    Next

    Data

    Next

    Data

    NULL

    L

  • Gio trnh cu trc d liu v gii thut 22

    Phan on Ngc Phng

    II.1 Kim tra DS rng : int IsEmptyList (nodep L) { if (L = = NULL) return 1 ; else return 0; } II.2 To danh sch: void taodsFiFo(nodep *L) // nhp ngu nhin trong [0,100) { nodep p,tmp; char tl; randomize();init(L); printf("\n Bam fim bat ky de nhap, Bam ESC de thoi"); do { p=(nodep)malloc(sizeof(struct node)); p->data=random(100); p->next=NULL; if (*L==NULL) *L=p; else tmp->next=p; tmp=p; tl=getch(); } while (tl!=27); } II.3 Duyt danh sch (DS): 1 Bi ton : Cho danh sch L, cn phi thm cc phn t ca DS ny, mi phn t thm 1 ln 2 Gii thut : Ln lt thm cc PT theo ng th t trong danh sch 3. Ci t chng trnh xem DS: void xemds(nodep L) { nodep p; p=L; while (p!=NULL) { printf("%4d",p->data); p=p->next; } printf("\n");getch(); } V d : Vit chng trnh tnh tng cc PT ca 1 danh sch L cho trc int tong(nodep L) { int T ; T := 0;

  • Gio trnh cu trc d liu v gii thut 23

    Phan on Ngc Phng

    While (L) { T = T + L->info ; L := L->next ; } return T; } int tong(nodep L) { if (L = = nil) return 0 ; else return(L->info + tong(L->next)) ; } II.4 Thm 1 phn t (PT) vo danh sch (DS) : II.4.1 Thm 1 phn t vo pha sau 1 phn t ca DS : 1. Bi ton : Cho DS L v p l 1 PT ca DS. Cn thm 1 PT c kha = e vo ngay sau PT p ( ch : PT p chnh l con tr tr ti PT ) 2. Gii thut : (i) Nu L = NULL th phn t thm vo thnh phn t duy nht ca DS - cp pht b nh cho 1 PT ( gi l q ) - a e vo q - Cho L tr ti q ( xc nh l PT u tin ca DS ) - Cho q^.next = NULL ( xc nh l PT cui ca DS ) (ii) Nu L < > NULL - cp pht b nh cho 1 PT ( gi l q ) - a e vo q - Lin kt q vi PT sau p - lin kt p vi q 3. Ci t : void insert_after(infotype e,nodep p,nodep *L) { nodep q; q=(nodep)malloc(sizeof(struct node)); q->data=e; if (L== NULL) { L=q; q->next=NULL; } else { q->next = p->next; p->next = q; } } II.4.2 Thm 1 phn t (PT) vo pha trc 1 PT ca DS : 1. Bi ton : Thm PT c kha e vo pha trc PT p ca DS L.

  • Gio trnh cu trc d liu v gii thut 24

    Phan on Ngc Phng

    2. Gii thut : ( Trng hp L != NULL ) - nodep q; q=(nodep)malloc(sizeof(struct node)); q->data=e; - Thm PT q vo sau p nh trng hp trn - Hon v phn d liu ca p v q

    II.4.3 Thm 1 PT vo v tr th k trong DS : 1. Bi ton : Thm PT c kha e vo v tr th k ca DS L vi k l tham s ca hm. 2. Gii thut: - Tm con tr tt v t ln lt tr vo PT th k-1 v th k - Nu chn c th: + p=(nodep)malloc(sizeof(struct node)); p->data=e; + Nu (k==1) /* chn vo v tr u tin */ th { p->next=t; *L=p; } + Ngc li nu(t==NULL) /* chn vo v tr cuI */ th { p->next=NULL; tt->next=p;} + Ngc li /* chn vo gia */ th { p->next=t; tt->next=p;} - Ngc li th khng chn c (k s PT ca DS +1) 3. Ci t: void insert_mid(infotype e,int k, nodep *L) { nodep p,tt,t; int i=1; t=*L; p=(nodep)malloc(sizeof(struct node)); p->data=e; while(t!=NULL && inext; } if (i==k) { if (k==1) { p->next=t; *L=p; } else if (t==NULL) {

  • Gio trnh cu trc d liu v gii thut 25

    Phan on Ngc Phng

    p->next=NULL; tt->next=p; } else { p->next=t; tt->next=p; } } else printf("\n Khong chen duoc !"); } II.5 Loi b phn t (PT) ra khi DS : II.5.1 Loi b PT ng sau PT p ca DS L : 1. Bi ton : Loi b PT ngay sau phn t p khi DS L 2. Gii thut : (i) Nu L = NULL hoc khng c PT sau p th khng xo c, hm tr v 0 (ii) Ngc li : - t q = PT sau p - ni p vi PT sau q - hm tr v q->data - gii phng q 3. Ci t : int ListDel ( nodep L, nodep p) { nodep q ; if ((L = = NULL) || (p->next = = NULL)) return 0; else { q = p->next ; p->next = q->next ; return (q->data) ; free(q) ; } } II.5.2 Loi b PT th k khi DS L : 1. Gii thut : Cc trng hp : + Tm tp v p ln lt tr vo PT th k-1 v th k + Nu (p= =NULL) th khng xo c v ks phn t ca DS + Ngc li: - nu (k= =1) L = p->next / xo PT u tin */ - ngc li tp->next = p->next /* xo PT gia hoc PT cui */ + Gii phng vng nh cho p 2. Ci t : void del(int k,nodep *L) { int i=1;

  • Gio trnh cu trc d liu v gii thut 26

    Phan on Ngc Phng

    nodep p,tp; p=*L; while (p!=NULL && inext; } if (p==NULL) printf("\n Khong co de xoa"); else { if (k==1) *L=p->next; else tp->next=p->next; } free(p); } III.Danh sch lin kt (DSLK) hai chiu : III.1 nh ngha : DSLK hai chiu cng ging nh DSLK mt chiu nhng ch khc l trong mi bn ghi ngoi phn d liu cn c 2 trng con tr : mt con tr gi a ch ca bn ghi lin trc n gi l lin kt ngc (pred) v mt con tr tr vo bn ghi lin sau n, gi l lin kt thun (next). Mi phn t ca danh sch lin kt hai chiu c dng:

    III.2 Khai bo :

    { khai bo d liu } typedef struct node *nodep; typedef int infotype; struct node { infotype data; nodep next, pred; }; nodep F, L;

    pred data next

    F

    NULL

    Data

    Next

    pred

    Data

    Next

    pred

    Data

    NULL

    L

    pred

    Data

    Next

  • Gio trnh cu trc d liu v gii thut 27

    Phan on Ngc Phng

    To DSLK hai chiu rng: void init(nodep *F,nodep *L) { *F=NULL; *L=NULL; } III.3 To DSLK hai chiu : * Gii thut : - To DS rng - Lp li cho n khi thi .To mt con tr p v nhp d liu cho p . Gn p^.pred = p^.next = NULL ; . Ni p vo DS * Ci t : void taods2chieu(nodep *F, nodep *L) { nodep p; char tl; randomize(); printf("\n Bam fim bat ky de nhap, Bam ESC de thoi"); do { p=(nodep)malloc(sizeof(struct node)); p->data=random(100); printf("%4d",p->data); p->next=p->pred=NULL; if (*F==NULL) *F=p; else { (*L)->next=p; p->pred=*L; } *L=p; tl=getch(); } while (tl!=27); printf("\n"); } III.4 Duyt DSLK : * Gii thut : - Gn p = F ; - Lp li cho n khi p = NULL . data> . p = p^.next ; * V d : . Chng trnh Xem thun hoc Xem ngc . Chng trnh tnh tng cc phn t trong DS s nguyn . Chng trnh in ra cc bn ghi tha iu kin no * Ci t : void xemthuan(nodep F) { nodep p; p=F; while (p) {

  • Gio trnh cu trc d liu v gii thut 28

    Phan on Ngc Phng

    printf("%4d",p->data); p=p->next; } printf("\n");getch(); } void xemnguoc(nodep L) { nodep p; p=L; while (p) { printf("%4d",p->data); p=p->pred; } printf("\n");getch(); } III.5 Chn mt phn t mi vo DS ti v tr th k : * Gii thut : - Tm hai con tr tp v p ln lt tr vo phn t th k-1 v th k - Nu khng chn c (i!=k) th thng bo " Khng chn c " - Ngc lai nu chn c th .To con tr q v nhp d liu cho q . Gn q->pred = q->next = NULL . nu (k = = 1 0 th (1) . ngc li nu (p = =NULL) th (2) . ngc li th (3) (1) : q->next = F; F->pred = q; F = q;

    (2) : q->pred=L; q->next=NULL; L->next=q; L=q; (3) : q->pred=tp; q->next=tp->next ; tp->next=q; p->pred=q; * Ci t : void chenk(infotype e,int k, nodep *F,nodep *L) { nodep q,tp,p; int i=1; p=*F; while(p!=NULL && inext; } if (i==k) /*chn c */ { q=(nodep)malloc(sizeof(struct node)); q->data=e; if (k==1)

  • Gio trnh cu trc d liu v gii thut 29

    Phan on Ngc Phng

    { q->pred=NULL; q->next=*F; (*F)->pred=q; *F=q; } else if (p==NULL) { q->next=NULL; q->pred=*L; (*L)->next=q; *L=p; } else { q->pred=tp; q->next=tp->next; tp->next=q; p->pred=q; } } else printf("\n Khong chen duoc !"); getch(); } III.6 Xo phn t th k trong DS : * Gii thut : - Tm hai con tr tp v p ln lt tr vo nt th k-1 v th k - Nu khng xa c ( p = = NULL ) th thng bo " Khng xo c " - Ngc li nu xa c th . Nu (k = = 1) th (1) . ngc li nu (p = = pc) th (2) . ngc li th (3)

    (1) : F=p->next ; F->pred=NULL ; (2) : L=p->pred ; L->next=NULL ; (3) : q= p->next ; tp->next = q ; q->pred = p->pred ;

    * Ci t : void xoak(int k,nodep *F,nodep *L) { nodep p,q,tp; int i=1; if (knext;

  • Gio trnh cu trc d liu v gii thut 30

    Phan on Ngc Phng

    (*F)->pred=NULL; } else { while(p!=NULL && inext; } if (p->next==NULL) { *L=p->pred; (*L)->next=NULL; } else { q=p->next; tp->next=q; q->pred=p->pred; } } free(p); } IV. Danh sch lin kt vng: IV.1 nh ngha: Danh sch lin kt vng l mt danh sch lin kt m phn t cui cng (Last) ch vo phn t u tin (First) ca danh sch. First IV.2 Cc php ton trn danh sch: Cc php ton trn danh sch lin kt vng cng tng t vi cc php ton trn danh sch n. Tuy nhin khi s dng cc gii thut ca danh sch lin kt n ta cn phi ch l vng lin kt ca phn t cui cng ch vo phn t u tin ca danh sch m khng ch vo NULL. Phn t u First by gi khng cn c ngha tht s v n c th ch dng truy nhp vo mt phn t bt k ca danh sch lin kt vng m thi. Danh sch lin kt vng thch hp vi cc php tch v php ghp danh sch.

    Last

  • Gio t

    Phan

    Ch A. NgI .KhNgn Trongc * Ch + Troxp ngtm + ngcII. C

    II.1 K#defint int II.2 Kvoid{ top} II.3 Kint { ret}

    trnh cu trc

    on Ngc

    ng 4

    gn xp (Sti nim : xp l 1 DS

    g trng hpxc nh b

    : ong lp trnhgi lp trn cc phpi vi ngn xc li. Do vc php to

    Khai bo : fine max s[max+1]top;

    Khi to : d initS()p=-1;

    Kim tra ngemptyS()turn (top

    c d liu v

    c Phng

    NG

    tack) :

    S c bit mp ny u Di PT nh n

    h ngn xp nh khng cp ton c thxp nhng y ngn xpn trn ng

    100 ];

    )

    n xp rng) p==-1);

    gii thut

    N XP

    m php b DS s c ny.

    c coi ln bit n

    h tin hnhPT c cn c tn n xp dn

    g:

    31

    V HN

    sung v logi l nh

    l 1 CTDLn cu trc bh i vi nga vo u gi l kiu

    ng mng:

    NG I

    i b ch ch ca ngn x

    L tru tnn trong ca

    gn xp. tin th s

    u LIFO (Las

    th tin hxp v ngn

    ng do khia ngn xp

    c ly ra st In First O

    nh u Dn xp hon t

    i s dng ngm ch qua

    sau cng vOut)

    DS. ton

    gn an

  • Gio trnh cu trc d liu v gii thut 32

    Phan on Ngc Phng

    II.4 Kim tra ngn xp y: int full() { return (top==max); } II.5 Thm phn t vo ngn xp : (iu kin l NX cha y) int push(int value) { if (top

  • Gio trnh cu trc d liu v gii thut 33

    Phan on Ngc Phng

    printf("\n Khong du bo nho"); exit(1); } else s->next=NULL; return s; } III.3 Kim tra tnh rng ca NX : Hm tr v ng nu NX rng, sai nu ngc li int emptyS(stack s) { return (s->next==NULL); } III.4 y 1 PT vo ngn xp : B sung PT c gi tr vo nh ca NX void push(infotype e, stack s) { nodep tmp; tmp=(nodep) malloc(sizeof(struct node)); if (tmp!=NULL) { tmp->data=e; tmp->next=s->next; s->next=tmp; } } III.5 Ly 1 PT khi ngn xp : Lai b 1 PT khi nh NX v ly gi tr ca PT ny vo bin t. void pop(infotype *t,stack s) { nodep cell; if (!emptyS(s)) { cell=s->next; *t=cell->data; s->next= cell->next; } } III.6 Xem gi tr ca PT nh NX : tng t nh hm Pop nhng PT nh khng b loi b khi NX void peep(infotype *t,stack s) { nodep cell; if (!emptyS(s)) {

  • Gio trnh cu trc d liu v gii thut 34

    Phan on Ngc Phng

    cell=s->next; *t=cell->data; } } IV. ng dng ca ngn xp : IV.1 Bi ton i 1 s nguyn dng c s 10 sang c s 2 *) GT : - nhp n, khi ng NX rng - lp li + chia n cho 2 v a phn d vo NX + t n = n/2 cho n khi n = 0 - D cc PT khi NX v in ra mn hnh *) Ci t : void chuyendoi(int s) { int r; printf("\n Dang nhi phan cua %d la:" ,s); initS(); while (s>=1) { r=s%2; push(r); s/=2; } while (!emptyS()) { pop(&r); printf("%d",r); } getch(); } IV.2 Tnh gi tr ca biu thc hu t : a) Cc khi nim : - Gi s t l php ton 2 ngi th c 3 cch th hin thao tc p t php ton t trn 2 ton hng a, b - Dng k php trung t (php ton gia ) : a t b - tin t : t a b - hu t : a b t Trong k php hu t cn c gi l k php nghch o Ba Lan v tng ng vi 3 k php trn ta s c 3 biu thc khc nhau : bt trung t tin t hu t V d :

    Biu thc trung t Biu thc hu t 5 + 3 5 3 + 3 + 7 + 9 3 7 + 9 +

  • Gio trnh cu trc d liu v gii thut 35

    Phan on Ngc Phng

    3 + 7 * 9 3 7 9 * + 3 * (7 + 9) 3 7 9 + * b) Gii thut tnh gi tr biu thc hu t : (1) Khi ng NX S (2) Lp li khi cha c ht biu thc - c 1 PT ca biu thc vo x - nu x l ton hng th y x vo NX - ngc li : . d b khi NX . d a khi NX . y a x b vo NX (3) Nu trong NX cn 1 PT th l kt qu * Ch : Nu bc d a hoc d b ngn xp b rng (cn) hoc nu bc (3) NX c nhiu hn 1 PT th chng t biu thc hu t b sai c) Ci t: int tinh(char x,int a,int b) { int t; switch(x) { case '+': t=a+b; break; case '-': t=a-b; break; case '*': t=a*b; break; case '/': t=a/b; break; } return t; } void gtbtht(char st[]) { int a,b,ok=1,i=0,l=strlen(st); char x; initS(); while (i='0' && x

  • Gio trnh cu trc d liu v gii thut 36

    Phan on Ngc Phng

    else if (x>=42 && x

  • Gio trnh cu trc d liu v gii thut 37

    Phan on Ngc Phng

    stack1 next; }; stack1 initS1() { stack1 s; s=(stack1) malloc(sizeof(struct node1)); if (s==NULL) { printf("\n Khong du bo nho"); exit(1); } else s->next=NULL; return s; } int emptyS1(stack1 s) { return (s->next==NULL); } void push1(infotype1 e, stack1 s) { stack1 tmp; tmp=(stack1) malloc(sizeof(struct node)); if (tmp!=NULL) { tmp->data=e; tmp->next=s->next; s->next=tmp; } } void pop1(infotype1 *t,stack1 s) { stack1 cell; if (!emptyS1(s)) { cell=s->next; *t=cell->data; s->next= cell->next; } } int douutien(char ch) { int t; switch(ch) { case '(': t=1;break;

  • Gio trnh cu trc d liu v gii thut 38

    Phan on Ngc Phng

    case '+': t=2;break; case '-': t=2;break; case '*': t=3;break; case '/': t=3;break; } return t; } void chuyen(char *tt,char **ht) { stack1 s; int error=0,ok,i=0,l=strlen(tt); char ptkt,ptbt; char *c="t"; s=initS1(); strcpy(*ht,""); while (i=42 && ptkt

  • Gio trnh cu trc d liu v gii thut 39

    Phan on Ngc Phng

    push1(ptkt,s); } else if(ptkt>='0' && ptkt

  • Gio trnh cu trc d liu v gii thut 40

    Phan on Ngc Phng

    - Khi thm vo hng trng hoc ang c rear = n th thm vo th nht ca hng VI.2 Khi to hng rng: void initq() { front=rear=size=0; } VI.3 Kim tra tnh rng v tnh y ca hng i : int emptyq() // rng { return (size==0) ; } int full() // y { return (size==max); } VI.4 Thm phn t vo hng : int push(int value) { if (size0) { *value=q[front++]; if (front>max) front=0; size--; } return *value; } VII Cc php ton trn hng i dng danh sch lin kt : VII.1 Khai bo H :

    NULL

  • Gio trnh cu trc d liu v gii thut 41

    Phan on Ngc Phng

    Front rear typedef struct node *nodep; typedef int infotype; struct node { infotype data; nodep next; }; struct queuerecord { nodep front,rear; }; typedef struct queuerecord queue; VII.2 To hng i rng : void init(queue *q) { (*q).front=NULL; (*q).rear=NULL; } VII.3 Kim tra tnh rng ca hng i : int empty(queue q) { return (q.front==NULL); } VII.4 a 1 PT vo hng i : void push(infotype NE,queue *q) { nodep p; p=(nodep)malloc(sizeof(struct node)); p->data=NE; p->next=NULL; if ((*q).front ==NULL) (*q).front=p; else ((*q).rear)->next=p; (*q).rear=p; } VII.5 Ly 1 PT ra khi hng i : void pop(infotype *DE,queue *q) { nodep p; if (!empty(*q)) { p=(*q).front; *DE=p->data; (*q).front=p->next; free(p);

  • Gio trnh cu trc d liu v gii thut 42

    Phan on Ngc Phng

    } } VIII. ng dng ca hng i : + Trong qu trnh chuyn biu thc trung t sang biu thc hu t ta c th s dng hng i lu tr biu thc hu t + Trong b m dng trong x l tp tin cng c th c ci t bng cch dng hng i + Minh ha ni dung ca NX sau mi (ln) khi thc hin php ton thuc dy : E X * A * * M P L * * E * * Trong mi ch ci i din cho php ton y ch ci vo NX cn du * i din cho php ton d PT ra khi NX { $ ngn xp rng }

    Dng Ngn xp Dng Hng i Php ton Ngn xp Php ton Hng i E $ E $ X $ E X E E $ * $ E X X E $ A $ E A * X $ * $ E A A X $ * $ * A $ M $ M * $ P $ M P M M $ L $ M P L P P M * * $ M P L L P M $ * $ M * L P $ E $ M E * L $ * $ M E E L $ * $ * E $

    VIII.1 Sp xp danh sch bng phg php dng hng i ( phng php RadixSort) * Gii thut : (1) To 10 hng i rng t Q[0] n Q[9] (2) Tm m l s ch s ca phn t ln nht ca danh sch (3) for ( i = 1; i Q9 - Tnh m = 3 { l chiu di ca s 468 }

  • Gio trnh cu trc d liu v gii thut 43

    Phan on Ngc Phng

    Q0 3 5 3 5 21

    52Q1 21 317 127Q2 52 21

    127 249

    Q3 3 317Q4 249 468Q5 5 52 Q6 468 Q7 127 317 Q8 468 Q9 249 * Ci t: void init10(mangq mq) { int i; for (i=0;i

  • Gio trnh cu trc d liu v gii thut 44

    Phan on Ngc Phng

    m=scs(maxx(A,n)); printf("m=%d",m);getch(); for (i=0;i

  • Gio trnh cu trc d liu v gii thut 45

    Phan on Ngc Phng

    Chng 5 CY I. Cc khi nim : + Cy l 1 tp hp gm cc phn t (PT) c cng kiu d liu, mi PT c gi l 1 nt. Mt nt ng ring c gi l 1 cy v nt cng l nt gc ca cy + Nu ta c cy T1, T2, T3,..., Tk vi cc gc ln lt l t1, t2, t3,..., tk v ta c 1 nt t khng thuc cc t k trn th ta c th lp 1 cy mi bng cch lin kt nt t vi t1, t2, t3,..., tk . Cy mi s c gc l t. + Chp nhn 1 cy c bit l cy rng tc l cy khng c nt no + Nt cha - nt con : nu c mt nt t c lin kt vi cc nt t1, t2, t3,..., tk th ta gi t l nt cha cn t1, t2, t3,..., tk l nt con. + Nt l - nt nhnh : mt nt khng c nt con gi l nt l, mt nt khng phi nt l, khng phi nt gc c gi l nt nhnh.

    + Bc : l s lng nt con ca nt . Bc ln nht ca cy gi l bc ca cy + Mc : Nt gc c mc l 1. Nu 1 nt c mc l i th cc con ca n s c mc l i +1 + Chiu cao ( su) : Mc ln nht trong cy c gi l chiu cao ca cy + Cy c th t : nu trong 1 cy ta quan tm n th t ca cc nt con ca 1 nt bt k th ta gi l cy c th t, ngc li th cy khng c th t + Nu c 1 tp hu hn cc cy phn bit th ta gi tp l rng II. Cy nh phn (Binary tree) : II.1 nh ngha : Cy nh phn l cy bc hai, c th t (mi nt c ti a 2 nt con) II.2 Biu din : typedef int infotype; typedef struct node *tree; struct node { infotype data; tree left,right; } ; Tree T;

    A

    B C

    D

    G

    E

    H

    F

    I

    K J

    Nt gc

    Nt nhnh

    Nt l

  • Gio trnh cu trc d liu v gii thut 46

    Phan on Ngc Phng

    * Ch : - Tng t nh mng v danh sch lin kt phn d liu ca 1 nt c th kh phc tp nhng ta tinh gin xung cn 1 s nguyn, s nguyn ny cn gi l kha ca 1 nt - Con tr left, right dng tr ti nt con bn tri v nt con bn phi. Tuy nhin left, right cng ng thi l con tr tr n cy con tri v phi. Nh vy c th coi left v right l cy con bn tri v cy con bn phi. II.3 Duyt cy :

    Ni dung duyt cy gm 3 vic chnh : Nu nh cy tn ti tc l cy khc rng, thc hin cc vic sau:

    + thm nt gc + duyt cy con bn tri + duyt cy con bn phi * 3 gii thut duyt cy : + Duyt theo th t trc ( Preorder ) : thm gc --> duyt cy tri --> duyt cy phi

    + Duyt theo th t gia ( Inorder ) : duyt cy tri --> thm gc --> duyt cy phi

    + Duyt theo th t sau ( Postorder ) : duyt cy tri --> duyt cy phi --> thm gc * Ci t th tc duyt gia ( qui) : void inorder(Tree T) { if (T) { inorder(T->left); printf("%4d",T->data); inorder(T->right); } } * Gii thut duyt cy T theo th t trc khng qui : + Khi to ngn xp rng + t p = T ; Ok = 1 ; + Lp li khi (p !=NULL v Ok) - data> - nu (p->right !=NULL) th y p->right vo NX - nu (p->left != NULL) th p = p->left - ngc li th

    . nu NX rng th Ok = 0 . ngc li th ly 1 phn t t NX v gi l p * Gii thut duyt cy T theo th t gia khng qui : + Khi to NX rng + t p = T ;

  • Gio trnh cu trc d liu v gii thut 47

    Phan on Ngc Phng

    + Lp li - chng no (p!=NULL) th . y p vo NX . p = p->left ; - nu NX khng rng th . ly 1 phn t t NX gi l p . data> . p = p->right . Ok = true - ngc li th Ok = False + cho n khi Ok = False * Ci t duyt cy T theo th t gia khng qui : void Inorder_khongDQ(Tree T) { Tree p; inits(s); p = T; do { while (p!=NULL) {

    push(p); p = p->left; }

    if (!emptys(s)) { pop(&p); printf("%4d",p->data); p=p->right; ok =1; } else ok = 0; } while (ok); } * Gii thut duyt cy T theo mc : (1) To hng i rng (2) a gc cy T vo hng i (3) Lp li khi H cha rng (a) ly 1 phn t x t hng i (b) Thm x (c) a cc con ca x vo hng i

    Ci t duyt cy T theo mc : void level(Tree T) {

  • Gio trnh cu trc d liu v gii thut 48

    Phan on Ngc Phng

    Tree p; initq(); if (T!=NULL) push(T); while (!emptyq()) { pop(&p); printf("%4d",p->data); if (p->left != NULL) push(p->left); if (p->right != NULL) push(p->right); } } * Xy dng hm tm s nt ca 1 cy : int sonut( Tree t ) { If (t = = NULL) return 0 ; Else return(1 + sonut(t->left) + sonut(t->right)) ; } *Minh ha qu trnh duyt cy (xem hnh trang 42): Trnh t cc nt c thm : - Theo trnh t Preorder : A B D G H E C F I J K - Theo trnh t Inorder : G D H B E A F J I K C - Theo trnh t Postorder : G H D E B J K I F C A

    (ii) Biu thc s hc c th biu din dng cy nh phn :

    5 + 3 * (7 - 2 + 1) + 6 / 2

    Trnh t cc nt c thm : - Preorder : + + 5 * 3 + - 7 2 1 / 6 2 { biu thc tin t } - Inorder : 5 + 3 * 7 - 2 + 1 + 6 / 2 { biu thc trung t } - Postorder : 5 3 7 2 - 1 + * + 6 2 / + { biu thc hu t }

    +

    + /

    5

    +

    *

    3

    2

    1

    6

    -

    7 2

  • Gio trnh cu trc d liu v gii thut 49

    Phan on Ngc Phng

    III. Cy cn bng hon ton : III.1 Khi nim : Mt cy c gi l cy cn bng hon ton nu vi mi nt ca cy, s lng nt ca cy con tri v cy con phi chnh nhau khng qa 1. V d : Cy c 6 nt

    1

    2 5

    3 4 6 III. 2 Lp cy cn bng hon ton c n nt : Gi s cc gi tr kha c nhp t bn phm Tree CayCBHT(int n) {

    Tree t ; if (n = = 0) return NULL; else { t = (Tree) malloc(sizeof(struct node) ; scanf(%d, &x); t->data = x ; t->left = CayCBHT(n div 2) ; t->right := CayCBHT(n - 1 - n div 2) ; return t ; } } IV. Cy tm kim nh phn (Binary Search Tree) : IV.1 Khi nim : Cy tm kim nh phn l cy tha mn iu kin sau : vi mi nt ca cy th gi tr kha ca cc nt cy con bn tri nh hn gi tr ca nt v gi tr kha ca cc cy con bn phi ln hn gi tr kha ca nt . V d :

    16 12 24 8 14 20 30 1 10 29 28

  • Gio trnh cu trc d liu v gii thut 50

    Phan on Ngc Phng

    IV.2 Thm mt nt vo cy tm kim nh phn : // Hm chn nt p (con tr p) vo cy T void insert(Tree p,Tree *T) { if (p->datadata) if ((*T)->left) insert(p,&(*T)->left); else (*T)->left=p; else if ((*T)->right) insert(p,&(*T)->right); else (*T)->right=p; } // Hm chn mt nt c d liu l e vo cy T void insert_node(infotype e,Tree *T) { Tree p; p= (Tree)malloc(sizeof(struct node)); p->data=e; p->left=NULL; p->right=NULL; if (*T ==NULL) (*T)=p; else insert(p,T); } IV. 3 To cy tm kim nh phn: Gii thut:

    - Khi to cy rng T - Lp li

    . nhp d liu cho nt

    . chn nt vo cy T - Cho n khi ht cy

    Ci t: void insert(infotype e,Tree *T) { Tree p; p= (Tree)malloc(sizeof(struct node)); p->data=e; p->left=NULL; p->right=NULL; if (*T ==NULL) (*T)=p;

  • Gio trnh cu trc d liu v gii thut 51

    Phan on Ngc Phng

    else if (edata) insert(e,&(*T)->left); else insert(e,&(*T)->right); } void taocay(Tree *T) { infotype e; do { printf("\n nhap so nguyen, (-1 de thoi):"); scanf("%d",&e); if (e!=-1) insert(e,&(*T)); } while (e!=-1); } IV.4 Tm kim mt nt trong cy tm kim nh phn : Bi ton: Gi s ta c cy T. Tm kim mt nt c d liu l se (search_element) trong cy ny. Nu tm thy bin found = 1 v nt p tr vo nt cn tm (nt c d liu l se), parent l cha ca nt p. Nu khng tm thy se trong cy T th bin found = 0. Ci t: void search(infotype se,Tree T, Tree *p,Tree *parent,int *found) { *p=T;*parent=NULL;*found= 0; while (*p!=NULL && !*found) { if ((*p)->data==se) *found=1; else { *parent=*p; if (sedata) *p=(*p)->left; else *p=(*p)->right; } } } IV.5 Loi b mt nt khi cy tm kim nh phn : Bi ton : Gi s T l 1 cy tm kim nh phn v DelElement l 1 gi tr kha. Cn loi b nt c gi tr kha = DelElement sao cho cy cn li vn l cy tm kim nh phn. Gii thut : Gi p l nt mun xo (nt c d liu l DelElement), parent l cha ca nt mun xo p, child l con ca nt mun xo (nu c). C ba trng hp: 1. Nu nt mun xo p l nt l:

    - Nu (parent->left = = p) th parent->left = NULL

  • Gio trnh cu trc d liu v gii thut 52

    Phan on Ngc Phng

    - Nu (parent->right = = p) th parent->right = NULL 2. Ngc li nu nt mun xo p l nt ch c mt nt con l child:

    - Nu (parent->left = = p) th parent->left = child - Nu (parent->right = = p) th parent->right = child

    3. Ngc li nu nt mun xo p l nt c y hai nt con: - tm x l nt tn cng bn phi ca cy con bn tri ca p, hoc tm x

    l nt tn cng bn tri ca cy con bn phi ca p. - chp d liu ca x vo p (p->data = x->data) - Gn p = x ; - loi b nt p (lc ny p thuc trng hp 1 hoc 2)

    Ci t : void search(infotype e,Tree T, tree *p,Tree *parent,int *found) { *p=T;*parent=NULL;*found= 0; while (*p!=NULL && !*found) { if ((*p)->data==e) *found=1; else { *parent=*p; if (edata) *p=(*p)->left; else *p=(*p)->right; } } } void del(infotype e, Tree *T) { int found;Tree p,parent,x,chil; search(e,&(*T),&p,&parent,&found); if (!found) { printf("\nKhong co %d trong cay",e);getch(); exit(1); } if ((p->left) && (p->right)) { x=p->right; if (x->left==NULL) parent=p; while (x->left) { parent=x; x=x->left; } p->data=x->data;

  • Gio trnh cu trc d liu v gii thut 53

    Phan on Ngc Phng

    p=x; } chil=p->left; if (chil==NULL) chil=p->right; if (parent==NULL) T=chil; else if (parent->left==p) parent->left=chil; else parent->right=chil; free(p); } V. Cy tng qut (nhiu nhnh) : V.1 Biu din cy tng qut : Mt cy tng qut cp m c th s dng cch biu din mc ni tng t nh i vi cy nh phn. Nh vy ng vi mi nt tt phi dnh ra m trng mc ni tr ti cc con ca nt v nh vy s "mi ni khng " s rt nhiu : nu cy c n nt s c ti n(m-1) +1 "mi ni khng" trong s m . n mi ni. Cn nu ty theo s con ca tng nt m nh ra mi ni ngha l dng nt c kch thc thay i th s tit kim khng gian nh ny s phi tr gi bng nhng phc tp ca qu trnh x l trn cy. Mt trong nhng phng php kh hin thc l biu din cy tng qut bng cy nh phn. Nh vy quan h gia cc nt trn cy tng qut ch c th hin qua hai c im thi.

    Ta nhn thy, bt k mt nt no trn cy tng qut, nu c th ch c : - mt nt con cc tri (con c) - mt nt em k cn phi Lc cy nh phn biu din cy tng qut theo hai quan h ny c gi l cy nh phn tng ng. - Child : con tr, tr ti nt con cc tri - Sibling : con tr, tr ti nt em k cn phi Vy ta c th biu din cy tng qut nu trn bng cy nh phn tng ng nh sau:

    V d : Xt cy hnh bn. Vi nt B : con cc tri l E, em k cn phi l C. Vi nt D : con cc tri l H. em k cn phi khng c. Nh vy nu mi nt c qui cch

    Child Info Sibling

    A

    B C D

    E F G H I J

  • Gio trnh cu trc d liu v gii thut 54

    Phan on Ngc Phng

    Biu din rng bng cy nh phn : A

    B E

    C F G

    D H I K

    A B E C F G D H I J Ta thy ngay l ni phi ca nt gc bao gi cng l mi ni khng v gc khng c em k cn phi. Nhng nu xt mt rng th tnh trng trn khng xut hin. V vy c th biu din rng bng mt cy nh phn tng ng (trng hp mt cy th coi nh rng c bit) V d : Ta c rng :

    C th nh ngha php bin i tng qut i vi rng nh sau : Nu T1, T2, ..., Tn l mt rng th cy nh phn tng ng biu din rng k hiu bi B(T1, T2, ..., Tn) s l cy : (1) rng, nu n = 0 (2) c gc l gc ca T1, c cy con tri l B(T11,T12,..., T1m) vi T11,T12,..., T1m l cy con gc T1, c cy con phi l B(T2, ..., Tn) V.2 Php duyt cy tng qut :

    A

    B C D E

    F

    G

    H I

    K

  • Gio trnh cu trc d liu v gii thut 55

    Phan on Ngc Phng

    Php duyt cy tng qut cng c t ra tng t h i vi cy nh phn nhng cn phi xem xt thm nhng iu sau y : (1) S nht qun v th t cc nt c thm gia php duyt cy y (theo nh ngha ca php duyt cy tng qut) v php duyt cy nh phn tng ng ca n (theo nh ngha ca php duyt cy nh phn) . (2) S nht qun gia nh ngha ca php duyt cy tng qut vi nh ngha ca php duyt cy nh phn. V cy nh phn vn c th c coi l cy, duyt theo php duyt cy tng qut. Nu ta phng theo cch duyt cy nh phn th ta s xy dng c nh ngha ca php duyt cy tng qut T nh sau : * Duyt theo th t trc : a) nu T rng th khng lm g b) nu T khng rng th : (1) Thm gc ca T (2) Duyt cc cy con th nht T1 ca gc ca T theo th t trc (3) Duyt cc cy con cn li T2, T3,..., Tk ca gc T theo th t trc * Duyt theo th t gia : a) nu T rng th khng lm g b) nu T khng rng th : (1) Duyt cc cy con th nht T1 ca gc ca T theo th t gia (2) Thm gc ca T (3) Duyt cc cy con cn li T2, T3,..., Tk ca gc T theo th t gia * Duyt theo th t sau : a) nu T rng th khng lm g b) nu T khng rng th : (1) Duyt cc cy con th nht T1 ca gc ca T theo th t sau (2) Duyt cc cy con cn li T2, T3,..., Tk ca gc T theo th t sau (3) Thm gc ca T V d : Ta c cy :

    th dy cc nt c chn l : Th t TRC : A B C E H I F J D G Th t GIA : B A H E I C J F G D

    A

    B C D

    E F G

    H I J

  • Gio trnh cu trc d liu v gii thut 56

    Phan on Ngc Phng

    Th t SAU : B H I E J F C G D A Chng 7 K thut bm I. Cc khi nim c bn : Gi s ta c dy kha x1, x2, ..., xn. Bi ton t ra l cn lu tr nhng phn t ny bng cch no c th tm kim mt cch nhanh nht. Ni dung : - Dng mng gm n phn t lu tr cc kha trn - Xy dng hm h(x) (hm bm) - Lu tr kha x ti v tr h(x) ca mng ni trn ( mng gi l bng bm ) - Khi cn tm kim 1 tr s no ta cng tin hnh bng phng php trn tc l tm s ti v tr h(s) Nhng vn ca k thut bm : 1) Gii quyt ng : ng xy ra khi 2 hoc nhiu kha c chung 1 gi tr bm, trong trng hp ny bng bm ch lu tr c 1 kha v ta phi tm cch lu tr nhng kha cn li vo nhng v tr khc 2) Tm hm bm h(x) tha mn cc iu kin : - gim ng n mc c th - thi gian tnh ton hp l II. Xy dng hm bm h(x) : II.1 Phng php chia : h(x) = x mod m (thng thng m l s nguyn t) II.2 Phng php nhn : - tm x2 - Trch ra 1 s ch s gia lm hm h(x) V d : x =125 x2 = 125 x 125 = 15625 h(x) = 56 hoc 62 II.3 Phng php phn on : thng p dng khi kha c gi tr ln Ni dung : Ct x thnh cc on c di bng nhau ri cng li ly kt qu lm hm bm V d: x = 279 583 421 h(x) = 421 + 583 + 279 = 1283 III. Gii quyt ng : III.1 Phng php th trc tip : - Nu h(x) = i v c phn t ti v tr th i th ta tm t v tr i +1 tr i cho n khi c v tr trng (trong trng hp tm n cui bng th quay v v tr u bng tm tip v nu n ti v tr i th kt lun bng bm y) v in x vo v tr trng. III. 2 Phng php kt ni ( Phng php dy chuyn ) : Ni dung : Gn km vi mi PT bng bm 1 danh sch lin kt cc gi tr kha trng gi tr bm. y l chng trnh lm vic trn bng bm cc s nguyn vi hm bm h(key)= key % 10. #include #include #include #include #define TRUE 1 #define FALSE 0

  • Gio trnh cu trc d liu v gii thut 57

    Phan on Ngc Phng

    #define M 10 struct nodes { int key; struct nodes *next; }; typedef struct nodes *NODEPTR; NODEPTR bucket[M]; //mang cac con tro chi nut dau cua cac bucket //tac vu getnode(void) NODEPTR getnode() { NODEPTR p; p = (NODEPTR) malloc(sizeof(struct nodes)); return(p); } //Tac vu freenode: huy nut da cap phat void freenode(NODEPTR p) { free(p); } // Ham bam int hashfunc(int key) { return(key % M); } //Khoi dong cac bucket void initbucket() { int b; for (b=0;b key = x; p-> next =bucket[b]; bucket[b] = p;

  • Gio trnh cu trc d liu v gii thut 58

    Phan on Ngc Phng

    } //Tac vu remove :xoa nut co khoa k trong bang bam void Remove(int k) { int b; NODEPTR p, q; b=hashfunc(k); p=bucket[b]; while(p !=NULL && p->key !=k) { q=p; p=p->next; } if (p == NULL) printf("\n Khong co nut co khoa %d", k); else if (p==bucket[b]) bucket[b]=p->next; else q->next=p->next; free(p); } //Tac vu traversebucket:duyet bucket b void traversebucket(int b) { NODEPTR p; p=bucket[b]; while (p !=NULL) { printf("%3d",p->key); p=p->next; } } //Tac vu traverse:duyet bang ham void traverse() { int b; for (b=0;b

  • Gio trnh cu trc d liu v gii thut 59

    Phan on Ngc Phng

    { NODEPTR p; *b = hashfunc(k); p = bucket[*b]; while(k!=p->key && p !=NULL) p = p->next; if(p == NULL) //khong tim thay return 0; else // tim thay return 1; } // Chuong trinh chinh void main() { int b,key,i,n,chucnang,c; clrscr(); initbucket(); //khoi dong M bucket cua bang bam do { //Menu chinh cua chuong trinh printf("\n\Cac chuc nang cua chuong trinh:\n"); printf("1:Them mot nut vao bang bam\n"); printf("2:Them ngau nhien nhieu nut vao bang bam\n"); printf("3: Xoa nut trong bang bam\n"); printf("4: Xoa toan bo bang bam\n"); printf("5: Duyet bang bam\n"); printf("6: Tm kiem tren bang bam\n"); printf("0:Ket thuc chuong trinh\n"); printf("\n Chuc nang ban chon:"); scanf("%d",&chucnang); switch(chucnang) { case 1: { printf("\nTHEM MOT NUT VAO BANG BAM"); printf("\n Khoa cua nut moi:"); scanf("%d",&key); push(key); break; } case 2: { printf("\nTHEM NGAU HIEN NHIEU NUT VAO BANG BAM"); printf("\n Ban muon them bao nhieu nut:"); scanf("%d",&n);

  • Gio trnh cu trc d liu v gii thut 60

    Phan on Ngc Phng

    for (i=0;i

  • Gio trnh cu trc d liu v gii thut 61

    Phan on Ngc Phng

    Chng 8 Sp xp v tm kim ngoi A. Sp xp ngoi : I. Bi ton sp xp ngoi : Pht biu : Cho file c cu trc n bn ghi; Ta cn sp xp cc bn ghi theo kha no . Nu c th np tt c bn ghi vo 1 mng no th c th dng mt trong cc phng php SX ni sp xp cc PT ca mng, sau dd ghi li vo file. Tuy nhin iu ny khng th thc hin c khi SX th t tp tin ln, v b nh trong khng th cha ht d liu, v th cn c phng php thch hp. Phng php SX file thng dng da trn tng thc hin lun phin hai cng vic sau : - tch tp tin ln thnh cc ( thng l 2) tp tin con c th t no - trn cc tp tin con thnh tp tin ln c th t v d : II. Trn 2 tp tin c th t thnh tp mi cng c th t : Gii thut : (i) M file F1 v F2 c , m file F ghi (ii) c PT u tin ca F1 vo bin x v PT u tin ca F2 vo bin y (iii) Lp li cc bc sau cho n khi ht file F1 hoc ht file F2 + nu x < y th - ghi x vo file F - c PT tip theo ca F1 vo x + ngc lai nu x > y th - ghi y vo file F - c PT tip theo ca F2 vo y + ngc li ( x = y) th - ghi x vo file F - c PT tip theo ca F1 vo x - ghi y vo file F - c PT tip theo ca F2 vo y (iv) Nu F1 cha ht th ghi cc PT ca F1 sang F, ngc li th ghi cc PT ca F2 sang F v d : III. Phng php trn t nhin : y l phng php sp xp tp tin F, s dng 2 tp tin ph F1 v F2

    Gii thut trn t nhin : sodoancon = 0 ; Lp li cc bc sau : - Phn on F thnh F1 v F2 - Trn F1 v F2 vo F cho n khi s on con trong F ch cn hai * GT phn on :

    (1) M file F c, m file F1 v F2 ghi,

  • Gio trnh cu trc d liu v gii thut 62

    Phan on Ngc Phng

    (2) While do (i) Sao 1 on con c th t ca F vo F1 nh sau: Nu cha ht tp F thc hin vic c PT ca F v ghi n vo F1 cho n khi gp PT nh hn PT trc n hoc ht tp F; tng sodoancon ln 1 (ii) Sao 1 on con c th t ca F vo F2 nh sau: Nu cha ht tp F thc hin vic c PT ca F v ghi n vo F2 cho n khi gp PT nh hn PT trc n hoc ht tp F; tng sodoancon ln 1 * GT trn : Trn cc on con c th t trong F1 v F2 vo F (1) M file F1, F2 c, m file F ghi (2) Chng no v (i) Chng no hay do - nu PT x ca F1 < PT y ca F2 th sao x vo F v c PT tip theo ca F1 vo x - nu PT x ca F1 > PT y ca F2 th sao y vo F v c PT tip theo ca F2 vo y (3) Nu file F1 cha kt thc th ghi cc PT cn li ca n sang F

    ngc li nu file F2 cha kt thc th ghi cc PT cn li ca F2 sang F * Ch : Trong GT phn on hoc trn ta c th dng mng hoc danh sch lin kt thay th cho cc file F1 v F2 nu khng gian b nh trong cho php. PHC TP ca GT ny l O(nlog2n) * Ci t : #include #include #include #include #include typedef struct{ FILE *f; int buffer; }tape ; void opentape(tape *X, const char *fn) { (*X).f=fopen(fn,"rb"); fread(&(*X).buffer,sizeof(int),1,(*X).f); } void readtape(tape *X,int *x) //doc du lieu tu X.buffer vao bien x { memcpy(&*x,&(*X).buffer,sizeof(int)); fread(&(*X).buffer,sizeof(int),1,(*X).f); } void copyitem(tape *X,tape *Y,int *EOR) //doc ban ghi {

  • Gio trnh cu trc d liu v gii thut 63

    Phan on Ngc Phng

    int x; readtape(&*X,&x); fwrite (&x,sizeof(int),1,(*Y).f); *EOR=feof((*X).f) || (x>(*X).buffer); } void copyrun(tape *X, tape *Y) //copy doan con { int EOR; do{ copyitem(&*X,&*Y,&EOR); }while(!EOR); } void distribute(tape *a,tape *b,tape *c) //phan doan { r=0; do{ copyrun(&*a,&*b);r++; if(!feof((*a).f)) { copyrun(&*a,&*c);r++; } }while(!feof((*a).f)); } void mergerun(tape *a,tape *b,tape *c) // tron { int EOR; do{ if((*b).buffer

  • Gio trnh cu trc d liu v gii thut 64

    Phan on Ngc Phng

    { copyrun(&*b,&*a); } while(!feof((*c).f)) { copyrun(&*c,&*a); } } void natmerge(const char *fn) //tron tu nhien { long r; tape a,b,c; do{ opentape(&a,&*fn); b.f=fopen("h1.txt","wb"); c.f=fopen("h2.txt","wb"); distribute (&a,&b,&c); fclose(a.f); fclose(b.f); fclose(c.f); a.f=fopen(fn,"wb"); opentape(&b,"h1.txt"); opentape(&c,"h2.txt"); merge(&a,&b,&c,&R); fclose(a.f); fclose(b.f); fclose(c.f); }while(r!=2); remove("h1.txt"); remove("h2.txt"); } void main() { FILE *myfile; int RANGE_MIN = 0;//hai bien nay dung de gioi han mien so ngau nhien int RANGE_MAX = 1000; int rec,ope,sopt=10;//rec-bien dung de ghi vao file nguon; ope-bien dung de doc, kiem tra file nguon;sopt- bien gioi han so phan tu tao ra o file nguon //de thi du toi se tao ra 100 so ngau nhien trong khoang 0->1000 clrscr(); randomize(); if( (myfile = fopen( "c:\mao.txt", "wb" )) != NULL )

  • Gio trnh cu trc d liu v gii thut 65

    Phan on Ngc Phng

    { for(int i=0;i if( (myfile = fopen( "c:\mao.txt", "rb" )) != NULL ) { for(int j=0;j

  • Gio trnh cu trc d liu v gii thut 66

    Phan on Ngc Phng

    #include FILE *myfile; int sopt; //Tao file void taofile() { cout

  • Gio trnh cu trc d liu v gii thut 67

    Phan on Ngc Phng

    if (s==x) {cout

  • Gio trnh cu trc d liu v gii thut 68

    Phan on Ngc Phng

    BI TP Cu trc d liu v Gii thut

    Chng 1 Tng quan v Cu trc d liu v Gii thut Bi 1 : Tnh biu thc s = xn vi x, n nhp t bn phm. Xc nh phc tp ca thut ton. Bi 2 : Tnh : a) s = 1 +1/2 + 1/3 + ...+ 1/n b) s = 1 + 1/2! + 1/3! +... + 1/n! c) s = 1 = 1/3! + 1/5! + .. d) S = x - x3/3! + x5/5! - ...+ (-1)n x2n-1 / (2n -1)! = Sin(x) e) S = x + x3/3! + x5/5! - ...+ x2n+1 / (2n -1)! = Sh(x) f) S = 1 - x2/2! + x4/4! - ... + (-1)n . x2n / (2n)! = Cos(x) g) S = 1 + x2/2! + x4/4! + ... + x2n / (2n)! = Ch(x) Bi 3 : Tnh n!! ( n!! = 1.3.5...n nu n l v n!! = 2.4.6...n nu n chn ) Bi 4 :

    =

    =n

    i

    i

    iS1

    )1()!!( vi n >1 Bi 5 : Mt ng thng c th c biu din bi phng trnh :

    ax + by + c = 0 (a, b, c l cc s thc) Vit chng trnh c hai b ba s thc (tc 6 s thc) trn hai hng tng ng vi hai phng trnh ca ng thng. CT hin th thng bo v mi quan h gia hai ng thng y. Cc thng bo c th l : 'Hai ng thng ct nhau', 'Hai ng thng ct nhau v vung gc nhau', 'Hai ng thng song song vi nhau', 'Hai ng thng trng nhau'. Bi 6 : Vit chng trnh hin th : - Cc s hon thin nh hn 1000. - Cc s nguyn t trong khong [a, b] vi a, b nhp t bn fm. Bi 7 : Vit chng trnh (CT) tnh din tch (DT) cc hnh trn, hnh ch nht, v hnh tam gic theo cch sau y : - Nu nhp 1 s dng , CT hin th DT hnh trn c bn knh l s va nhp. - Nu nhp 2 s dng trn cng 1 hng, CT hin th DT hnh ch nht c chiu di v rng l 2 s va nhp.

  • Gio trnh cu trc d liu v gii thut 69

    Phan on Ngc Phng

    - Nu nhp 3 s dng trn cng 1 hng, CT hin th DT hnh tam gic c chiu dai 3 cnh l 3 s va nhp. Dng 3 hm tnh din tch cc hnh trn. Bi 8 : Vit chng trnh c 1 chui trn mt dng ri sau hin th mi t trn 1 hng (theo th t xut hin), v s cc t trong cu y. Bi 9 : - Vit chng trnh kim tra mt chui c phi l palindrome khng ? T "MADAM" l 1 palindrome. - Vit chng trnh kim tra hai t c nhp c phi l anagram ca nhau khng ? V d cc t dear, read l anagram ca nhau. Bi 10 : Vit chng trnh hin th cc s t 50 n 100 c biu din nh phn l i xng. V d cc s 1, 3, 5, 7, 9 l cc s c biu din nh phn l i xng, v biu din nh phn ca chng ln lt l 1, 11, 101, 111, 1001. Bi 11 : Cho cc ma trn vung cp n : A, B, C. Vit chng trnh con thc hin cc cng vic sau : a) Hon v dng th i v dng th k ca ma trn nu i

  • Gio trnh cu trc d liu v gii thut 70

    Phan on Ngc Phng

    c) Chn vo mng 1 s x no : *) v tr th n cho trc *) trc hoc sau 1 s y no *) nu mng sp xp, th sau khi chn x vo, mng vn sp xp *) chn x vo ti nhiu v tr tha mn iu kin no d) Xa s trong mng *) bng 1 s x no (nu c) *) tha mn 1 iiu kin no e) Tm kim trn mng : *) tm tuyn tnh *) tm nh phn : iu kin, thut gii f) Sp xp mng : *) bng phng php chn, chn, ni bt : gii thut, minh ha vi dy s cho trc, ci t bng Pascal. *) bng phng php phn hoch (QuickSort) : qui v khng qui g) Thay th 1 phn t ca danh sch bi 1 phn t khc Bi 2 : S dng qui v khng qui vit hm kim tra 1 mng c i xng hay khng ? Bi 3 : a) Hy trn 2 mng thnh 1 mng mi theo nguyn tc tng i mt. b) Trn nhiu mng thnh 1 mng mi c) Trn 2 mng c sp xp thnh 1 mng cng c sp xp d) Tch 1 mng thnh nhiu mng theo 1 nguyn tc no Bi 4 : Vit gii thut sp xp mng v ng thi ta bt nhng phn t ging nhau ca mng, ch gi li mt phn t lm i din. Bi 5 : Tm cc s nguyn t trong mng. Chng 3 Danh sch lin kt Bi 1 : 1) To mt danh sch lin kt cc s nguyn bng cch ly ngu nhin 2) m cc s c trong danh sch v tm gi tr trung bnh ca cc phn t trong DS 3) Vit hm xc nh tnh tng dn ca DS 4) Vit chng trnh con ni 1 nt vo DS 5) Vit CT con xa 1 phn t th n trong DS sau gi Ct con ny xa tt c cc phn t chia ht cho 4 6) Vit CT con chn 1 phn t cho trc vo sau nt th n trong DS sau gi Ct con ny chn thm cc phn t vo sau tt c cc phn t chn ca DS Bi 2 : 1) Vit CT ni 2 DSLK, ch thay i lin kt v chp nhn ph v 2 DS ban u

  • Gio trnh cu trc d liu v gii thut 71

    Phan on Ngc Phng

    2) Vit CT trn 2 DSLK c th t tng dn v to DSLK th 3 cng tng dn, trong 2 DS ban u c bo ton Bi 3 : Mt a thc c th c biu din nh 1 DSLK vi mi nt s cha h s v s m ca tng thnh phn ca a thc. 1) Nhp a thc vo DS( c tham s hnh thc ) 2) Cng, tr hai a thc 3) In kt qu Bi 4 : Nhp 2 danh sch lin kt (DSLK), sau in ra mn hnh : 1) Phn giao ca 2 DSLK 2) Phn hi ca 2 DSLK 3) Hiu ca DSLK th nht v DSLK th hai Bi 5 : Vit chng trnh con o ngc mt danh sch lin kt trong 2 trng hp : a) ch o ngc d liu b) thay i mi lin kt Bi 6 : Ngi ta mun cho ng k bn v cho 1 bui ha nhc, ai ng k trc s c mua trc. Hy vit 1 chng trnh c cc tn v a ch ca nhng ngi ng k v cng s v h yu cu v lu tr chng trong DSLK. Chng trnh to ra mt danh sch cc tn, a ch, v s v ca nhng ngi c mua. Lu l khng c ngi no c ng k nhiu ln.Bi Bi 7 : Hy vit hm tr li mt con tr ch n nt cui cng trong 1 DSLK.( qui v khng qui) Bi 8 : Hy vit hm m s nt trong 1 DSLK ( qui v khng qui ) Bi 9 : Gi s ta c File HS.dat cha d liu l cc bn ghi, m mi bn ghi gm tn, s hiu lp v im trung bnh ca tng hc sinh. Hy lp nhiu DSLK cha cc bn ghi y, mt DS cho 1 lp. Mi DS phi c sp xp theo vn abc ca tn. Sau khi lp xong hy in ra vi nhng u thch hp. Chng 4 Ngn xp v Hng i Bi 1 : Vit 1 chng trnh dng cc php ton trn ngn xp nh Empty, Creat, Push, Pop : a) Tm phn t nh ngn xp, nhng khng xa n t ngn xp b) Tm phn t y ngn xp, v li ngn xp rng c) Tm phn t th n ca ngn xp, li NX khng c n PT trn d) Tm phn t th n ca ngn xp, nhng vn bo ton NX e) Tm phn t y ngn xp, v bo ton NX Bi 2 :

  • Gio trnh cu trc d liu v gii thut 72

    Phan on Ngc Phng

    Vit chng trnh xc nh 1 biu thc (l 1 chui k t) c cha cc du ngoc tng xng khng, ngha l mi du ngoc tri phi c 1 du ngoc phi tng ng. Bi 3 : Vit chng trnh xc nh cc tha s nguyn t ca 1 s nguyn dng ln hn 2, nhng in ra theo th t gim dn. V d 18 = 3 * 3 * 2 Bi 4 : a) Vit chng trnh tnh gi tr biu thc hu t, gi s cc ton hng ch c 1 ch s khng m V d : u vo : 1 2 3 + * 1 2 - / { / : div } 1 3 $ 5 + * 1 2 - / { kt trng v $ : b qua } 1 3 + + { bo tha php ton } 2 3 4 5 + { bo tha ton hng } b) Vit chng trnh tnh gi tr biu thc hu t, gi s cc ton hng c th c nhiu hn 1 ch s. Gi s cc ton hng v cc ton t cch nhau 1 k t trng. V d 12 2 + 15 192 - * { (12 + 2) * (15 - 192) } Bi 5 : Thit k gii thut v vit chng trnh chuyn biu thc trung t sang biu thc hu t. C th dng hng i lu tr biu thc hu t. Bi 6 : Vit hm (hoc th tc ) xc nh 1 biu thc hu t c vit ng hay khng ? Bi 7 : Vit 1 th tc dng cc php ton trn hng i (H) nh EmptyQ, CreatQ, AddQ, RemoveQ : a) Tm phn t u H, nhng khng xa n t H b) Tm phn t cui H, v li H rng c) Tm phn t th n ca H, li H khng c n PT u tin d) Tm phn t th n ca H, nhng vn bo ton H Bi 8 : Dng cc php ton c bn ca H v NX, vit thut ton v ci t CT o ngc cc PT ca H. Bi 9 : Vit CT c 1 chui k t, y mi k t vo NX theo th t nh khi chng c c v ng thi thm n vo H. Khi n kt thc chui, dng cc php ton c bn ca NX v H xc nh chui c phi l 1 palindrome khng ?( Vd chui "madam" l 1 palindrome) Bi 10 : Sp xp mng bng phng php RadixSort (dng H)

  • Gio trnh cu trc d liu v gii thut 73

    Phan on Ngc Phng

    Chng 5 CY Bi 1 : Vi mi danh sch t kha Pascal di y : a) V cy tm kim nh phn to ra khi cc t c chn theo th t cho b) Thc hin kiu qut trung t, hu t v tin t cho cy (i) program, const, type, function, procedure, begin, end (ii) div, mod, array, for, to, do, repeat, until, with, while, label, goto Bi 2 : Bt u vi cy nh phn sau, hy ch ra cy BST nhn c sau khi thc hin dy cc thao tc sau : a) Chn 7, 1, 55, 25 b) Xa 8, 37, 62 c) Chn 7, xa 8, chn 59, xa 60 Bi 3 : i vi cy bi tp 2, hy hin th kt qu to bi vic qut cy theo kiu trung t, tin t v hu t. Bi 4 : Vi mi biu thc s hc di y, hy v cy nh phn biu din biu thc y ri dng cc kiu qut tm biu thc trung t v hu t tng ng : a) (A - B) - C b) A - (B - C) c) A / (B - (C - (D - (E - F)))) d) ((((A - B) - C) - D) - E) / F e) ((A * (B + C)) / (D - (E + F))) * (G / (H / (I * J))) Bi 5 : Dng ci t trn c s mng ca cy tm kim nh phn m t phn ny, hy ch ra ni dung ca mng lu tr BST bi tp 3. Bi 6 : Hy v cy nh phn vi iu kin sau : a) Kiu qut trung t ca cy nh phn to ra : G F H K D L A W R Q P Z v kiu qut tin t to ra : A D F G H K L P Q R W Z b) Kiu qut hu t ca cy nh phn to ra : F G H D A L P Q R Z W K v kiu qut trung t to ra nh a) Bi 7 : a) Vit hm qui tm s nt l trong 1 cy nh phn b) Vit hm qui tm s nt bc hai trong 1 cy nh phn c) Vit hm xc nh mc ca cy d) Vit hm xc nh mc ca mt nt cho trc Bi 8 : Vit th tc khng qui qut cy kiu trung t (dng 1 NX cha cc con tr loi tr php qui) Bi 9 : Vit th tc qut cy theo tng mc (th tc khng qui, v dng 1 H cc con tr) Bi 10 : Vit chng trnh x l BST c cc nt cha k t. Ngi dng c php chn la theo menu di y :

  • Gio trnh cu trc d liu v gii thut 74

    Phan on Ngc Phng

    I : chn 1 k t vo cy TR : qut kiu hu t S : tm 1 k t cho trc D : xa 1 k t TI : qut kiu trung t Q : kt thc TP : qut kiu tin t Bi 11 : Vit th tc sp xp theo kiu cy ca 1 danh sch cc s nguyn c lu tr trong : a) mt mng b) mt danh sch lin kt Bi 12 : Vit chng trnh kim tra t, ngha l c cc t trong mt phn vn bn ri tm chng trong 1 t in. Dng 1 BST lu tr t in ny, c danh sch cc t trong 1 tp tin. Khi kim tra cc t trong 1 phn vn bn , chng trnh in ra danh sch tt c cc t khng c trong t in. Bi 13 : Trong 1 cng ty, phng php tr lng cho mi nhn vin (NV) ty thuc vo NV l NV hnh chnh, cng nhn hay NV bn hng. Gi s rng 1 tp tin cc bn ghi NV c bo tr trong mi bn ghi cha cc thng tin sau cho mi NV : Tn (20 k t) , s bo him x hi (s nguyn), tui (s nguyn), s ngi cn ph thuc (s nguyn), m NV ( cc k t O, F, S biu din NV hnh chnh, cng nhn v NV bn hng theo th t ), lng mi gi nu l cng nhn, lng hng nm nu l NV hnh chnh, lng c bn v s phn trm hoa hng nu l NV bn hng. Vit chng trnh iu khin bng menu cho php t nht cc ty chn sau y i vi ngi dng : GET : c cc bn ghi t tp tin nhn vin v lu tr chng trong 1 BST, c sp xp theo tn. INS : chn 1 bn ghi cho 1 NV mi vo BST UPD : cp nht bn ghi ca 1 NV c trong cy RET : tm v hin th bn ghi ca 1 NV cho trc (bng tn hay bng s bo him x hi) LIS : In cc bn ghi theo th t. Ty chn ny cho php cc ty chn con sau: ALL : In tt c cc NV OFF : ch in cc NV hnh chnh FAC : ch in cc cng nhn SAL : ch in cc NV bn hng DEL : xa 1 bn ghi ca 1 NV t BST SAV : Sao cc bn ghi vo tp tin QUI : kt thc

  • Gio trnh cu trc d liu v gii thut 75

    Phan on Ngc Phng

    Chng 6 & 7 K thut bm Tm kim v Sp xp ngoi Bi 1 : Dng phng php d tuyn tnh to bng bm cho 10 s ngu nhin trong khong 0..99 Bi 2 : To mt t in cc t kha ca NNLT Pascal bng BST, bng mng cc xch ca bng bm. Vit chng trnh tm mt t trong t in, xa mt t v thm mt t vo t in. D liu c lu trong file. Bi 3 : S dng bng bm kim tra tnh hp l ca cc nh danh ngi dng v cc mt khu cho 1 h my tnh.Mt danh sch cc nh danh ngi dng v cc mt khu c c t 1 tp tin nh kiu c v c lu tr trong 1 bng bm. Khi a vo nh danh ngi dng v mt khu, chng s c tm trong bng bm ny xc nh c hp l khng ? Bi 4 : Vit chng trnh ci t thut ton sp xp tp tin bng phng php trn t nhin Bi 5 : a) Vit chng trnh trn 2 tp tin c th t thnh 1 tp tin cng c th t b) S dng cu a) vit chng trnh trn nhiu tp tin c th t thnh 1 tp tin cng c th t.

  • Gio trnh cu trc d liu v gii thut 76

    Phan on Ngc Phng

    TI LIU THAM KHO

    1. Trn Quc Chin (1998), Gio trnh Cu trc d liu v gii thut, lu hnh ni b. 2. Trn c Huyn (1997), Phng php gii cc cc bi ton tin hc, Nxb Gio dc, H

    Ni.

    3. Larry Nyhoff, Sanfort Leedstma (1998), Lp trnh nng cao bng Pascal vi cc cu trc

    d liu, Nxb Nng.

    4. Xun Li (1998), Cu trc d liu v gii thut, Nxb Khoa hc v k thut, H Ni.

    5. Robert Sedgewick (1998), Cm nang thut ton, Nxb Khoa hc v k thut, H Ni.

    6. Nguyn vn Thn, Phan vn Tho (1996), Thut ng Tin hc Anh Vit, Nxb tp H Ch

    Minh.

    7. V c Thi (1999), Thut ton trong tin hc, Nxb Khoa hc v k thut, H Ni.

    8. Nguyn Trung Trc (1996), Cu trc d liu, Nxb Trung tm in ton trng i hc

    bch khoa tp H Ch Minh.

    9. L Minh Trung (1996), Bi tp Cu trc d liu v thut ton, Nxb tp H Ch Minh. 10. Nguyn Thanh Thy, Nguyn Quang Huy (1999), Bi tp lp trnh ngn ng C, Nxb Khoa hc v k thut, H Ni. 11. Gerald Leblanc (1995), Turbo C, Nxb Khoa hc v k thut, H Ni. 12. Hunh Tn Dng, Hong c Hi (2004), Bi tp ngn ng C, Nxb Lao ng x hi, tp

    H Ch Minh.

    13. inh Mnh Tng (2003), Cu trc d liu & Thut ton, Nxb Khoa hc v K thut, H

    Ni.

    14. Ng Trung Vit (1995), Ngn ng lp trnh C v C++, Nxb Giao thng vn ti, H Ni.

  • Gio trnh cu trc d liu v gii thut 77

    Phan on Ngc Phng

    MC LC Chng 1 Tng quan v cu trc d liu v gii thut I. Khi nim ............................................................................................................. 2 II. Cng c biu din gii thut ............................................................................... 4 III. Chng trnh qui ........................................................................................... 4 IV. phc tp ca gii thut ................................................................................. 5 Chng 2 Cu trc Mng 0.Tng quan ............................................................................................................. 8 I. To mng .............................................................................................................. 8 II Duyt mng .......................................................................................................... 9 III Tm kim tun t .............................................................................................. 10 IV. Tm kim nh phn .......................................................................................... 11 V. Tm kim bng phng php ni suy ............................................................... 12 VI. Sp xp bng phng php chn .................................................................... 12 VII. Sp xp bng phng php chn ................................................................... 13 VIII. Sp xp bng phng php ni bt .............................................................. 15 IX. Sp xp bng phng php phn hoch .......................................................... 15 X. Chn, xa phn t trong mng .......................................................................... 17 XI. Trn mng ....................................................................................................... 18 XII. Kim tra mng tng ........................................................................................ 19 Chng 3 Danh sch lin kt I. Tng quan v danh sch lin kt ........................................................................ 20 II. Cc php ton trn danh sch .......................................................................... 20 III. Danh sch lin kt hai chiu ............................................................................ 24 IV. Danh sch lin kt vng .................................................................................. 28 Chng 4 Ngn xp v Hng i A. Ngn xp I. Khi nim .......................................................................................................... 29 II. Ngn xp dng mng ....................................................................................... 29 III. Ngn xp dng DSLK .................................................................................... 30 IV. ng dng ca ngn xp .................................................................................. 31 B. Hng i V Khi nim ........................................................................................................... 36 VI. Hng i dng mng ...................................................................................... 36 VII Hng i dng DSLK .................................................................................... 38 VIII. ng dng ca hng i ................................................................................ 39 Chng 5 CY

  • Gio trnh cu trc d liu v gii thut 78

    Phan on Ngc Phng

    I. Cc khi nim c bn ........................................................................................ 42 II. Cy nh phn .................................................................................................... 42 III. Cy cn bng .................................................................................................. 45 IV. Cy tm kim nh phn ................................................................................... 46 V. Cy tng qut ................................................................................................... 49 Chng 6 K thut bm I. Cc khi nim c bn ........................................................................................ 52 II. Xy dng hm bm .......................................................................................... 52 III. Gii quyt ng ......................................................................................... 52 Chng 7 Sp xp v Tm kim ngoi A. Sp xp ngoi I. Bi ton Sp xp ngoi ...................................................................................... 57 II. Trn hai tp tin ................................................................................................. 57 III. Phng php trn t nhin ............................................................................. 57 B. Tm kim ngoi IV. Khi nim ....................................................................................................... 61 V. K thut tm kim ............................................................................................ 61 BI TP Chng 1 .............................................................................................................. 64 Chng 2 .............................................................................................................. 64 Chng 3 .............................................................................................................. 66 Chng 4 .............................................................................................................. 67 Chng 5 .............................................................................................................. 68 Chng 6 & 7 ....................................................................................................... 70 Ti liu tham kho ................................................................................................ 71 Mc lc .................................................................................................................. 72