You are on page 1of 197

TRNG H CNG NGH THNG TIN

CU TRC D LIU V GII THUT 1_Mai Xun Hng

N THI CU TRC D LIU V GII THUT

Gio vin: Mai Xun Hng Email: hungmx@uit.edu.vn

Bi Ton Tm Kim
Cho danh sch c n phn t a0, a1, a2, an-1.
CU TRC D LIU V GII THUT 1_Mai Xun Hng

n gin trong vic trnh by gii thut ta dng mng 1 chiu a lu danh sch cc phn t ni trn trong b nh chnh. Tm phn t c kho bng X trong mng

Gii thut tm kim tuyn tnh (tm tun t)


Gii thut tm kim nh phn Lu : Trong qu trnh trnh by thut gii ta dng ngn ng lp trnh C.
2

Tm Kim Tuyn Tnh


tng : So snh X ln lt vi phn t th 1, th 2,ca mng a cho n khi gp c kha cn tm, hoc tm ht mng m khng thy. Cc bc tin hnh
Bc 1: Khi gn i=0; Bc 2: So snh a[i] vi gi tr x cn tm, c 2 kh nng + a[i] == x tm thy x. Dng; + a[i] != x sang bc 3; Bc 3: i=i+1 // Xt tip phn t k tip trong mng Nu i==N: Ht mng. Dng; Ngc li: Lp li bc 2;
3

CU TRC D LIU V GII THUT 1_Mai Xun Hng

Thut Ton Tm Kim Tuyn Tnh


Hm tr v 1 nu tm thy, ngc li tr v 0
CU TRC D LIU V GII THUT 1_Mai Xun Hng

int LinearSearch(int a[],int n, int x) { int i=0; while((i<n)&&(a[i]!=x)) i++; if(i==n) return 0; //Tm khng thy x else return 1; //Tm thy }
4

Minh Ha Thut Ton Tm Kim Tuyn Tnh

CU TRC D LIU V GII THUT 1_Mai Xun Hng

X=6

Tm thy 6 ti v tr 4

i
2 0 8 1 5 2 1 3 6 4 4 5 6 6

Minh Ha Thut Ton Tm Kim Tuyn Tnh (tt)

CU TRC D LIU V GII THUT 1_Mai Xun Hng

X=10

i=7, khng tm thy

i
2 0 8 1 5 2 1 3 6 4 4 5 6 6

Thut Ton Tm Kim Nh Phn


c p dng trn mng c th t. tng: .
CU TRC D LIU V GII THUT 1_Mai Xun Hng

Gi x ta xt mng c th t tng, khi y ta c ai-1<ai<ai+1 Nu X>ai th X ch c th xut hin trong on [ai+1, an-1] Nu X<ai th X ch c th xut hin trong on [a0, ai-1] tng ca gii thut l ti mi bc ta so snh X vi phn t ng gia trong dy tm kim hin hnh, da vo kt qu so snh ny m ta quyt nh gii hn dy tm kim na di hay na trn ca dy tm kim hin hnh.
7

Cc Bc Thut Ton Tm Kim Nh Phn


Gi s dy tm kim hin hnh bao gm cc phn t nm trong aleft, aright, cc bc ca gii thut nh sau:
Bc 1: left=0; right=N-1; Bc 2: mid=(left+right)/2; //ch s phn t gia dy hin hnh So snh a[mid] vi x. C 3 kh nng a[mid]= x: tm thy. Dng a[mid]>x : Right= mid-1; a[mid]<x : Left= mid+1; Bc 3: Nu Left <=Right ; // cn phn t trong dy hin hnh + Lp li bc 2 Ngc li : Dng 8
CU TRC D LIU V GII THUT 1_Mai Xun Hng

Ci t Thut Ton Tm Nh Phn


Hm tr v gi tr 1 nu tm thy, ngc li hm tr v gi tr 0
CU TRC D LIU V GII THUT 1_Mai Xun Hng

int BinarySearch(int a[],int n,int x) { int left, right, mid; left=0; right=n-1; do{ mid=(left+right)/2; if(a[mid]==x) return 1; else if(a[mid]<x) left=mid+1; else right=mid-1; }while(left<=right); return 0; }
9

CU TRC D LIU V GII THUT 1_Mai Xun Hng

void BinarySearch(int a[],int n,int x) { int left, right, mid; left=0; right=n-1; do{ mid=(left+right)/2; if(a[mid]==x) { printf(thay); return; } else if(a[mid]<x) left=mid+1; else right=mid-1; }while(left<=right); printf(khong thay); }
10

Minh Ha Thut Ton Tm Nh Phn

CU TRC D LIU V GII THUT 1_Mai Xun Hng

Tm thy 2 ti v tr 1
X=2

L
1 0 2 1 4 2

M
6 3 7 4 9 5

R
10 6

11

Minh Ha Thut Ton Tm Nh Phn (tt)

CU TRC D LIU V GII THUT 1_Mai Xun Hng

X=-1

L
1 0
L=0
R=-1 => khng tm thy X=-1

M
2 1 4 2 6 3 7 4 9 5

R
10 6

12

BI TP P DNG

3
0 CU TRC D LIU V GII THUT 1_Mai Xun Hng

5
1

6
2

8
3

12
4

17
5

19
6

Ghi kt qu chy tng bc khi tm X=19

B1: l=0, r=6, mid=(l+r)/2, A[mid] = 8, 8<19


B2: l= mid+1=4, mid=(l+r)/2=5, A[mid] =17<19 B3: l=mid+1=6, mid=(l+r)/2=6, A[mid]=19 =X dng

13

Gi hm tm tuyn tnh v tm nh phn


void main() { int a[100], n, tv,x; nhp s phn t n; gi hm nhp mng 1 chiu; nhp gi tr cn tm x tv=LinearSearch(a,n,x); if(tv==1) printf(tm thy); else printf(khng tm thy); Tng t cho li gi hm BinarySearch; }
14

CU TRC D LIU V GII THUT 1_Mai Xun Hng

Cc Thut Ton Sp Xp
1. i ch trc tip Interchange Sort
CU TRC D LIU V GII THUT 1_Mai Xun Hng

2. Chn trc tip Selection Sort 3. Ni bt Bubble Sort 4. Chn trc tip Insertion Sort 5. Quick Sort

15

i Ch Trc Tip Interchange Sort

CU TRC D LIU V GII THUT 1_Mai Xun Hng

tng: Xut pht t u dy, tm tt cc cc nghch th cha phn t ny, trit tiu

chng bng cch i ch 2 phn t trong cp


nghch th. Lp li x l trn vi phn t k trong dy.

16

Cc Bc Tin Hnh
Bc 1: i = 0; // bt u t u dy Bc 2: j = i+1; //tm cc nghch th vi a[i] Bc 3: Trong khi j < N thc hin Nu a[j]<a[i] //xt cp a[i], a[j] Swap(a[i],a[j]); j = j+1; Bc 4: i = i+1; Nu i < N-1: Lp li Bc 2. Ngc li: Dng.
17

CU TRC D LIU V GII THUT 1_Mai Xun Hng

i Ch Trc Tip Interchange Sort


Cho dy s a: 12 2 8
CU TRC D LIU V GII THUT 1_Mai Xun Hng

15

i=0

j=1

i=0

j=4

18

i Ch Trc Tip Interchange Sort

CU TRC D LIU V GII THUT 1_Mai Xun Hng

i=1

j=2

i=1

j=3

i=1

19

j=4

i Ch Trc Tip Interchange Sort

CU TRC D LIU V GII THUT 1_Mai Xun Hng

i=2

j=3

i=2

j=4

i=2

20

j=6

i Ch Trc Tip Interchange Sort

CU TRC D LIU V GII THUT 1_Mai Xun Hng

i=3

j=4

i=3

j=5

i=3 21

j=6

i Ch Trc Tip Interchange Sort

CU TRC D LIU V GII THUT 1_Mai Xun Hng

i=4

j=5

i=4

j=6

i=5
22

j=6

CU TRC D LIU V GII THUT 1_Mai Xun Hng

i Ch Trc Tip Interchange Sort

23

i=6
j=7

CU TRC D LIU V GII THUT 1_Mai Xun Hng

Demo

1 12
2 8 5

i 0 1 2 3

24

1 4 5 6 7 6 4 15

CU TRC D LIU V GII THUT 1_Mai Xun Hng

1 12 2 8 5

Demo

0 1 2 3

25

2 4 5 6 7 6 4 15

CU TRC D LIU V GII THUT 1_Mai Xun Hng

1 2

Demo

0
0

i 1

4 12
8

2 3

26

j
5 4 5 6 7 6 4 15

CU TRC D LIU V GII THUT 1_Mai Xun Hng

1 2 4

Demo

0 1 2
0

5 12

27

4 5 6 7

6 5 15

CU TRC D LIU V GII THUT 1_Mai Xun Hng

Demo

0
1

1
2

2
4

3
0

28

12 6

4 5 6 7

j
6 15

CU TRC D LIU V GII THUT 1_Mai Xun Hng

Demo

0
1 2 4 5

1 2 3

29

6 4 i
0

8 12

5 6 7

j
15

CU TRC D LIU V GII THUT 1_Mai Xun Hng

Demo

0
1

1
2 4 5

2 3

30

6 4 5 i
0

8 12 6 7

15

CU TRC D LIU V GII THUT 1_Mai Xun Hng

Demo

1 1 2 3 5 4 2 4

31

6 8 12 15

5 6 7 8

Ci t i Ch Trc Tip
void Swap(int &x,int &y) { int tam; tam=x; x=y; y=tam;

CU TRC D LIU V GII THUT 1_Mai Xun Hng

}
void InterchangeSort(int a[], int N ) { int i, j; for (i = 0 ; i<N-1 ; i++) for (j =i+1; j < N ; j++) if(a[j ]< a[i]) // Tha 1 cp nghch th Swap(a[i], a[j]); }
32

Bi tp p dng
9
CU TRC D LIU V GII THUT 1_Mai Xun Hng

7 4
4 4

9 9
9 7

4 7
7 9

5 5
5 5

8 8
8 8

933

CU TRC D LIU V GII THUT 1_Mai Xun Hng

Bi tp p dng

4 4 5 7 5 7

4 5 9

34

8 9

9 8

7 8

Chn Trc Tip Selection Sort


tng:
CU TRC D LIU V GII THUT 1_Mai Xun Hng

Chn phn t nh nht trong N phn t trong dy hin hnh ban u. a phn t ny v v tr u dy hin hnh

Xem dy hin hnh ch cn N-1 phn t ca dy hin hnh ban u


Bt u t v tr th 2; Lp li qu trnh trn cho dy hin hnh... n khi dy hin hnh ch cn 1 phn t
35

Cc Bc Ca Thut Ton Chn Trc Tip


Bc 1: i = 0;
CU TRC D LIU V GII THUT 1_Mai Xun Hng

Bc 2: Tm phn t a[min] nh nht trong dy hin hnh t a[i] n a[N] Bc 3 : i ch a[min] v a[i] Bc 4 : Nu i < N-1 th i = i+1; Lp li Bc 2; Ngc li: Dng.

36

Chn Trc Tip Selection Sort

CU TRC D LIU V GII THUT 1_Mai Xun Hng

Cho dy s a: 12 2 8

15

37

CU TRC D LIU V GII THUT 1_Mai Xun Hng

i=0

i=1

Chn Trc Tip Selection Sort

38

CU TRC D LIU V GII THUT 1_Mai Xun Hng

i=2

i=3

Chn Trc Tip Selection Sort

39

i=4

CU TRC D LIU V GII THUT 1_Mai Xun Hng

Chn Trc Tip Selection Sort

40

i=5

i=6

Minh Ha Thut Ton Chn Trc Tip


V tr nh nht(0,7)
CU TRC D LIU V GII THUT 1_Mai Xun Hng

Swap(a[0], a[4])

vtmin 12 2 8 5 1 6 4 15

0
i

41

Minh Ha Thut Ton Chn Trc Tip


V tr nh nht(1,7)
CU TRC D LIU V GII THUT 1_Mai Xun Hng

Swap(a[1], a[1])

vtmin 1 2 8 5 12 6 4 15

0
i

42

Minh Ha Thut Ton Chn Trc Tip


V tr nh nht(2,7)
CU TRC D LIU V GII THUT 1_Mai Xun Hng

Swap(a[2], a[6])

vtmin 1 2 8 5 12 6 4 15

1
i

43

Minh Ha Thut Ton Chn Trc Tip


V tr nh nht(3, 7)
CU TRC D LIU V GII THUT 1_Mai Xun Hng

Swap(a[3], a[3])

vtmin 1 0 2 1 4 2 i 5 3 12 4 6 5 8 6 15 7

44

Minh Ha Thut Ton Chn Trc Tip


V tr nh nht(4, 7)
CU TRC D LIU V GII THUT 1_Mai Xun Hng

Swap(a[4], a[5]) vtmin

12

15

3
i

45

Minh Ha Thut Ton Chn Trc Tip


V tr nh nht(5,7)
CU TRC D LIU V GII THUT 1_Mai Xun Hng

Swap(a[5], a[6]) vtmin

1 0

2 1

4 2

5 3

6 4 i

12 5

8 6

15 7

46

Minh Ha Thut Ton Chn Trc Tip


V tr nh nht(6, 7)
CU TRC D LIU V GII THUT 1_Mai Xun Hng

vtmin 1 0 2 1 4 2 5 3 6 4 8 5 i 12 6 15 7

47

Ci t Thut Ton Chn Trc Tip


void SelectionSort(int a[],int n ) { int vtmin,i,j; // ch s phn t nh nht trong dy hin hnh for (i=0; i<n-1 ; i++) //ch s u tin ca dy hin hnh { vtmin = i; for(j = i+1; j <N ; j++) if (a[j ] < a[vtmin]) vtmin = j; // lu vtr phn t hin nh nht Swap(a[vtmin],a[i]); } }
48

CU TRC D LIU V GII THUT 1_Mai Xun Hng

Cho bit kt qu chy tng bc


9
CU TRC D LIU V GII THUT 1_Mai Xun Hng

4 4
4 4

7 4
4 4

9 9
7 7
49

4 7
9 8

8 8
8 9

Ni Bt Bubble Sort
tng:
CU TRC D LIU V GII THUT 1_Mai Xun Hng

Xut pht t cui dy, i ch cc cp phn t k cn a phn t nh hn trong cp phn t v v tr ng u dy hin hnh, sau s khng xt n n bc tip theo, do vy ln x l th i s c v tr u dy l i. Lp li x l trn cho n khi khng cn cp phn t no xt.
50

Ni Bt Bubble Sort
Bc 1 : i = 0; // ln x l u tin Bc 2 : j = N-1;//Duyt t cui dy ngc v v tr i Trong khi (j > i) thc hin: Nu a[j]<a[j-1] Doicho(a[j],a[j-1]); j = j-1; Bc 3 : i = i+1; // ln x l k tip Nu i =N-1: Ht dy. Dng Ngc li : Lp li Bc 2.

CU TRC D LIU V GII THUT 1_Mai Xun Hng

51

Ni Bt Bubble Sort
Cho dy s a: 2 12 8

CU TRC D LIU V GII THUT 1_Mai Xun Hng

15

i=0

j=6

i=0
52

i=4

CU TRC D LIU V GII THUT 1_Mai Xun Hng

Ni Bt Bubble Sort

i=0

i=0
i=0

j=1 j=2

j=3

53

CU TRC D LIU V GII THUT 1_Mai Xun Hng

i=1 i=1 j=3


54

Ni Bt Bubble Sort

i=1

j=4 j=5

CU TRC D LIU V GII THUT 1_Mai Xun Hng

i=2

i=2

Ni Bt Bubble Sort

i=355 j=4 j=5 j=6

CU TRC D LIU V GII THUT 1_Mai Xun Hng

Ni Bt Bubble Sort

56

i=3

i=4

i=5

j=5

j=6

CU TRC D LIU V GII THUT 1_Mai Xun Hng

12 1 2 8 5

0 1 2 3

Minh Ha Thut Ton

57

1 4 5 6 7 6 4

15

CU TRC D LIU V GII THUT 1_Mai Xun Hng

2 12
2 8

1 2 3

Minh Ha Thut Ton

58

5 4 5 6 7 4 6

15

CU TRC D LIU V GII THUT 1_Mai Xun Hng

1 2 4 12 4

0 i 1 2 3

Minh Ha Thut Ton

59

8 4 5 6 7 5 6

15

CU TRC D LIU V GII THUT 1_Mai Xun Hng

1 2 4

0 1 2 3 i

Minh Ha Thut Ton

12 5

60

8 4 5 6 7 5 6

15

CU TRC D LIU V GII THUT 1_Mai Xun Hng

1 2 4 5

0 1 2 3 i

Minh Ha Thut Ton

61

12 6 4 5 6 7 8 6

15

CU TRC D LIU V GII THUT 1_Mai Xun Hng

1 2 4 5

0 1 2 3

Minh Ha Thut Ton

62

6 i 4 5 6 7

8 12
8

15

CU TRC D LIU V GII THUT 1_Mai Xun Hng

1 1 2 3 5 4 2 4

Minh Ha Thut Ton

63

6 8 i 12 15

5 6 7

j 8

Ci t Thut Ton Ni Bt
void BubbleSort(int a[],int n) { int i, j; for (i = 0 ; i<n-1 ; i++) for (j =n-1; j >i ; j --) if(a[j]< a[j-1])// nu sai v tr th i ch Swap(a[j], a[j-1]);

CU TRC D LIU V GII THUT 1_Mai Xun Hng

64

Ghi kt qu chy tng bc


9
CU TRC D LIU V GII THUT 1_Mai Xun Hng

7 7 3 9 9 4

4 3 7 7 4 9

3 4 4 4 7 7

5 5 5 5 5 5

9 9 3 3 3

65

Ghi kt qu chy tng bc


3
CU TRC D LIU V GII THUT 1_Mai Xun Hng

66

Chn Trc Tip Insertion Sort


Gi s c mt dy a0 , a1 ,... ,an-1 trong i phn t u tin a0 , a1 ,... ,ai-1 c th t. Tm cch chn phn t ai vo v tr thch hp ca on c sp c dy mi a0 , a1,... ,ai tr nn c th t. V tr ny chnh l v tr gia hai phn t ak-1 v ak tha ak-1 < ai < ak (1ki).

CU TRC D LIU V GII THUT 1_Mai Xun Hng

67

Chn Trc Tip Insertion Sort


Bc 1: i = 1; //gi s c on a[1] c sp
CU TRC D LIU V GII THUT 1_Mai Xun Hng

Bc 2: x = a[i]; Tm v tr pos thch hp trong on a[1] n a[i-1] chn a[i] vo Bc 3: Di ch cc phn t t a[pos] n a[i-1] sang phi 1 v tr dnh ch cho a[i] Bc 4: a[pos] = x; //c on a[1]..a[i] Bc 5: i = i+1; Nu i < n : Lp li Bc 2 Ngc li : Dng
68

c sp

Chn Trc Tip Insertion Sort


Cho dy s : 12 2 8
CU TRC D LIU V GII THUT 1_Mai Xun Hng

15

i=1

i=2
69

CU TRC D LIU V GII THUT 1_Mai Xun Hng

i=3

Chn Trc Tip Insertion Sort

70

i=4

i=5

CU TRC D LIU V GII THUT 1_Mai Xun Hng

Chn Trc Tip Insertion Sort

71

i=6

i=7

Minh Ha Thut Ton Insertion Sort

CU TRC D LIU V GII THUT 1_Mai Xun Hng

12

15

72

Minh Ha Thut Ton Insertion Sort


Insert a[1] into (0,0)
CU TRC D LIU V GII THUT 1_Mai Xun Hng

pos 2 12 0 2 1 i 8 2 5 3 1 4 6 5 4 6 15 7

x
73

Minh Ha Thut Ton Insertion Sort


Insert a[2] into (0, 1)
CU TRC D LIU V GII THUT 1_Mai Xun Hng

pos 2 0 8 12 1 i 8 2 5 3 1 4 6 5 4 6 15 7

x
74

Minh Ha Thut Ton Insertion Sort


Insert a[3] into (0, 2)
CU TRC D LIU V GII THUT 1_Mai Xun Hng

pos 2 0 5 8 1 12 2 i 5 3 1 4 6 5 4 6 15 7

x
75

Minh Ha Thut Ton Insertion Sort


Insert a[4] into (0, 3)
CU TRC D LIU V GII THUT 1_Mai Xun Hng

pos 2 1 5 8 12 1 6 4 15

3
i

x
76

Minh Ha Thut Ton Insertion Sort


Insert a[5] into (0, 4)
CU TRC D LIU V GII THUT 1_Mai Xun Hng

pos 1 0 2 1 5 2 6 8 3 12 4 i 6 5 4 6 15 7

x
77

Minh Ha Thut Ton Insertion Sort


Insert a[6] into (0, 5)
CU TRC D LIU V GII THUT 1_Mai Xun Hng

pos 1 0 2 1 4 5 2 6 3 8 4 12 5 i 4 6 15 7

x
78

Minh Ha Thut Ton Insertion Sort


Insert a[8] into (0, 6)
CU TRC D LIU V GII THUT 1_Mai Xun Hng

pos 1 0 2 1 4 2 5 3 6 4 8 5 12 6 i 15 7

x
79

Minh Ha Thut Ton Insertion Sort

CU TRC D LIU V GII THUT 1_Mai Xun Hng

pos
1 0 2 1 4 2 5 3 6 4 8 5 12 6 15 7

80

Ci t Thut Ton Chn Trc Tip


void InsertionSort(int d, int n ) { int pos, i; int x;//lu gi tr a[i] trnh b ghi khi di ch cc phn t. for(i=1 ; i<n ; i++) //on a[0] sp { x = a[i]; pos = i-1;
// tm v tr chn x

CU TRC D LIU V GII THUT 1_Mai Xun Hng

while((pos >= 0)&&(a[pos] > x)) {//kt hp di ch cc phn t s ng sau x trong dy mi a[pos+1] = a[pos]; pos--; } a[pos+1] = x; // chn x vo dy }

}
81

Kt qu chy tng bc
9
CU TRC D LIU V GII THUT 1_Mai Xun Hng

7
4 3

9
7 4

4
9 7

3
3 9

5
5 5

5
82

Quick Sort
tng:
CU TRC D LIU V GII THUT 1_Mai Xun Hng

Gii thut QuickSort sp xp dy a1, a2 ..., aN da trn vic phn hoch dy ban u thnh 3 phn : Phn 1:Gm cc phn t c gi tr b hn x

Phn 2: Gm cc phn t c gi tr bng x


Phn 3: Gm cc phn t c gi tr ln hn x vi x l gi tr ca mt phn t ty trong dy ban u.
83

Quick Sort - Tng

CU TRC D LIU V GII THUT 1_Mai Xun Hng

Sau khi thc hin phn hoch, dy ban u c phn thnh 3 on:

1. ak x , vi k = 0 .. j 2. ak = x , vi k = j+1 .. i-1 3. ak x , vi k = i..N-1

84

Quick Sort Tng

CU TRC D LIU V GII THUT 1_Mai Xun Hng

on th 2 c th t.
Nu cc on 1 v 3 ch c 1 phn t : c th t

khi dy con ban u c sp.

85

Quick Sort Tng

CU TRC D LIU V GII THUT 1_Mai Xun Hng

on th 2 c th t. Nu cc on 1 v 3 c nhiu hn 1 phn t th dy ban u ch c th t khi cc on 1, 3 c sp. sp xp cc on 1 v 3, ta ln lt tin hnh vic phn hoch tng dy con theo cng phng php phn hoch dy ban u va trnh by
86

Gii Thut Quick Sort


Bc 1: Nu left right //dy c t hn 2 phn t Kt thc; //dy c sp xp
Bc 2: Phn hoch dy aleft aright thnh cc on: aleft.. aj, aj+1.. ai-1, ai.. aright on 1 x on 2: aj+1.. ai-1 = x on 3: ai.. aright x

CU TRC D LIU V GII THUT 1_Mai Xun Hng

Bc 3: Sp xp on 1: aleft.. aj Bc 4: Sp xp on 3: ai.. aright

87

Gii Thut Quick Sort


Bc 1 : Chn ty mt phn t a[k] trong dy l gi tr mc ( l k r):
CU TRC D LIU V GII THUT 1_Mai Xun Hng

x = a[k]; i = l; j = r;
Bc 2 : Pht hin v hiu chnh cp phn t a[i], a[j] nm sai ch :

Bc 2a : Trong khi (a[i]<x) i++; Bc 2b : Trong khi (a[j]>x) j--;

Bc 2c : Nu i< j oicho(a[i],a[j]);
Bc 3 : Nu i < j: Lp li Bc 2. Ngc li: Dng
88

Quick Sort V D
Cho dy s a: 12 2 8
CU TRC D LIU V GII THUT 1_Mai Xun Hng

15

Phn hoch on l =0, r = 7:

x = a[3] = 5

12

15

l=0

r=7

89

CU TRC D LIU V GII THUT 1_Mai Xun Hng

Quick Sort V D

l=0

90

r=7

Quick Sort V D
Phn hoch on l =0, r = 2:
CU TRC D LIU V GII THUT 1_Mai Xun Hng

x = a[2] = 2

l=0

r=2

91

Quick Sort V D
Phn hoch on l = 4, r = 7:
CU TRC D LIU V GII THUT 1_Mai Xun Hng

x = a[5] = 6

l=4

r=7

92

Phn hoch on l = 6, r = 7:
CU TRC D LIU V GII THUT 1_Mai Xun Hng

x = a[6] = 6

l=6

r=7

93

Quick Sort V D
Phan hoach day
CU TRC D LIU V GII THUT 1_Mai Xun Hng

i 0
12 left

1 2

2 8

3 5 5 X

4 1

5 6

6 4

j 7
15 right

STOP

STOP

Khng nh hn X Khng ln hn X
94

Quick Sort V D
Phan hoach day
X
CU TRC D LIU V GII THUT 1_Mai Xun Hng

5 3 8 4 5 5 1

1 4 left

i 2
2

j 6
6

7 12

8 15 right

STOP

STOP

Khng nh hn X Khng ln hn X

95

Quick Sort V D

CU TRC D LIU V GII THUT 1_Mai Xun Hng

1 4 left

2 2

j 3
1

4 5

i 5
8

6 6

7 12

8 15 right

96

Quick Sort V D
Phan hoach day
X
CU TRC D LIU V GII THUT 1_Mai Xun Hng

6
7 12

1 1

2 2

3 4

4 5

i 5
8 left

6 6

j 8
15 right

Sap xep oan 3

STOP

STOP

Khng nh hn X Khng ln hn X

97

Quick Sort V D

CU TRC D LIU V GII THUT 1_Mai Xun Hng

1 1

2 2

3 4

4 5

j 5
6 left

i 6
8

7 12

8 15 right

Sap xep oan 3

98

Quick Sort
void QuickSort(int a[], int left, int right) { int i, j, x; x = a[(left+right)/2]; i = left; j = right; while(i < j) { while(a[i] < x) i++; while(a[j] > x) j--; if(i <= j) { Doicho(a[i],a[j]); i++ ; j--; } } if(left<j) QuickSort(a, left, j); if(i<right) QuickSort(a, i, right); }
99

CU TRC D LIU V GII THUT 1_Mai Xun Hng

Bi tp p dng
12
CU TRC D LIU V GII THUT 1_Mai Xun Hng

2 2 2 2 2

8 8 1 4 4

5 5 5 5 5
100

1 1 8 8 6

6 6 6 6 8

4 12 12 12 12

15 15 15 15 15

4 4 1 1

CU TRC D LIU V GII THUT 1_Mai Xun Hng

NI DUNG

CU TRC D LIU NG

101

Bin Tnh
c khai bo tng minh, c tn gi
CU TRC D LIU V GII THUT 1_Mai Xun Hng

Tn ti trong phm vi khai bo c cp pht trong stack Kch thc khng i => khng tn dng hiu qu b nh V d : int x,y;

char c; float f[5]; Khi bit chc nhu cu s dng i tng trc 102 khi thc s x l : dng bin khng ng

V D Hn Ch Ca Bin Tinh
Khai bo mng mt chiu c th cha ti a 100 phn t:
CU TRC D LIU V GII THUT 1_Mai Xun Hng

int a[100]; int n; // S phn t x dng thc s

Nu nhp n <100, d vng nh => lng ph


Nu nhp n > 50 => thiu ch !

103

Bin ng Khng c khai bo tng minh, khng c tn gi


CU TRC D LIU V GII THUT 1_Mai Xun Hng

Xin khi cn, gii phng khi s dng xong c cp pht trong heap Linh ng v kch thc Vn : bin ng khng c tn gi tng minh, lm sao thao tc ?

104

Kiu con tr
Kiu con tr dng lu a ch ca mt i tng d liu khc.
CU TRC D LIU V GII THUT 1_Mai Xun Hng

Bin thuc kiu con tr Tp l bin m gi tr ca n l a ch cu mt vng nh ng vi mt bin kiu T, hoc l gi tr NULL. Khai bo trong C : typedef int *intpointer; intpointer p; Bn thn bin con tr l khng ng Dng bin con tr lu gi i ch ca bin ng => truy xut bin ng thng qua bin con tr 105

Cc thao tc trn kiu con tr


To ra mt bin ng v cho con tr p ch n n:
CU TRC D LIU V GII THUT 1_Mai Xun Hng

void* malloc(size); void* calloc(n,size); new // hm cp pht b nh trong C++ Hy mt bin ng do p ch n : Hm free(p) hu vng nh cp pht bi hm malloc hoc calloc do p tr ti Hm delete p hu vng nh cp pht bi hm new do p tr ti
106

S dng bin tinh, con tr v bin ng


&: Ton t ly a ch
CU TRC D LIU V GII THUT 1_Mai Xun Hng

*: Ly gi tr ti vng nh con tr ang lu


int y = 5; int *yP; yP = &y; // yP gets address of y printf(%d,%d,y,*yp);
111f 1f yP

1f is address of a

1f

Gi tr yP l mt a ch a ch ca bin y l gi tr ca con tr yp
107

V d cp pht ng cho mng mt chiu


void main() { int *a, n; printf(Nhap so phan tu cua mang n=); scanf(%d,&n); a=(int*)malloc(n*sizeof(int)); //Nhap mng 1 chiu //Thao tc cc phn t trn mng free (a); } Hn ch: Cc vng nh phi trng mt cch lin tc mi cp c
108

CU TRC D LIU V GII THUT 1_Mai Xun Hng

CU TRC D LIU V GII THUT 1_Mai Xun Hng

Hn ch ca cch cp pht ng cho mng

109

Kiu danh sch


Danh sch = { cc phn t c cng kiu}
CU TRC D LIU V GII THUT 1_Mai Xun Hng

Danh sch l mt kiu d liu tuyn tnh : Mi phn t c nhiu nht 1 phn t ng trc Mi phn t c nhiu nht 1 phn t ng sau

L kiu d liu quen thuc trong thc t :


Danh sch hc sinh Danh mc sch trong th vin Danh b in thoi Danh sch cc nhn vin trong cng ty

110

Cc hnh thc t chc danh sch

CU TRC D LIU V GII THUT 1_Mai Xun Hng

CTDL cho mi phn t ? Th hin lin kt ca cc phn t ? Hai hnh thc c bn : Lin kt ngm : Lin kt tng minh : Mng Danh sch lin kt

111

Danh sch lin kt ngm (mng) Mi lin h gia cc phn t c th hin ngm:
x0 xi : phn t th i trong danh sch
CU TRC D LIU V GII THUT 1_Mai Xun Hng

xi

xi+1

xi , xi+1 l k cn trong danh sch

Phi lu tr lin tip cc phn t trong b nh


cng thc xc nh a ch phn t th i: address(i) = address(1) + (i-1)*sizeof(T)

u im : Truy xut trc tip, nhanh chng


Nhc im: S dng b nh km hiu qu Kch thc c nh Cc thao tc thm vo , loi b khng hiu 112

Lin kt tung minh(Danh snh lin kt) CTDL cho mt phn t Thng tin bn thn a ch ca phn t k trong danh sch
x0

CU TRC D LIU V GII THUT 1_Mai Xun Hng

x2 x1

x3

Mi phn t l mt bin ng u im + S dng hiu qu b nh + Linh ng v s lng phn t


113

Cc loi danh sch lin kt


Danh sch lin kt n: Mi phn t lin kt vi
CU TRC D LIU V GII THUT 1_Mai Xun Hng

phn t ng sau n trong danh sch


A B C D

Danh sch lin kt kp: Mi phn t lin kt vi phn t ng trc v sau n trong danh sch
A B C D

Danh sch lin Vng: Phn t cui danh sch lin vi phn t u danh sch
114

Cc loi danh sch lin kt (tt)

phn t u danh sch


CU TRC D LIU V GII THUT 1_Mai Xun Hng

Danh sch lin Vng: Phn t cui danh sch lin vi

Danh sch lin kt n vng


A B C D

Danh sch lin kt i vng


A B C D

115

CU TRC D LIU V GII THUT 1_Mai Xun Hng

NI DUNG

DANH SCH LIN KT N (LIST)

116

T Chc Ca DSLK n

x0
CU TRC D LIU V GII THUT 1_Mai Xun Hng

x2
x1

x3

Mi phn t lin kt vi phn t ng lin sau trong danh sch Mi phn t trong danh sch lin kt n l mt cu trc c hai thnh phn

Thnh phn d liu: Lu tr thng tin v bn thn phn t Thnh phn lin kt: Lu a ch phn t ng sau trong danh sch hoc bng NULL nu l phn t cui danh sch. 117

Bi tp p dng
Dng danh sch lin kt n qun l cc sinh vin trong 1 lp hc, bit rng cu trc d liu ca mt sinh vin gm tn (chui k t), m s (chui k t), im trung bnh (s thc). Thc hin cc yu cu sau: 1. Thm 1 sinh vin vo lp hc (thm u, thm cui) 2. Tm kim 1 sinh vin c tn X trong lp hc (x nhp). 3. Tm 1 sinh vin c m s bng X (X nhp) 4. Lit k tn cung im trung bnh ca nhng sinh vin c im trung bnh >=5 5. m s sinh vin c tn bng X trong lp hc
118

CU TRC D LIU V GII THUT 1_Mai Xun Hng

CU TRC D LIU V GII THUT 1_Mai Xun Hng

6. Cho bit im trung bnh cao nht trong lp hc l bao nhiu 7. Lit k tn cng im trung bnh ca nhng sinh vin c im trung bnh cao nht trong lp hc. 8. Xa sinh vin c m s bng x trong lp hc, nu khng c th thng bo khng c 9. Xp th hng cho cc sinh vin trong lp 10. Sp xp danh sch sinh vin tng theo im trung bnh 11. Chn mt sinh vin vo danh sach sinh vin c sp xp cu 10, sao cho sau khi chn danh sach sinh vin vn c sp xp
119

CTDL ca DSLK n
Cu trc d liu ca 1 nt trong List n

CU TRC D LIU V GII THUT 1_Mai Xun Hng

typedef struct tagNode { Data Info; // Lu thng tin bn thn struct tagNode *pNext; //Lu a ch ca Node ng sau }Node;
Cu trc d liu ca DSLK n

Info typedef struct tagList { Node *pHead;//Lu a ch Node u tin trong List Node *pTail; //Lu a ch ca Node cui cng trong
List

pNext

}List;

// kiu danh sch lin kt n


120

p dng cho bi qun l sinh vin


typedef struct tagSV
{
CU TRC D LIU V GII THUT 1_Mai Xun Hng

char ten[40]; char MSSV[40]; float TB; }SV;//Cu trc d liu ca mt sinh vin typedef struct tagNode
{

SV Info; // Lu thng tin bn thn struct tagNode* pNext; // Lu a ch ca Node ng sau }Node;
121

Cu trc d liu ca DSLK n


CU TRC D LIU V GII THUT 1_Mai Xun Hng

typedef struct { Node *pHead;//Lu a ch Node u tin


trong List

Node *pTail; //Lu a ch ca Node cui


cng trong List

}List;

// kiu danh sch lin kt n

122

Cch truy xut n cc thuc tnh ca i tng Node p,*q; p.Info.DTB=9.0 p->pNext;//sai v p khng l con tr q->Info.DTB=9.0 q.pNext;//sai v q l con tr

CU TRC D LIU V GII THUT 1_Mai Xun Hng

123

V d t chc DSLK n trong b nh

pHead
CU TRC D LIU V GII THUT 1_Mai Xun Hng

pTail 4f 5f

3f

4f

5f

NULL

Trong v d trn thnh phn d liu l 1 s nguyn

124

Cc thao tc c bn trn DSLK n

To 1 danh sch lin kt n rng


CU TRC D LIU V GII THUT 1_Mai Xun Hng

To 1 nt c trng Infor bng x Tm mt phn t c Info bng x Thm mt phn t c kha x vo danh sch Hy mt phn t trong danh sch Duyt danh sch

Sp xp danh sch lin kt n

125

Khi to danh sch lin kt

CU TRC D LIU V GII THUT 1_Mai Xun Hng

a ch ca nt u tin, a ch ca nt cui cng u khng c void CreateList(List &l) {

l.pHead=NULL;
l.pTail=NULL; }

126

To 1 phn t mi Hm tr v a ch phn t mi to
CU TRC D LIU V GII THUT 1_Mai Xun Hng

Node* CreateNode(int x) { Node *p; p = new Node;//Cp pht vng nh cho phn t

if ( p==NULL) exit(1);
p ->Info = x; return p;
}
127

//gn da liu cho nt

p->pNext = NULL;

p dng cho bi qun l sinh vin


Node* CreateNode(SV x) { Node* TamNode; TamNode = new Node; //Hm cp pht vng nh ng if(TamNode==NULL)
{ printf(khng b nh cp");

CU TRC D LIU V GII THUT 1_Mai Xun Hng

exit(1);
} TamNode->Info =x;//Trng d liu ca Node TamNode->Next = NULL; //Cha c Node ng sau

return TamNode;
}
128

Thm 1 phn t vo DSLK

CU TRC D LIU V GII THUT 1_Mai Xun Hng

Nguyn tc thm: Khi thm 1 phn t vo List th c lm cho pHead, pTail thay i? Cc v tr cn thm 1 phn t vo List:

Thm vo u List n

Thm vo cui List


Thm vo sau 1 phn t q trong list

129

Thut ton thm 1 phn t vo u DSLK Thm nt p vo u danh sch lin kt n


CU TRC D LIU V GII THUT 1_Mai Xun Hng

Bt u:

Nu List rng th
+ pHead = p; + pTail = pHead;

Ngc li
+ p->pNext = pHead; + pHead = p

130

Hm thm 1 phn t vo u List void AddHead(List &l, Node* p) { if (l.pHead==NULL) { l.pHead = p; l.pTail = p; } else { p->pNext = l.pHead; l.pHead = p; } }
131

CU TRC D LIU V GII THUT 1_Mai Xun Hng

Minh ha thut ton thm vo u

CU TRC D LIU V GII THUT 1_Mai Xun Hng

pHead

2f

3 3f

3f

4f

4 4f

9f
pHead=P

10
P

2f N
P->pNext=pHead

132

Thut ton thm vo cui DSLK


Ta cn thm nt p vo cui list n Bt u:
CU TRC D LIU V GII THUT 1_Mai Xun Hng

Nu List rng th + pHead = p; + pTail = pHead; Ngc li + pTail->pNext=p;

+ pTail=p

133

Hm thm 1 phn t vo cui DSLKD void AddTail(List &l, Node *p) { if (l.pHead==NULL) { l.pHead = p; l.pTail = l.pHead; } else { l.pTail->Next = p; l.pTail = p; } }
134

CU TRC D LIU V GII THUT 1_Mai Xun Hng

Minh ha thut ton thm vo cui

CU TRC D LIU V GII THUT 1_Mai Xun Hng

3f

4f

5f

pTail

4 4f

8 5f

5N 9f
pTail=P pTail->pNext

9f

6N
P

135

Thut ton them phn t p vo sau phn t q

Ta cn thm nt p vo sau nt q trong list n


CU TRC D LIU V GII THUT 1_Mai Xun Hng

Bt u: Nu (q!=NULL) th

B1: p->pNext = q->pNext


B2:

+ q->pNext = p
+ nu q = pTail th pTail=p

136

Ci t thut ton

CU TRC D LIU V GII THUT 1_Mai Xun Hng

void InsertAfterQ(List &l, Node *q, Node *p) { if(q!=NULL) { p->pNext=q->Next; q->pNext=p; if(l.pTail==q) l.pTail=p; } else AddHead(l,p);// thm q vo u list }
137

Minh ha thut ton

CU TRC D LIU V GII THUT 1_Mai Xun Hng

3f

4f q

5f
9f 7
P

4 4f

8 5f 9f
q->pNext=P

5 ..
N 5f
P->pNext=q->pNext

138

Chn sinh vin vo lp hc tng theo im TB


void Chen(List &l,SV sinhvien) { Node *Pos,*p,*Tam;//vi tri chua Node can them vao p=l.pHead; Pos=NULL; while((p!=NULL)&&(p->Info.DTB<sinhvien.DTB)) { Pos=p; p=p->Next; } Tam=CreateNode(sinhvien); //Hm to mt sinh vin InsertAfterQ(l,Pos,Tam); //Thm nt Tam vo sau nt Pos }

CU TRC D LIU V GII THUT 1_Mai Xun Hng

139

Hy phn t trong DSLK n Nguyn tc: Phi c lp phn t cn hy trc hy.


CU TRC D LIU V GII THUT 1_Mai Xun Hng

Cc v tr cn hy

Hy phn t ng u List Hy phn t c kho bng x Hu phn t ng sau q trong danh sch lin kt n
phn trn, cc phn t trong DSLK n c cp pht vng nh ng bng hm new, th s c gii phng vng nh bng hm delete.
140

Thut ton hy phn t trong DSLK

Bt u:
CU TRC D LIU V GII THUT 1_Mai Xun Hng

Nu (pHead!=NULL) th B1: p=pHead

B2:
+ pHead = pHead->pNext + delete (p) B3: Nu pHead==NULL th pTail=NULL
141

Ci t thut ton Hy c hm tr v 1, ngc li hm tr v 0 int RemoveHead(List &l, int &x) { Node *p; if(l.pHead!=NULL) { p=l.pHead; x=p->Info; //lu Data ca nt cn hy l.pHead=l.pHead->pNext; delete p; if(l.pHead==NULL) l.pTail=NULL; return 1; } return 0; }
142

CU TRC D LIU V GII THUT 1_Mai Xun Hng

Minh ho thut ton

CU TRC D LIU V GII THUT 1_Mai Xun Hng

pHead=pHead->pNext

pHead

1f

2f

3f

4f

7
P

2f
P=pHead

3f

4f

143

Hy phn t sau phn t q trong List

Bt u
CU TRC D LIU V GII THUT 1_Mai Xun Hng

Nu (q!=NULL) th //q tn ti trong List B1: p=q->pNext;// p l phn t cn hy

B2: Nu (p!=NULL) th // q khng phi l phn t cui


+ q->pNext=p->pNext;// tch p ra khi xu + nu (p== pTail) // nt cn hy l nt cui

pTail=q;
+ delete p;// hy p

144

Ci t thut ton int RemoveAfterQ(List &l, Node *q, int &x) { Node *p; if(q!=NULL) { p=q->pNext; //p l nt cn xo if(p!=NULL) // q khng phi l nt cui { if(p==l.pTail) //nt cn xo l nt cui cng l.pTail=q;// cp nht l pTail q->pNext=p->pNext; x=p->Info; delete p; } return 1; } else return 0; }
145

CU TRC D LIU V GII THUT 1_Mai Xun Hng

Minh ha thut ton

CU TRC D LIU V GII THUT 1_Mai Xun Hng

q
pHead 1f 2f

p-=q->pNext 3f

p
4f

2f

4f 3f

4f

q->pNext=p->pNext

146

Thut ton hy phn t c kho x

Bc 1:
Tm phn t p c kho bng x, v q ng trc p
CU TRC D LIU V GII THUT 1_Mai Xun Hng

Bc 2:

Nu (p!=NULL) th //tm thy phn t c kho bng x


Hy p ra khi List bng cch hy phn t ng sau q Ngc li Bo khng tm thy phn t c kho

147

Ci t thut ton int RemoveX(List &l, int x) { Node *p,*q = NULL; p=l.Head; while((p!=NULL)&&(p->Info!=x)) //tm { q=p; p=p->Next; } if(p==NULL) //khng tm thy phn t c kho bng x return 0; if(q!=NULL)//tm thy phn t c kho bng x DeleteAfterQ(l,q,x); else //phn t cn xo nm u List RemoveHead(l,x); return 1; }
148

CU TRC D LIU V GII THUT 1_Mai Xun Hng

Hy 1 sinh vinc c m s x Cch 1


void RemoveX(List &l, char *X) { Node *p,*q; p=l.Head; q=NULL; while((p!=NULL)&&(strcmp(p->Info.MSSV,X)!=0)) { q=p;//lu Node ng trc p p=p->Next;//Qua Node k } if(p==NULL) printf(khng thy sinh vin MS X); else if(q==NULL) RemoveHead(l); else RemoveAfterQ(l,q); }
149

CU TRC D LIU V GII THUT 1_Mai Xun Hng

Hy 1 sinh vin c m s x Cch 2


void {
CU TRC D LIU V GII THUT 1_Mai Xun Hng

RemoveX(List &l, char *X) Node *p,*q; p=l.pHead; q=NULL; while((p!=NULL)&&(strcmp(p->Info.MSSV,X)!=0)) { q=p;//lu Node ng trc p p=p->pNext;//Qua Node k }

if(p==NULL) printf(khng thy sinh vin MS X);

150

Hy 1 sinh vin c m s x Cch 2 (tt)


else //Nt tm thy l p { if(q==NULL) //xa u { l.pHead=p->Next; if(l.pHead==NULL) l.pTail=NULL } else { q->pNext=p->pNext; if(p==l.pTail) l.pTail = q; } delete p; }

CU TRC D LIU V GII THUT 1_Mai Xun Hng

}
151

CU TRC D LIU V GII THUT 1_Mai Xun Hng

Void main() { List l1; char x[40]; gets(x); RemoveX(l1,x); }

152

Tm 1 phn t trong DSLK n Tm tun t (hm tr v), cc bc ca thut ton tm nt c Info bng x trong list n
CU TRC D LIU V GII THUT 1_Mai Xun Hng

Bc 1: p=pHead;// a ch ca phn t u trong list n Bc 2: Trong khi p!=NULL v p->Info!=x p=p->pNext;// xt phn t k Bc 3: + Nu p!=NULL th p lu a ch ca nt c Info = x + Ngc li : Khng c phn t cn tm
153

Hm tm 1 phn t trong DSLK n

CU TRC D LIU V GII THUT 1_Mai Xun Hng

Hm tm phn t c Info = x, hm tr v a ch ca nt c Info = x, ngc li hm tr v NULL

Node *Search(List l, int x)


{ Node *p;
p = l.pHead;

while((p!= NULL)&&(p->Info != x))


p = p->pNext; return p;
154

Tm sinh vin c tn x trong lp hc


void Search(List l, char *X) { Node *p; p = l.pHead; while((p!= NULL)&&(strcmp(p->Info.ten, X)!=0) p = p->pNext; if( p==NULL) printf(tim khong thay); else printf(Tim thay); } Bi tp: m s sinh vin c tn l X trong lp

CU TRC D LIU V GII THUT 1_Mai Xun Hng

hc, nu khng c th thng bo khng c


155

Minh ha thut ton tm phn t trong DSLK

CU TRC D LIU V GII THUT 1_Mai Xun Hng

pHead

1f

34

2f

3f

4f

5f

56

P X = 8 Tm thy, hm tr v a ch ca nt tm thy l 4f

156

Duyt danh sch

CU TRC D LIU V GII THUT 1_Mai Xun Hng

Duyt danh sch l thao tc thng c thc hin khi c nhu cu cn x l cc phn t trong danh sch nh: m cc phn t trong danh sch
Tm tt c cc phn t trong danh sch tho iu kin Hy ton b danh sch

157

Thut ton duyt danh sch

Bc 1:
CU TRC D LIU V GII THUT 1_Mai Xun Hng

p = pHead;// p lu a ch ca phn t u trong List


Bc 2:

Trong khi (danh sch cha ht) thc hin


+ x l phn t p

+ p=p->pNext;// qua phn t k

158

Ci t in cc phn t trong List void PrintList(List l)


CU TRC D LIU V GII THUT 1_Mai Xun Hng

{ Node *p; p=l.pHead;

while(p!=NULL)
{ printf(%d p=p->pNext; , p->Info);

}
}

159

In tn cng im trung bnh ca sinh vin


void Duyet(List L)

{ Node *P; P=L.pHead; while(P!=NULL) { puts(P->Info.ten); printf(%f , P->Info. TB) ; P=P->pNext;//qua phn t k } }
160

CU TRC D LIU V GII THUT 1_Mai Xun Hng

CU TRC D LIU V GII THUT 1_Mai Xun Hng

In tn cng im trung bnh ca sinh vin c im trung bnh >=5 void Duyet(List L) { Node *P; P=L.pHead; while(P!=NULL) { if(P->Info.DTB>=5) { puts(P->Info.ten); printf(%f , P->Info. TB); } P=P->pNext;//qua phn t k }
161

Hy danh sch lin kt n

CU TRC D LIU V GII THUT 1_Mai Xun Hng

Bc 1:

Trong khi (danh sch cha ht) thc hin B11: p = pHead;

pHead = pHead->pNext;// cp nht pHead


B12: Hy p
Bc 2: pTail = NULL;// bo ton tnh nht qun khi xu rng
162

Ci t thut ton
void RemoveList(List &l) {
CU TRC D LIU V GII THUT 1_Mai Xun Hng

Node *p;
while(l.pHead!=NULL)//cn phn t trong List { p = l.pHead; l.pHead = p->pNext; delete p; } l.pTail=NULL; }

163

Minh ha thut ton

pHead
CU TRC D LIU V GII THUT 1_Mai Xun Hng

pTail 2f 3f

1f

4f

5f

7
p

2f

3f

4f

5f

164

Sp xp danh sch
C hai cch tip cn Cch 1: Thay i thnh phn Info 3f 4
pHead

CU TRC D LIU V GII THUT 1_Mai Xun Hng

pHead

pTail

4f

4f 7

5f 5f 6
pTail

3f 4

4f

4f 6

5f 5f 7 N

165

Sp xp danh sch

CU TRC D LIU V GII THUT 1_Mai Xun Hng

Cch 2: Thay i thnh phn pNext (thay i trnh t mc ni ca cc phn t sao cho to lp nn c th t mong mun)
pHead pTail

3f 4
pHead 3f

4f

4f 7

5f
5f
pTail

6
5f

4f

5f

4f

166

u, nhc im ca 2 cch tip cn


Thay i thnh phn Info (d liu)

u: Ci t n gin, tng t nh sp xp mng Nhc:


CU TRC D LIU V GII THUT 1_Mai Xun Hng

i hi thm vng nh khi hon v ni dung ca 2 phn t -> ch ph hp vi nhng xu c kch thc Info nh Khi kch thc Info (d liu) ln chi ph cho vic hon v thnh phn Info ln Lm cho thao tc sp xp chm Thay i thnh phn pNext u: Kch thc ca trng ny khng thay i, do khng ph thuc vo kch thc bn cht d liu lu ti mi nt. Thao tc sp xp nhanh
167

Dng thut ton SX SelectionSort SX List void SelectionSort(List &l) { Node *p,*q,*min; p=l.pHead; while(p!=l.pTail) { min=p; q=p->pNext; }
168

CU TRC D LIU V GII THUT 1_Mai Xun Hng

while(q!=NULL) { if(q->Info<min->Info) min=q; q=q->pNext; } Swap(min->Info,p->Info p=p->pNext; }

Hm hon v thnh phn d liu ca 2 nt


void Swap(SV &s1,SV &s2) { SV tam; tam=s1; s1=s2; s2=tam; }

CU TRC D LIU V GII THUT 1_Mai Xun Hng

169

Sp xp tng theo TB _ cch 1

CU TRC D LIU V GII THUT 1_Mai Xun Hng

void InterchangeSort(List l) { Node *p,*q; for(p=l.pHead; p!=l.pTail;p=p->pNext) for(q=p->pNext;q!=NULL;q=q->pNext) if(q->Info.DTB<p->Info.DTB) Swap(q->Info,p->Info); }


170

Sp xp danh sch sinh vin tng theo im _c2


void SelectionSortList(List &l) { Node *p,*q,*min; p=l.pHead; while(p!=l.pTail) { min=p; q=p->pNext; while(q!=NULL) { if(q->Info.DTB<min->Info.DTB) min=q; q=q->pNext; } Swap(min->Info,p->Info); p=p->pNext; } }
171

CU TRC D LIU V GII THUT 1_Mai Xun Hng

CU TRC D LIU V GII THUT 1_Mai Xun Hng

NI DUNG

CY NH PHN TM KIM

172

nh ngha cy nh phn tm kim


Cy nh phn Bo m nguyn tc b tr kho ti mi nt: Cc nt trong cy tri nh hn nt hin hnh Cc nt trong cy phi ln hn nt hin hnh

CU TRC D LIU V GII THUT 1_Mai Xun Hng

V d:
13

18

37

15
173

23

40

u im ca cy nh phn tm kim

CU TRC D LIU V GII THUT 1_Mai Xun Hng

Nh trt t b tr kha trn cy : nh hng c khi tm kim Cy gm N phn t : Trng hp tt nht h = log2N Trng hp xu nht h = N Tnh hung xy ra trng hp xu nht?

174

Cu trc d liu ca cy nh phn tm kim Cu trc d liu ca 1 nt typedef struct tagTNode { int Key; //trng d liu l 1 s nguyn struct tagTNode *pLeft; struct tagTNode *pRight; }TNode; Cu trc d liu ca cy typedef TNode *TREE;

CU TRC D LIU V GII THUT 1_Mai Xun Hng

175

Cc thao tc trn cy nh phn tm kim


To 1 cy rng
CU TRC D LIU V GII THUT 1_Mai Xun Hng

To 1 nt c trng Key bng x Thm 1 nt vo cy nh phn tm kim Duyt cy nh phn tm kim Xo 1 nt c Key bng x trn cy Tm 1 nt c kho bng x trn cy

176

To cy rng Cy rng -> a ch nt gc bng NULL void CreateTree(TREE &T) { T=NULL; }

CU TRC D LIU V GII THUT 1_Mai Xun Hng

177

To 1 nt c Key bng x
TNode *CreateTNode(int x) { TNode *p; p = new TNode; //cp pht vng nh ng if(p==NULL) exit(1); // thot else { p->key = x; //gn trng d liu ca nt = x p->pLeft = NULL; p->pRight = NULL; } return p; } 178

CU TRC D LIU V GII THUT 1_Mai Xun Hng

Thm mt nt x
Rng buc: Sau khi thm cy m bo l cy nh

phn tm kim.
CU TRC D LIU V GII THUT 1_Mai Xun Hng

int insertNode(TREE &T, Data X) { if(T) { if(T->Key == X) return 0; if(T->Key > X) return insertNode(T->pLeft, X); else return insertNode(T->pRight, X);} T= new TNode; if(T == NULL) return -1; T->Key = X; T->pLeft =T->pRight = NULL; return 1;
}
179

Minh ha thm 1 phn t vo cy


44 44 < X

Them X=50
CU TRC D LIU V GII THUT 1_Mai Xun Hng

18

88 > X

88

13

37

59 > X

59

108

15

23

40 55 > X

55

71

50
180

Minh ho thnh lp 1 cy t dy s 9, 5, 4, 8, 6, 3, 14,12,13 9


CU TRC D LIU V GII THUT 1_Mai Xun Hng

5
4 3 6

14 8
12

13

181

Tm nt c kho bng x (khng dng quy)

CU TRC D LIU V GII THUT 1_Mai Xun Hng

TNode * searchNode(TREE Root, int x) { TNode *p = Root; while (p != NULL) { if(x == p->Key) return p; else if(x < p->Key) p = p->pLeft; else p = p->pRight; } return p; }
182

Tm nt c kho bng x (dng quy)


TNode *SearchTNode(TREE T, int x) { if(T!=NULL) { if(T->key==x) return T; else if(x>T->key) return SearchTNode(T->pRight,x); else return SearchTNode(T->pLeft,x); } return NULL; }
183

CU TRC D LIU V GII THUT 1_Mai Xun Hng

Minh ho tm mt nt
44

Tm X=55
CU TRC D LIU V GII THUT 1_Mai Xun Hng

55
18 88

13

37

59

108

15

23

40

55

71

Tm thy X=55
184

Duyt cy nh phn tm kim C 6 php duyt cy nh sau NLR (gc, tri, phi) NRL (gc, phi, tri) LNR (tri, gc, phi) RNL (Phi, gc,tri) LRN (tri, phi, gc) RLN (phi, tri, gc)

CU TRC D LIU V GII THUT 1_Mai Xun Hng

185

Thut ton dut cy nh phn tm kim


void NLR(TREE t) { if(t!=NULL) { printf(%d,t->key); NLR(t->pLeft); NLR(t->pRight); } }

CU TRC D LIU V GII THUT 1_Mai Xun Hng

186

Bi tp cho phn duyt cy


Vit chng trnh thc hin cc yu cu sau: 1. m s nt trn cy 2. Tnh tng tt c cc kha trn cy 3. m s nt l trn cy 4. m s nt c duy nht 1 cy con 5. m s nt c 2 cy con 6. Cho bit kho ln nht trong cy l bao nhiu 7. Cho bit kha nh nht trong cy l bao nhiu 8. Tim nt c kha bng x trong cy

CU TRC D LIU V GII THUT 1_Mai Xun Hng

187

Vit hm m s nt trong cy
void Dem(TREE t,int &s) { if(t!=NULL) { if((t->pLeft==NULL)&&(p->pRight==NULL)) s++; Dem(t->pLeft,s); Dem(t->pRight,s); } }

CU TRC D LIU V GII THUT 1_Mai Xun Hng

188

Li gi hm
void main() { TREE t; int s=0; Dem(t,s); printf(so nut trong cay :=%d,s); }

CU TRC D LIU V GII THUT 1_Mai Xun Hng

189

9
CU TRC D LIU V GII THUT 1_Mai Xun Hng

8 7

5 12

10

NLR: 9, 2, 6, 1, 10, 8, 5, 3, 7, 12, 4. LNR: 6, 2, 10, 1, 9, 3, 5, 8, 12, 7, 4.


190

Hy 1 nt c kho bng X trn cy


Hy 1 phn t trn cy phi m bo iu kin rng buc ca Cy nh phn tm kim
CU TRC D LIU V GII THUT 1_Mai Xun Hng

C 3 trng hp khi hy 1 nt trn cy


TH1: X l nt l TH2: X ch c 1 cy con (cy con tri hoc cy con phi) TH3: X c y 2 cy con

TH1: Ta xo nt l m khng nh hng n cc nt khc ttrn cy TH2: Trc khi xo x ta mc ni cha ca X vi con duy nht ca X. TH3: Ta dng cch xo gin tip
191

Minh ho hy phn t x c 1 cy con Hy X=37


CU TRC D LIU V GII THUT 1_Mai Xun Hng

44

18

88

13

37

59

108

15

23

55

71

192

Hy 1 nt c 2 cy con
Ta dng cch hy gin tip, do X c 2 cy con Thay v hy X ta tm phn t th mng Y. Nt Y c ti a 1 cy con. Thng tin lu ti nt Y s c chuyn ln lu ti X. Ta tin hnh xo hy nt Y (xo Y ging 2 trng hp u) Cch tm nt th mng Y cho X: C 2 cch

CU TRC D LIU V GII THUT 1_Mai Xun Hng

C1: Nt Y l nt c kho nh nht (tri nht) bn cy con phi X C2: Nt Y l nt c kho ln nht (phi nht) bn cy con tri ca X

193

Minh ha hy phn t X c 2 cy con


Xo nt c trng
CU TRC D LIU V GII THUT 1_Mai Xun Hng

Key = 18, lc nt c kho 23 l nt th mng

44

18

88

13

37

59

108

15

23

40

55

71

30
194

Ci t thao tc xo nt c trng Key = x


void DeleteNodeX1(TREE &T,int x) { if(T!=NULL) { if(T->Key<x) DeleteNodeX1(T->Right,x); else { if(T->Key>x) DeleteNodeX1(T->Left,x); else //tim thy Node c trng d liu = x { TNode *p; p=T; if (T->Left==NULL) T = T->Right; else { if(T->Right==NULL) T=T->Left; else ThayThe1(p, T->Right);// } delete p; } } } else printf("Khong tim thay phan can xoa tu");}
195

CU TRC D LIU V GII THUT 1_Mai Xun Hng

tm bn cy con phi

Hm tm phn t th mng
void ThayThe1(TREE &p, TREE &T) {
CU TRC D LIU V GII THUT 1_Mai Xun Hng

if(T->Left!=NULL) ThayThe1(p,T->Left);

else
{
p->Key = T->Key; p=T;

T=T->Right;
} }
196

Tm lt cc ni dung cn nm
1. Cc thut ton tm kim v sp xp + Ci t hm tm kim ca 2 thut ton tm kim + Ci t hm sp xp ca cc thut ton sp xp + Ghi kt qu tng bc khi p dng cc thut ton tm kim v sp xp vo 1 b d liu cho trc 2. p dng sch lin kt gii quyt 1 bi ton trong i sng thc t. + Qun l sinh vin + Qun l nhn vin trong 1 cng ty. + Qun l sch trong th vin..vv 3. Cy nh phn tm kim + V hnh dng ca cy khi thm ln lt 1 dy s vo cy + Cho bit kt qu khi duyt cy theo 1 th t cho trc + V hnh dng ca cy khi xo 1 nt trn cy + Vit hm tm kim 1 nt trn cy, duyt cy, m
197

CU TRC D LIU V GII THUT 1_Mai Xun Hng

You might also like