Chapter2 1-2 4 BasicDataStructures

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 49

REVIEW

Dng nh l th a ra cc tim cn cht cho cc cng thc quy sau

a) = 3
b) = 5

2 2

+
+ 2

Chapter 2

Cc cu trc d liu c bn

Ni dung
Cc khi nim c bn Mng v mng ng Con tr v cu trc lin kt
Danh sch tuyn tnh

2.1 CC KHI NIM C BN

2.1 Khi nim c bn


X l d liu trn my tnh xt cho cng l x l vi cc bit Mt kiu d liu (data type): l mt tp cc gi tr v nhm cc php ton c thc hin trn cc gi tr .
Ch ra cch s dng cc nhm bit v cc php ton thc hin trn cc nhm bit

VD. Kiu s nguyn char s bit : 8 bit cc php ton +, -, *, /, %

Khi nim c bn
Cc kiu d liu dng sn (Built-in data types): c xy dng sn trong ngn ng lp trnh

Type

Macintosh Metrowerks CW (Default) Linux on a PC

IBM PC Windows XP Windows NT

ANSI C Minimum

char
int short long

8
32 16 32

8
32 16 32 64

8
32 16 32 64

8
16 16 32 64

long long 64

Ngn ng lp trnh C

Khi nim c bn
Chun IEEE754/85:
Type Half (IEEE 754-2008) Single Du (sign) 1 1 M
(Exponent)

lch m
(Exponent Bias)

Gi tr (fraction) 10 23 16 32

Tng cng (bit)

5 8

15 127

Double
Quad

1
1
sign

11
15

1023
16383
exponent exponent bias

52
112

64
128

v (1)

(1 fraction)

Khi nim c bn
Kiu d liu tru tng (Abstract DataType - ADT) gm:
Tp cc gi tr Tp cc php ton c th thc hin trn cc gi tr ny

Cch biu din c th b b qua khi xt n ADT.


Lm tru tng ha kiu d liu, khng ph thuc ngn ng lp trnh c th.

Ci t ADT l biu din ADT bi mt ngn ng lp trnh c th


Xt n mt biu din c th cho ADT

Cc kiu d liu dng sn chnh l ci t ca cc ADT tng ng bng ngn ng lp trnh c th.

Khi nim c bn
Cu trc d liu (data structure): Gm cc kiu d liu v cch lin kt gia chng. Cu trc d liu m t cch t chc v lu tr d liu trn my tnh s dng mt cch hiu qu nht.

Hai vn ca mt cu trc d liu: Cc thao tc m n h tr, v Cch ci t cc thao tc ny

Khi nim c bn
Thay i cu trc d liu khng lm thay i tnh chnh xc ca chng trnh. Tuy nhin n s lm thay i hiu qu ca chng trnh.

Tt nht nn chn cu trc d liu cho hiu qu cao nht ngay t khi thit k chng trnh!

Cu trc lin tc VS lin kt


Cc cu trc d liu c th c chia thnh lin tc (contiguous) hoc lin kt(linked), ty vo vic n c ci t da trn mng hay con tr.
Cu trc c cp pht lin tc: c cp pht thnh vng b nh lin tc. VD mng, ma trn, ng (heap), v bng bm

Cu trc d liu lin kt: gm cc on(chunk) trong b nh (khng nm lin tc) v c lin kt vi nhau thng qua con tr. VD, danh sch, cy, v th danh sch k.

2.2 ARRAY MNG

Mng
Mng : gm cc bn ghi c kiu ging nhau, c kch thc c nh. Mi phn t c xc nh bi ch s (a ch) Mng l cu trc d liu c cp pht lin tc c bn.

Mng
u im ca mng: Truy cp phn t vi thi gian hng s (): v thng qua ch s ca phn t ta c th truy cp trc tip vo nh cha phn t. S dng b nh hiu qu: ch dng b nh cha d liu nguyn bn, khng lng ph b nh lu thm cc thng tin khc. Tnh cc b v b nh: cc phn t nm lin tc trong 1 vng b nh, duyt qua cc phn t trong mng rt d dng v nhanh chng. Nhc im: khng th thay i kch thc ca mng khi chng trnh ang thc hin.

Mng
Mng ng (dynamic array): cp pht b nh cho mng mt cch ng trong qu trnh chy chng trnh. Trong C l malloc v calloc, trong C++ l new S dng mng ng ta bt u vi mng ch c 1 phn t, mi khi s lng phn t vt qu kh nng ca mng th ta li gp i kch thc ca mng c v copy cc phn t mng c vo na u ca mng mi. u im: trnh lng ph b nh khi phi khai bo mng c kch thc ln ngay t u Nhc im: phi thc hin thm cc thao tc copy phn t mi khi thay i kch thc.

Mng ng
T mng 1 phn t ti phn t, s ln phi thay i kch thc l log 2 S phn t phi di chuyn
log

=
=1

= 2

log

=1

< 2

=1

= 2 2

Thi gian duy tr mng ch l () Nhc im: mt s thi gian thc hin mt s thao tc khng cn ng l hng s na

2.3 CON TR V CU TRC LIN KT


Con tr v cu trc lin kt Danh sch lin kt n Cc dng khc ca danh sch lin kt

Con tr v cu trc lin kt


Con tr lu tr a ch ca mt v tr trong b nh. VD. Visiting card c th xem nh con tr tr n ni lm vic ca mt ngi no . Trong cu trc lin kt con tr c dng lin kt gia cc phn t.

Trong C/C++ :
*p ch p l mt bin con tr &x ch a ch ca bin x trong b nh Con tr NULL ch bin con tr cha c gn gi tr (khng tr vo u c)

Con tr v cu trc lin kt


Tt c cc cu trc lin kt u c c im ging vi khai bo danh sch lin kt n (singly-linked list)sau: typedef struct list { item_type item; /* data item */ struct list *pNext; /* point to successor */ } list; Mi nt c 1 hay nhiu trng d liu (item) cha d liu ta cn lu tr Mi nt c t nht 1 con tr tr n nt tip theo (pNext). Do cu trc kt ni cn nhiu b nh hn cu trc lin tc. Cui cng, ta cn 1 con tr tr n u cu trc ch ra phn t bt u ca cu trc.

Cu trc lin kt
Head

20

45

75

85
NULL

c im ca cu trc lin kt: Cn thm b nh ph lu cc con tr Khng cho php truy cp phn t mt cch ngu nhin

Cu trc lin kt
Danh sch lin kt n
Head

20

45

75

85
NULL

typedef struct list { DATA_TYPE item; /* data item */ struct list *pNext; /* point to successor */ } LIST;

Danh sch lin kt n


Mt s thao tc thng dng trn danh sch lin kt n Chn mt phn t mi Xa mt phn t Tm kim mt phn t

Danh sch lin kt n


Chn mt phn t mi vo u danh sch
u vo: pHead con tr tr ti u danh sch, Value gi tr cn chn vo u ra : danh sch thu c sau khi chn thm
void insert_list(LIST *&l, DATA_TYPE x) { LIST *p; /* temporary pointer */ p = (LIST *)malloc( sizeof(LIST) ); p->item = x; p->pNext = l; l = p; }

Danh sch lin kt n


Tm kim mt phn t trong danh sch
u vo: danh sch L v mt kha k u ra: phn t trong L c gi tr kha bng kha k, hoc NULL nu khng tm thy. LIST *search_list(LIST *l, DATA_TYPE x) { if (l == NULL) return(NULL); if (l->item == x) return(l); else return( search_list(l->pNext, x) ); }
Thi gian thc hin ()

Danh sch lin kt n


Xa phn t khi danh sch u vo: Danh sch L v gi t phn t cn xa u ra: Danh sch thu c sau khi xa.
LIST *predecessor_list(LIST *l, DATA_TYPE x) { if ((l == NULL) || (l->pNext == NULL)) { printf("Error: Danh sach rong hoac co 1 phan tu.\n"); return(NULL); } if ((l->pNext)->item == x) return(l); else return( predecessor_list(l->pNext, x) ); }

Danh sch lin kt n


void delete_list(LIST *&l, DATA_TYPE x) { LIST *p; /* item pointer */ LIST *pred; /* predecessor pointer */ p = search_list(l, x); if (p != NULL) { pred = predecessor_list(l, x); if (pred == NULL) /* splice out out list */ l = p->pNext; else pred->pNext = p->pNext; free(p); /* free memory used by node */ } }

Con tr v cu trc lin kt


Mt s dng khc ca danh sch lin kt Danh sch lin kt n ni vng: Con tr ca phn t cui tr v u danh sch

Head

Tc dng: c th quay li t u khi cui dy Kim tra u dy : currentNode == Head ?

Con tr v cu trc lin kt


Danh sch lin kt i: Mi nt c 2 con tr: con tr phi tr n phn t tip sau, con tr tri tr n phn t ngay trc.
A B
C

Head

u im: c th duyt danh sch theo c hai chiu Kim tra cui danh sch: con tr phi l NULL u danh sch: con tr tri l NULL

Con tr v cu trc lin kt

typedef struct list { DATA_TYPE item; struct list *pNext; struct list *pPrev; } LIST;

Con tr v cu trc lin kt


Danh sch lin kt i ni vng (danh sch lin kt i vi nt gi): Con tr pNext ca nt cui tr vo nt u v con tr pPrev ca nt u tr vo nt cui. Nt u danh sch m nt gi

Nt u gi

10
Head Head

20

40

55

70

Danh sch lin kt i ni vng


u im: c th di chuyn theo hai chiu, v t phn t cui (u) c th nhy ngay n phn t u (cui) dy. Kim tra danh sch rng: pNext, pPrev u tr vo 1 phn t Head. Kim tra phn t cui dy: pNext tr ti Head

Nt u gi

Head Head

Danh sch rng

ng dng
V d. Bi ton Josephus C mt nhm gm n ngi c xp theo mt vng trn. T mt v tr bt k m theo chiu ngc chiu kim ng h v loi ra ngi th m trong vng. Sau mi ln loi li bt u m li vo loi tip cho n khi ch cn li 1 ngi duy nht.

Ci t : s dng danh sch lin kt n ni vng

MT S CU TRC D LIU C BN

Danh sch tuyn tnh Ngn xp Stack Hng i Queue

2.4 DANH SCH TUYN TNH

Danh sch tuyn tnh


Danh sch tuyn tnh (linear list) l tp hp cc i tng c cng kiu, c gi l cc phn t. Cc phn t trong danh sch tun theo th t tuyn tnh.
VD. Danh sch cc sinh vin sp theo th t tn

Cc php ton c bn
Chn thm phn t Xa phn t Tm kim Kim tra rng

Ci t danh sch tuyn tnh


Dng mng Cu trc lin kt

Danh sch tuyn tnh


Ci t dng mng: s dng mng 1 chiu Tm kim d dng (tun t hoc tm kim nh phn) Duyt cc phn t d dng s dng ch s: Chn v xa KHNG d dng S lng phn t bin ng => Phi khai bo s lng phn t ti a hoc dng mng ng

Danh sch tuyn tnh


Chn thm phn t vo danh sch:
Dch chuyn cc phn t ng sau t v tr cn thm xung 1 v tr Thm phn t mi vo Tng s lng phn t hin ti thm 1
123 125 135

155

Trung bnh cn /2 dch chuyn mi khi thm Thi gian thc hin

i i+1

161

166
167 168 169

165

n n+1

177

178

Danh sch tuyn tnh


Xa phn t khi danh sch:
Chuyn cc phn t ng sau ln trc 1 v tr Gim s lng phn t hin ti i 1
123

125
135

Trung bnh cn /2 dch chuyn mi khi xa 1 phn t


Thi gian thc hin

155

i i+1
n-1 n

161 166

167
168

169
177 178

Danh sch tuyn tnh


Ci t danh sch tuyn tnh dng mng: u im: Thi gian truy cp tng phn t nhanh (1) Tm kim phn t nhanh (tm kim nh phn) Nhc im: Chn v xa phn t mt nhiu thi gian (trung bnh l ()) Cn phi bit trc s lng phn t ti a ca danh sch hoc s lng ph b nh cho cc phn t cha c dng n trong mng

Danh sch tuyn tnh


Ci t dng cu trc lin kt: danh sch lin kt n (singly linked list ) typedef struct list { node DATA_TYPE item; A struct list *pNext; } LIST; next data

pHead

NULL

Ci t dng danh sch lin kt


Tm kim: tm kim phn t x trong danh sch. Phng php: duyt ln lt tng phn t trong danh sch v so snh vi x. Thc hin bng vng lp hoc quy.
LIST *search_list(LIST *l, DATA_TYPE x) { if (l == NULL) return(NULL); if (l->item == x) return(l); else return( search_list(l->next, x) ); }

Ging tm kim trn danh sch lin kt n

Ci t dng danh sch lin kt


Chn vo gia: thm mt phn t mi vo gia danh sch
Current

1. Cp pht b nh lu tr phn t mi 2. Cho con tr ca phn t mi tr vo phn t sau 3. Cho con tr ca phn t hin ti tr vo phn t mi

Ci t dng danh sch lin kt


void insert_list(LIST *&Current, DATA_TYPE x) { LIST *p; /* temporary pointer */ p = (LIST*)malloc( sizeof(LIST) ); p->item = x; p->pNext = Current->pNext; Current->pNext = p; }

Ci t dng danh sch lin kt


Chn vo u danh sch insert_list (Head, x)
pHead A B

1. Cp pht b nh lu tr phn t mi 2. Cho con tr ca phn t mi tr vo phn t u 3. Cho pHead tr vo phn t mi

Ci t dng danh sch lin kt


Chn vo cui danh sch

insert_list (Last, x)
Last

NULL

1. Cp pht b nh lu tr phn t mi 2. Cho con tr ca phn t mi tr vo NULL 3. Cho con tr ca phn t cui tr vo phn t mi

Ci t dng danh sch lin kt


Xa: xa phn t khi danh sch. Phng php ging vi xa phn t trong danh sch lin kt n.

Kim tra danh sch rng: kim tra xem danh sch c cha phn t no hay khng.
bool isEmpty(LIST *Head) { if(Head==NULL) return true; return false; }

Ci t dng danh sch lin kt


Ci t danh sch tuyn tnh dng danh sch lin kt: u im: Chn v xa nhanh do ch cn thao tc vi mt vi con tr Khng cn bit trc s lng phn t ca danh sch, khi cn lu tr phn t mi cp pht b nh (danh sch ch y khi b nh trn my ht) Nhc im: Khng cho php truy nhp trc tip tng phn t Theo tc tm kim mt nhiu thi gian (c ()) Cn b nh lu thm cc con tr

ng dng
VD1. Biu din a thc

ng dng
typedef struct poly{ float heSo; float soMu; struct poly *nextNode; } POLY; Cc thao tc:
Nhp a thc Hin th Cng Tr Nhn Tnh gi tr a thc Chia .

You might also like