Professional Documents
Culture Documents
CTDL v3
CTDL v3
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
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
X=6
Tm thy 6 ti v tr 4
i
2 0 8 1 5 2 1 3 6 4 4 5 6 6
X=10
i
2 0 8 1 5 2 1 3 6 4 4 5 6 6
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
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
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
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
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
13
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
tng: Xut pht t u dy, tm tt cc cc nghch th cha phn t ny, trit tiu
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
15
i=0
j=1
i=0
j=4
18
i=1
j=2
i=1
j=3
i=1
19
j=4
i=2
j=3
i=2
j=4
i=2
20
j=6
i=3
j=4
i=3
j=5
i=3 21
j=6
i=4
j=5
i=4
j=6
i=5
22
j=6
23
i=6
j=7
Demo
1 12
2 8 5
i 0 1 2 3
24
1 4 5 6 7 6 4 15
1 12 2 8 5
Demo
0 1 2 3
25
2 4 5 6 7 6 4 15
1 2
Demo
0
0
i 1
4 12
8
2 3
26
j
5 4 5 6 7 6 4 15
1 2 4
Demo
0 1 2
0
5 12
27
4 5 6 7
6 5 15
Demo
0
1
1
2
2
4
3
0
28
12 6
4 5 6 7
j
6 15
Demo
0
1 2 4 5
1 2 3
29
6 4 i
0
8 12
5 6 7
j
15
Demo
0
1
1
2 4 5
2 3
30
6 4 5 i
0
8 12 6 7
15
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;
}
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
Bi tp p dng
4 4 5 7 5 7
4 5 9
34
8 9
9 8
7 8
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
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
Cho dy s a: 12 2 8
15
37
i=0
i=1
38
i=2
i=3
39
i=4
40
i=5
i=6
Swap(a[0], a[4])
vtmin 12 2 8 5 1 6 4 15
0
i
41
Swap(a[1], a[1])
vtmin 1 2 8 5 12 6 4 15
0
i
42
Swap(a[2], a[6])
vtmin 1 2 8 5 12 6 4 15
1
i
43
Swap(a[3], a[3])
vtmin 1 0 2 1 4 2 i 5 3 12 4 6 5 8 6 15 7
44
12
15
3
i
45
1 0
2 1
4 2
5 3
6 4 i
12 5
8 6
15 7
46
vtmin 1 0 2 1 4 2 5 3 6 4 8 5 i 12 6 15 7
47
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.
51
Ni Bt Bubble Sort
Cho dy s a: 2 12 8
15
i=0
j=6
i=0
52
i=4
Ni Bt Bubble Sort
i=0
i=0
i=0
j=1 j=2
j=3
53
Ni Bt Bubble Sort
i=1
j=4 j=5
i=2
i=2
Ni Bt Bubble Sort
Ni Bt Bubble Sort
56
i=3
i=4
i=5
j=5
j=6
12 1 2 8 5
0 1 2 3
57
1 4 5 6 7 6 4
15
2 12
2 8
1 2 3
58
5 4 5 6 7 4 6
15
1 2 4 12 4
0 i 1 2 3
59
8 4 5 6 7 5 6
15
1 2 4
0 1 2 3 i
12 5
60
8 4 5 6 7 5 6
15
1 2 4 5
0 1 2 3 i
61
12 6 4 5 6 7 8 6
15
1 2 4 5
0 1 2 3
62
6 i 4 5 6 7
8 12
8
15
1 1 2 3 5 4 2 4
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]);
64
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
66
67
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
15
i=1
i=2
69
i=3
70
i=4
i=5
71
i=6
i=7
12
15
72
pos 2 12 0 2 1 i 8 2 5 3 1 4 6 5 4 6 15 7
x
73
pos 2 0 8 12 1 i 8 2 5 3 1 4 6 5 4 6 15 7
x
74
pos 2 0 5 8 1 12 2 i 5 3 1 4 6 5 4 6 15 7
x
75
pos 2 1 5 8 12 1 6 4 15
3
i
x
76
pos 1 0 2 1 5 2 6 8 3 12 4 i 6 5 4 6 15 7
x
77
pos 1 0 2 1 4 5 2 6 3 8 4 12 5 i 4 6 15 7
x
78
pos 1 0 2 1 4 2 5 3 6 4 8 5 12 6 i 15 7
x
79
pos
1 0 2 1 4 2 5 3 6 4 8 5 12 6 15 7
80
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
Sau khi thc hin phn hoch, dy ban u c phn thnh 3 on:
84
on th 2 c th t.
Nu cc on 1 v 3 ch c 1 phn t : c th t
85
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
87
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 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
x = a[3] = 5
12
15
l=0
r=7
89
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
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
STOP
STOP
Khng nh hn X Khng ln hn X
97
Quick Sort V D
1 1
2 2
3 4
4 5
j 5
6 left
i 6
8
7 12
8 15 right
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
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
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
103
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
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
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
109
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
110
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
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
x2 x1
x3
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
115
NI DUNG
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
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
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;
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
}List;
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
123
pHead
CU TRC D LIU V GII THUT 1_Mai Xun Hng
pTail 4f 5f
3f
4f
5f
NULL
124
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
125
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
p->pNext = NULL;
exit(1);
} TamNode->Info =x;//Trng d liu ca Node TamNode->Next = NULL; //Cha c Node ng sau
return TamNode;
}
128
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
129
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
pHead
2f
3 3f
3f
4f
4 4f
9f
pHead=P
10
P
2f N
P->pNext=pHead
132
+ 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
3f
4f
5f
pTail
4 4f
8 5f
5N 9f
pTail=P pTail->pNext
9f
6N
P
135
Bt u: Nu (q!=NULL) th
+ q->pNext = p
+ nu q = pTail th pTail=p
136
Ci t thut ton
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
3f
4f q
5f
9f 7
P
4 4f
8 5f 9f
q->pNext=P
5 ..
N 5f
P->pNext=q->pNext
138
139
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
Bt u:
CU TRC D LIU V GII THUT 1_Mai Xun Hng
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
pHead=pHead->pNext
pHead
1f
2f
3f
4f
7
P
2f
P=pHead
3f
4f
143
Bt u
CU TRC D LIU V GII THUT 1_Mai Xun Hng
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
q
pHead 1f 2f
p-=q->pNext 3f
p
4f
2f
4f 3f
4f
q->pNext=p->pNext
146
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:
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
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 }
150
}
151
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
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 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
Bc 1:
CU TRC D LIU V GII THUT 1_Mai Xun Hng
158
while(p!=NULL)
{ printf(%d p=p->pNext; , p->Info);
}
}
159
{ 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
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
Bc 1:
Trong khi (danh sch cha ht) thc hin B11: p = pHead;
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
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
pHead
pTail
4f
4f 7
5f 5f 6
pTail
3f 4
4f
4f 6
5f 5f 7 N
165
Sp xp danh sch
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
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
169
NI DUNG
CY NH PHN TM KIM
172
V d:
13
18
37
15
173
23
40
u im ca cy nh phn tm kim
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;
175
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
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
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
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
5
4 3 6
14 8
12
13
181
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
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)
185
186
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); } }
188
Li gi hm
void main() { TREE t; int s=0; Dem(t,s); printf(so nut trong cay :=%d,s); }
189
9
CU TRC D LIU V GII THUT 1_Mai Xun Hng
8 7
5 12
10
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
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
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
44
18
88
13
37
59
108
15
23
40
55
71
30
194
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