Академический Документы
Профессиональный Документы
Культура Документы
Ni dung
1. 2. 3. 4.
nh ngha v cc php ton trn danh sch Danh sch c Danh sch lin kt Cc danh sch hn ch
Hng i Ngn xp
5.
Cu trc d liu - Bi 2
nh ngha:
Danh sch l mt dy hu hn (c th rng) cc phn t
Cu trc d liu - Bi 2
2. Danh sch c
1. 2. 3. 4.
nh ngha Cch biu din Cc php ton trn danh sch c c im ca danh sch c
u im Nhc im
5.
Cu trc d liu - Bi 2
Khi to danh sch Kim tra danh sch c rng khng Kim tra danh sch c y khng Thm mt phn t vo danh sch Loi b mt phn t khi danh sch Tm kim mt phn t ca danh sch Thay th phn t v tr pos bng mt gi tr khc Sp xp danh sch Sao chp danh sch Xa ton b danh sch
Phan Dinh The Huan 9
Cu trc d liu - Bi 2
s phn t bng 0
[5] [MAX-1]
a n=0
{ list.n = 0; }
Cu trc d liu - Bi 2 Phan Dinh The Huan 10
a n=0?
32
10
n = MAX ?
5 k=1
[1]
32
10
n=5
[2]
[3]
[4]
[5]
[MAX-1]
32
10
n=6
Cu trc d liu - Bi 2
13
{ if(!isFull(list) && k>=0 && k<=list.n) { for(int i=list.n;i>k;i--) list.a[i]=list.a[i-1]; list.a[k]=newinfo; list.n++; return 1; } return 0; Phan Dinh The Huan }Cu trc d liu - Bi 2
14
Loi b phn t ti v tr k
a
3 7 k=2
[0] [1] [2] [3] [4] [5] [MAX-1]
32
10
n=6
3 5
32
10
n=5
Cu trc d liu - Bi 2
15
int deleteElement(CList &list, int k) /* Precondition: loi b phn t ti v tr k Postcondition: nu DS cha rng v 0k<n th xa phn t, gim n v tr v 1, ngc li, xa khng thnh cng, tr v 0*/ { if(!isEmpty(list) && k>=0 && k<list.n) { for(int i=k;i<list.n-1;i++) list.a[i]=list.a[i+1]; list.n--; return 1; } return 0; }
Cu trc d liu - Bi 2 Phan Dinh The Huan 16
32
10
n=5
Cu trc d liu - Bi 2
17
/* Precondition: tm gi tr x trong DS Postcondition: tr v v tr tm thy u tin, ngc li, tr v -1*/ { for(int i=0;i<list.n;i++) if(list.a[i]==x) return i; return -1; }
Cu trc d liu - Bi 2
18
c im ca danh sch c
1.
u im
Mt s dng b nh ca DS c l 100% D dng truy xut phn t a[i] bng cng thc tnh a ch Trong trng hp danh sch c th t, vic tm kim d dng nh phng php tm kim nh phn.
2.
Nhc im
Php thm vo v loi b mt phn t c chi ph cao O(n)
Cu trc d liu - Bi 2
19
Mng mt chiu: a[b..s] Mng hai chiu: a[b1..s1, b2..s2] Mng nhiu chiu: a[b1..s1, , bn..sn]
Cu trc d liu - Bi 2
20
Bi tp
1. 2.
3.
Xy dng chng trnh qun l thng tin sinh vin bng danh sch c.
Phan Dinh The Huan 21
Cu trc d liu - Bi 2
Cc khi nim
nh ngha Biu din mt DSLK Cc php ton trn DSLK
2. 3. 4. 5.
Cu trc d liu - Bi 2
Cu trc d liu - Bi 2
24
2.
Danh sch lin kt (DSLK) l mt danh sch m cc phn t c ni kt vi nhau nh vo vng lin kt ca chng DSLK l mt loi cu trc n gin v thch hp vi cc php thm vo, php loi b, php ghp nhiu DS m cc php ny li khng thch hp cho danh sch c
Cu trc d liu - Bi 2
25
C nhiu kiu t chc lin kt gia cc phn t trong danh sch lin kt: lin kt n, lin kt kp, lin kt vng, a lin kt.
Cu trc d liu - Bi 2
26
pHead A
Khi to danh sch Kim tra danh sch rng Tm kim 1 phn t trong danh sch Thm 1 phn t vo danh sch Hy 1 phn t khi danh sch Duyt danh sch Hy ton b danh sch
Cu trc d liu - Bi 2
28
Cu trc d liu - Bi 2
29
nh ngha DSLK n
DSLK n l loi DSLK m vng a ch ca mi phn t ch cha duy nht mt a ch ca phn t tip theo. Phn t cui cng ca DSLK n s tr n NULL
pHead
info pNext
pHead
info
32
Khi to danh sch Kim tra danh sch rng Tm kim 1 phn t trong danh sch Thm 1 phn t vo danh sch Hy 1 phn t khi danh sch Duyt danh sch Hy ton b danh sch
Cu trc d liu - Bi 2
33
Cu trc d liu - Bi 2
34
Cu trc d liu - Bi 2
35
Tm kim gi tr x c trong danh sch hay khng. - Trng hp 1: DSLK khng c th t - Trng hp 2: DSLK c th t
Cu trc d liu - Bi 2
36
pHead
Node* search(const List &list, Data x) { Node *p = list.pHead; int found = 0; while(p!=NULL && !found) { if(p->info == x) found = 1; else p = p->pNext; } return p; }
Cu trc d liu - Bi 2 Phan Dinh The Huan
37
pHead
Node* search(const List &list, Data x) { Node *p = list.pHead; int found = 0; while(p!=NULL && p->info < x) p = p->pNext; if(p!=NULL && p->info > x) p = NULL; return p; }
Cu trc d liu - Bi 2 Phan Dinh The Huan
38
Ngoi ra, cn c thao tc thm vo sao cho DSLK lun c cc phn t tng dn
Node* insertAscending(List &list, Data x);
Cu trc d liu - Bi 2
39
Hm b tr: to Node
p x
Node* createNode(Data x) { Node *p = new Node; if(p!=NULL) { p->info = x; p->pNext = NULL; } return p; }
Cu trc d liu - Bi 2 Phan Dinh The Huan 40
Node* insertAfter(List &list,Node *q,Data x) { Node *p = createNode(x); if(p!=NULL) { p->pNext = q->pNext; q->pNext = p; } return p; }
Cu trc d liu - Bi 2 Phan Dinh The Huan 42
pHead
Cu trc d liu - Bi 2
43
- TH3: Hy phn t c gi tr x int deleteNode(List &list,Data x); Lu : khi cp pht b nh, chng ta dng ton t new, khi hy b nh phi dng ton t delete.
Cu trc d liu - Bi 2
45
Cu trc d liu - Bi 2
46
int deleteHead(List &list) { Node *p; if(list.pHead!=NULL) { p = list.pHead; list.pHead = list.pHead->pNext; delete p; return 1; } return 0; }
Cu trc d liu - Bi 2 Phan Dinh The Huan 47
Nu q!=NULL th B1: p=q->pNext B2: Nu p!=NULL th B21: q->pNext = p->pNext; B22: delete p;
Cu trc d liu - Bi 2
48
int deleteAfter(List &list,Node *q) { Node *p; if(q!=NULL) { p = q->pNext; if(p!=NULL) { q->pNext = p->pNext; delete p; return 1; } } return 0; }
Cu trc d liu - Bi 2 Phan Dinh The Huan 49
TH3: Hy phn t c gi tr x
q pHead A B p X Z Y
B1: Tm phn t p c gi tr x v phn t q ng trc n B2: Nu p!=NULL th //tm thy x Hy p ra khi DSLK tng t hy phn t sau q Ngc li Khng tm thy x
Cu trc d liu - Bi 2
50
TH3: Hy phn t c gi tr x
pHead q A B p X Z Y
int deleteNode(List &list, Data x) { Node *p = list.pHead; Node *q = NULL; tm phn t c while(p!=NULL && p->info!=x) gi tr x { q=p; p=p->pNext;} if(p==NULL) return 0; khng tm thy hoc DS rng if(q!=NULL) q->pNext=p->pNext; p pHead else p pHead list.pHead = p->pNext; delete p; return 1; }
Cu trc d liu - Bi 2 Phan Dinh The Huan 51
B1: p=pHead B2: Trong khi (danh sch cha ht) thc hin B21: X l phn t p B22: p=p->pNext void processList(List &list) { Node *p; p=list.pHead; while(p!=NULL) { processNode(p);//x l c th p=p->pNext; } }
Cu trc d liu - Bi 2 Phan Dinh The Huan 52
Trong khi (danh sch cha ht) thc hin B1: p = pHead pHead=pHead->pNext B1: hy p void deleteList(List &list) { Node *p; while(list.pHead!=NULL) { p=list.pHead; list.pHead=list.pHead->pNext; delete p; } }
Cu trc d liu - Bi 2 Phan Dinh The Huan 53
u im:
D thc hin cc thao tc thm, hy mt phn t Tn dng c cc vng nh ri rc
2.
Khuyt im:
Khng thun tin cho thao tc truy xut phn t v phi duyt t u danh sch
Cu trc d liu - Bi 2
54
Cu trc d liu - Bi 2
55
nh ngha:
DSLK kp (double linked list) l DSLK c m mi phn t c 2 vng lin kt: mt vng lin kt n phn t ng trc n (previous) v mt vng lin kt n phn t ng sau n (next)
2.
Cu trc d liu - Bi 2
56
typedef struct tagDNode { Data info; struct tagDNode *pNext; struct tagDNode *pPrev; }DNode; typedef struct tagDList { DNode *pHead; }DList;
Cu trc d liu - Bi 2 Phan Dinh The Huan
57
4. 5. 6.
Khi to danh sch (tng t DSLK n) Thm 1 phn t vo danh sch Tm kim 1 phn t trong danh sch (tng t DSLK n) Hy mt phn t khi danh sch Duyt danh sch (tng t DSLK n) Hy ton b danh sch (tng t DSLK n)
Phan Dinh The Huan 58
Cu trc d liu - Bi 2
3.
4.
Thm vo m bo th t tng dn
DNode* insertAsc(DList &lust,Data x);
Cu trc d liu - Bi 2
59
Hm b tr: to mt Node mi
p
x
DNode* createNode(Data x) { DNode *p = new DNode; if(p!=NULL) { p->info = x; p->pNext = NULL; p->pPrev = NULL; } return p; }
Cu trc d liu - Bi 2 Phan Dinh The Huan 60
A 3 1 x 2
p
pHead
A 3 1 x 2
pHead
Kt qu
x A B C D
p
Cu trc d liu - Bi 2 Phan Dinh The Huan 61
A 3 1 x 2
Cu trc d liu - Bi 2
q
A B x F Y
p
pHead
q
A 4 B 2 x 1 F
tam
Y
p
Cu trc d liu - Bi 2 Phan Dinh The Huan 63
q
4
B 2 x 1
tam
DNode *p = createNode(x); DNode *tam=q->pNext; if(p!=NULL) { p->pNext=tam; q->pNext=p; if(tam!=NULL) tam->pPrev=p; p->pPrev=q; } return p;
Phan Dinh The Huan 64
Cu trc d liu - Bi 2
q
A B x F Y
p
pHead
tam
A 4 B 2 x 1 F
q
Y
p
Cu trc d liu - Bi 2 Phan Dinh The Huan 65
tam
4
B 2 x 1
DNode *p = createNode(x); DNode *tam=q->pPrev; if(p!=NULL) { p->pNext=q; if(tam!=NULL) tam->pNext=p; q->pPrev=p; p->pPrev=tam; } return p;
Phan Dinh The Huan 66
Cu trc d liu - Bi 2
q
A B E F Y
q=pHead; B1: To Node mi p cha x; B2: Tm v tr cn thit (q) chn p vo DS B3: Nu tm thy, thm p vo ngay trc q Lu cc trng hp: DS rng, phn t cn chn vo v tr u/ cui DS
Cu trc d liu - Bi 2 Phan Dinh The Huan 67
2.
3.
4.
Hy phn t c gi tr x
int deleteNode(DList &list,Data x);
Cu trc d liu - Bi 2
69
p A B F Y
DNode *p; if(list.pHead!=NULL) { p=list.pHead; list.pHead=p->pNext; if(list.pHead!=NULL) Loi tr trng hp list.pHead->pPrev=NULL; DS ch c 1 phn t delete p; return 1; } return 0;
Phan Dinh The Huan 70
Cu trc d liu - Bi 2
q A B
p F
tam Y
int deleteAfter(DList &list,DNode *q) { DNode *p, *tam; if(q!=NULL) { p=q->pNext; if(p!=NULL) { tam=p->pNext; q->pNext = tam; if(tam!=NULL) Loi tr trng tam->pPrev = q; hp tam=NULL delete p; return 1; } } return 0; }
Cu trc d liu - Bi 2 Phan Dinh The Huan 71
tam A
p B
q F Y
int deleteBefore(DList &list,DNode *q) { DNode *p, *tam; if(q!=NULL) { p=q->pPrev; if(p!=NULL) { tam=p->pPrev; q->pPrev = tam; if(tam!=NULL) tam->pNext = q; delete p; return 1; } } return 0; }
Cu trc d liu - Bi 2 Phan Dinh The Huan 72
TH4: Hy phn t c gi tr x
pHead
B x
TH4: Hy phn t c gi tr x
int deleteNode(DList &list,Data x)
DNode *p, *q; p=list.pHead; 1 while(p!=NULL) { if(p->info==x) break; p=p->pNext; } if(p==NULL) return 0; 2 q=p->pPrev; 3 if(q!=NULL) { q->pNext=p->pNext; if(p->pNext!=NULL) p->pNext->pPrev=q; }
(1): tm p l phn t cha gi tr x (2): DS rng/khng tm thy (3): p gia/cui DS, c th gi deleteAfter(q); (4): p u DS, c th gi deleteHead();
74
Cu trc d liu - Bi 2
Hy ton b DSLK kp
pHead
p
A B C D
Trong khi (danh sch cha ht) thc hin B1: p = pHead pHead=pHead->pNext pHead->pPrev = NULL B1: hy p void deleteList(DList &list) { DNode *p; while(list.pHead!=NULL) { p=list.pHead; list.pHead=list.pHead->pNext; list.pHead->pPrev = NULL; delete p; } Cu trc d liu - Bi 2 Phan Dinh The Huan }
75
nh gi DSLK kp
Cu trc d liu - Bi 2
76
DSLK n vng
pHead
DSLK kp vng
Cu trc d liu - Bi 2 Phan Dinh The Huan 77
4. Cc danh sch hn ch
1.
Stack
nh ngha T chc lu tr Cc php ton trn stack
2.
Queue
nh ngha T chc lu tr Cc php ton trn queue
Cu trc d liu - Bi 2
79
Stack Ngn xp
1. 2. 3.
Cu trc d liu - Bi 2
80
Stack - nh ngha
1.
2.
3.
Stack (ngn xp) l mt danh sch hot ng theo c ch LIFO (Last In First Out Vo sau ra trc) Thao tc thm v hy c thc hin cng mt pha ca stack c ch LIFO: phn t no vo sau s c ly ra trc ng dng: kh quy, t chc lu vt cc qu trnh tm kim theo chiu su v quay lui, vt cn, ng dng trong tnh ton cc biu thc,
Phan Dinh The Huan 81
Cu trc d liu - Bi 2
Stack - T chc lu tr
Stack c th c biu din di dng danh sch c (mng1 chiu) hoc danh sch lin kt Stack c mt ch im vo phn t trn nh gi l stackpointer: l gi tr top i vi dng DS c, l con tr pHead i vi dng DS lin kt. pHead
N
top 4 3 2 1
List s;
82
6.
Khi to Kim tra rng Kim tra y (biu din dng DS c) Thm 1 phn t vo stack Ly thng tin v loi b phn t nh stack Xem thng tin ca phn t nh stack
Cu trc d liu - Bi 2
83
3 2 1 0
top
Cu trc d liu - Bi 2
84
3 2 1 0
Cu trc d liu - Bi 2
85
3 2 1 0
Cu trc d liu - Bi 2
86
C
x=C
top 3 2 1 0
top
3 2 1 0
D L
T D L
T D L
x=C
C T D L
int push(Stack &s, Data x) { if(s.top < N) //cha y { s.a[s.top]=x; s.top++; return 1; } return 0; }
Cu trc d liu - Bi 2
87
pHead
3 2 1 0
pop
3 2 1 0
T
pop
T D L
C T D L
top
C T D L
D L
Data pop(Stack &s) { Data x; if(s.top>0) { s.top--; x = s.a[s.top]; return x; } return NULLDATA; }
Cu trc d liu - Bi 2
Data pop(List &s) { Data x; if(!isEmpty(s)) { x = s.pHead->info; deleteHead(s); return x; } return NULLDATA; }
Phan Dinh The Huan 88
3 2 1 0
getTop
C T D L
T D L
getTop
Data getTop(const Stack &s) { Data x; if(s.top>0) { x = s.a[s.top-1]; return x; } return NULLDATA; }
Cu trc d liu - Bi 2
89
Queue Hng i
1. 2. 3.
out
in
Cu trc d liu - Bi 2
90
Queue nh ngha
1.
2.
3.
Queue (hng i) l mt danh sch hot ng theo c ch FIFO (First In First Out Vo trc ra trc) Thao tc thm v hy c thc hin 2 pha ca queue c ch FIFO: phn t no vo trc s c ly ra trc ng dng: kh quy, t chc lu vt cc qu trnh tm kim theo chiu rng v quay lui, vt cn, ng dng trong qun l v phn phi tin trnh ca h iu hnh, t chc b m bn phm,
Phan Dinh The Huan 91
Cu trc d liu - Bi 2
Queue T chc lu tr
Queue c th c biu din di dng danh sch c (mng1 chiu) hoc danh sch lin kt Queue c 2 ch im vo phn t u v cui ca queue: l cp gi tr front, rear i vi dng DS c, l cp con tr pHead, pTail i vi dng DS lin kt.
out
0 1 2 front rear
in
N-1
pTail Y
92
pHead
Cu trc d liu - Bi 2
Khi to Kim tra rng Kim tra y (trng hp DS c) Thm 1 phn t (vo cui) Loi b 1 phn t ( u) Xem thng tin phn t u
Cu trc d liu - Bi 2
93
rear
...
N-1
Cch 2:
0
rear
...
N-1
Cch 1: rear ch chnh xc vo v tr Cch 2: rear ch vo v tr sau phn t phn t cui. cui. Khi to: front=0; rear=N-1; count=0; Khi to: front=0; rear=0; Khi rng: front=(rear+1)%N; i [0,N-1], a[i]=NULLDATA count=0; Khi rng: front=rear; Khi y: front=(rear+1)%N; a[front]=NULLDATA; count=N; Khi y: front=rear; Thm vo: a[++rear] = x; a[front]!=NULLDATA Ly ra: x=a[front++]; Thm vo: a[rear++] = x; Kim tra rng: ? count==0; Ly ra: x=a[front++]; Kim tra y: ? count==N; Kim tra rng: ? a[front]==NULLDATA; Kim tra y: ? front==rear && ch c ch xoay Cu trc Phan Dinh The Huan 94 a[front]!=NULLDATA; vngd liu - Bi 2 queue trong
pHead
Cc thao tc trn DSLK n c s dng pTail cng tng t nh DSLK n khng c pTail. Tuy nhin cc thao tc insert, delete phc tp hn do phi xt n pTail
Cu trc d liu - Bi 2
95
pHead
Cu trc d liu - Bi 2
96
pHead
Cu trc d liu - Bi 2
97
rear front
Cu trc d liu - Bi 2
98
1
x=8 [0] [1] [2] [3] front [4]
3
rear [N-1]
A
pHead
B B
C C
F F Y
pTail
8
rear
1
front
99
8
rear deQueue [0] [1] [2] [3]
1
front
pHead
A A B C F Y
pTail
pTail
1
[4] [5] [N-1]
pHead
8
rear
3
front
Data deQueue(CQueue &q) { if(isEmpty(q)) return NULLDATA; Data x; x = q.a[q.front]; q.front=(q.front+1)%N; return x; }
Cu trc d liu - Bi 2
Data deQueue(LQueue &q) { if(isEmpty(q)) return NULLDATA; Data x; x=q.pHead->info; deleteHead(q); return x; }
Phan Dinh The Huan 100
8
rear
1
front
3 1 8
A getFront getRear
C A Y
getFront getRear
Data getFront(const CQueue &q) { if(isEmpty(q)) return NULLDATA; return q.a[q.front]; } Data getRear(const CQueue &q) { if(isEmpty(q)) return NULLDATA; return q.a[q.rear]; }
Cu trc d liu - Bi 2
Data getFront(const LQueue &q) { if(isEmpty(q)) return NULLDATA; return q.pHead->info; } Data getRear(const LQueue &q) { if(isEmpty(q)) return NULLDATA; return q.pTail->info; }
101
Tm tt
1. 2.
3. 4.
5. 6.
Stack l cu trc LIFO, Queue thuc dng FIFO. C stack v queue u c th c hin thc da trn DS c hoc DS lin kt. Cc thao tc chnh trong stack: push, pop, getTop Cc thao tc chnh trong queue: enqueue, dequeue, getFront. Stack: thm vo Top, ly ra Top. Queue: thm vo Rear, ly ra Front.
Cu trc d liu - Bi 2
102
Cu trc d liu - Bi 2
103
My tnh b ti [4].2.3 Bi ton a thc [4].4.5 Bi ton tnh gi tr biu thc [4].13
Tnh gi tr biu thc hu t (postfix) Chuyn biu thc trung t (infix) sang hu t
4.
Cu trc d liu - Bi 2
104
5.1 My tnh b ti
1.
2.
M t: xy dng chng trnh minh ha mt my tnh b ti dng n gin. Cch biu din:
Php ton c nhp vo di dng hu t.
VD: tnh (a*(b-c))+d biu thc hu t: abc-*d+=
Cu trc d liu - Bi 2
105
Cu trc d liu - Bi 2
106
Cu trc d liu - Bi 2
107
3.
Chng trnh
Cu trc d liu - Bi 2
108
s m
Cu trc d liu - Bi 2
109
s m
Cu trc d liu - Bi 2
110
thc hin cc php ton gia 2 a thc, mt stack c to ra lu tr cc a thc ny. Khi ngi dng yu cu thc hin php ton, php ton c tin hnh v kt qu c lu li vo stack.
Cu trc d liu - Bi 2 Phan Dinh The Huan 111
x2 + 1 3x5 2x3 + x2 + 4
1.Nhp a thc P
Cu trc d liu - Bi 2
3x5 2x3 + x2 + 4
2.Nhp a thc Q
Phan Dinh The Huan
Chng trnh
Cu trc d liu - Bi 2
113
Biu thc dng trung t l g? Biu thc dng hu t l g? Tnh gi tr biu thc hu t (postfix) Chuyn biu thc dng trung t (infix) sang dng hu t
Cu trc d liu - Bi 2
115
Cu trc d liu - Bi 2
116
Cu trc d liu - Bi 2
117
Cu trc d liu - Bi 2
118
Cu trc d liu - Bi 2
119
Cu trc d liu - Bi 2
120
Kt lun
Mt s li khuyn trong vic la chn v s dng danh sch
1.
Danh sch:
1. 2.
3.
ng bi ri gia danh sch c v mng Khi lm vic vi danh sch ni chung, vic u tin l phi xc nh danh sch ny cn dng nhng php ton no, sau chn cch ci t sao cho cc php ton c thc hin d dng nht. Khi chn la gia DS c v DS lin kt, cn xem xt cc php ton trn DS. DSLK mm do hn trong cc php chn, xo v sp xp li; trong khi DS c cho php truy xut ngu nhin.
Phan Dinh The Huan 121
Cu trc d liu - Bi 2
Kt lun (tt)
1.
Danh sch(tt):
4.
5.
DS c thng i hi t hao tn b nh, thi gian; v n lc lp trnh trong thao tc thm cc phn t vo DS cng nh, cn thut ton th n gin. Khi DS cha s lng ln d liu, DSLK li thng gip tit kim b nh, thi gian x l v k c n lc lp trnh. B nh ng v con tr cho php chng trnh t ng thch nghi vi cc ng dng c ln v cung cp kh nng linh hot trong cp pht b nh gia cc cu trc d liu khc nhau. B nh tnh (mng) i khi hiu qu hn i vi cc bi ton c kch c c xc nh trc.
Phan Dinh The Huan 122
Cu trc d liu - Bi 2
Kt lun (tt)
2.
Stack:
1.
2.
Stack l mt dng cu trc d liu n gin nht; hy s dng stack khi c th! Trong cc bi ton i hi o ngc d liu, hy ngh n stack lu tr d liu.
Cu trc d liu - Bi 2
123
Ht bi 2
Cu trc d liu - Bi 2
124