You are on page 1of 7

u trúc d li u và gi i thu t

Ch ng 1. ng quan v c u trúc d li u và gi i thu t

1.1. Vai trò c a c u trúc d li u trong m t án tin h c


Th c hi n gi i m t bài toán tin h c là chuy n bài toán th c t thành bài toán có th
gi i quy t trên máy tính. M t bài toán th c t b t k u bao g m các i t ng d li u
và các yêu c u x lý trên các i t ng ó. Vì th , xây d ng bài toán tin h c ph n ánh
c bài toán th c t c n chú tr ng n hai v n :
v T ch c bi u di n các it ng th c t :
Các thành ph n d li u th c t a d ng, phong phú và th ng ch a ng nh ng
quan h nào ó v i nhau, do ó trong bài toán tin h c c n ph i t ch c, xây d ng các c u
trúc d li u thích h p nh t sao cho v a có th ph n ánh chính xác các d li u th c t
này, v a có th d dàng dùng máy tính x lý. Công vi c này g i là xây d ng c u trúc
d li u cho bài toán.
v Xây d ng các thao tác x lý d li u:
T nh ng yêu c u x lý trong th c t , c n tìm ra các gi i thu t t ng ng xác
nh trình t các thao tác máy tính ph i thi hành cho ra k t qu mong mu n, ây là
c xây d ng gi i thu t cho bài toán.
Tuy nhiên khi gi i quy t m t bài toán trên máy tính, chúng ta th ng có khuynh
ng ch chú tr ng n vi c xây d ng gi i thu t mà quyên i t m quan tr ng c a vi c
t ch c d li u trong bài toán. Gi i thu t ph n ánh các phép x lý, còn i t ng x lý
c a gi i thu t l i là d li u. Chính d li u ch a ng các thông tin c n thi t th c hi n
gi i thu t. xác nh c gi i thu t phù h p c n ta c n ph i bi t nó tác ng n lo i
d li u nào và khi l a ch n c u trúc d li u c ng c n ph i hi u rõ nh ng thao tác nào tác
ng lên d li u ó. Nh v y trong m t bài toán tin h c, c u trúc d li u và gi i thu t có
m i quan h ch t ch v i nhau, c th hi n qua công th c:
C u trúc d li u + Gi i thu t = Ch ng trình
V i m t c u trúc d li u ã ch n, s có nh ng gi i thu t t ng ng, phù h p. Khi
c u trúc d li u thay i th ng gi i thu t c ng ph i thay i theo tránh vi c x lý
ng ép, thi u t nhiên trên m t c u trúc không phù h p. H n n a, m t c u trúc d li u
t t s giúp gi i thu t x lý trên ó có th phát huy tác d ng t t h n, v a nhanh v a ti t
ki m v t t , gi i thu t c ng n gi n và d hi u h n.

1.2. Các tiêu chu n ánh giá c u trúc d li u


Do t m quan tr ng c a c u trúc d li u trong vi c gi i các bài toán trên máy tính,
nên nh t thi t ph i chú tr ng n vi c l a ch n m t ph ng án t ch c d li u thích h p.
M t c u trúc d li u t t ph i tho mãn các tiêu chu n sau:
1.2.1. Ph n ánh úng th c t
ây là tiêu chu n quan tr ng nh t, quy t nh tính úng n c a toàn b bài toán.
C n xem xét k l ng c ng nh d trù các tr ng thái bi n i c a d li u trong chu
trình ho t ng có th l a ch n c u trúc d li u l u tr th hi n chính xác i t ng
th c t .

Ch ng 1. T ng quan v c u trúc d li u và gi i thu t Trang 9


u trúc d li u và gi i thu t
Ví d : M t s tình hu ng ch n c u trúc l u tr sai
− Ch n bi n s nguyên integer l u tr ti n th ng bán hàng ( c tính theo
công th c ti n th ng bán hàng = tr giá hàng *5%), do v y khi làm tròn m i
giá tr ti n th ng s gây thi t h i cho nhân viên bán hàng. Tr ng h p này
ph i s d ng bi n s th c ph n ánh úng k t qu c a công th c tính th c t .
− Trong tr ng trung h c, m i l p có th nh n t i a 25 h c sinh. L p hi n có 20
h c sinh, m i tháng, m i h c sinh óng h c phí 15.000 ng. Ch n m t bi n
s nguyên (kh n ng -32768 ÷ 32767) l u tr t ng s h c phí c a l p h c
trong tháng, n u x y ra tr ng h p có thêm 5 h c sinh n a vào l p thì giá tr
t ng h c phí thu c là 375000 ng, v t kh n ng l u tr c a bi n ã ch n,
gây ra tình tr ng tràn, sai l ch.
1.2.2. Phù h p v i các thao tác trên ó
Tiêu chu n này giúp t ng hi u qu c a bài toán, vi c phát tri n các thu t toán n
gi n, t nhiên h n, ch ng trình t hi u qu cao h n v t c x lý.
1.2.3. Ti t ki m tài nguyên h th ng
C u trúc d li u ch nên s d ng tài nguyên v a m nhi m c ch c n ng
c a nó. Thông th ng có hai lo i tài nguyên c n l u ý nh t: CPU và b nh . Tiêu chu n
này nên cân nh c tu vào tình hu ng c th khi th c hi n bài toán. N u t ch c s d ng
bài toán c n có nh ng x lý nhanh thì khi ch n c u trúc d li u y u t ti t ki m th i gian
x lý ph i t n ng h n tiêu chu n s d ng t i a b nh , và ng c l i.
Ví d : M t s tình hu ng ch n c u trúc l u tr lãng phí
− S d ng bi n integer (2 bytes) l u tr m t giá tr cho bi t tháng hi n hành.
Trong tình hu ng này ta ch c n s d ng bi n ki u byte là .
− l u tr danh sách h c viên trong m t l p, s d ng m ng 60 ph n t (gi i
h n s h c viên trong l p t i a là 60). N u s l ng h c viên th t s ít h n 60,
thì gây lãng phí b nh . H n n a, s h c viên có th thay i theo t ng k ,
t ng n m. Trong tr ng h p này ta c n có m t c u trúc d li u linh ng h n
m ng nh danh sách liên k t…

1.3. Ki u d li u và c u trúc d li u
Máy tính th c s ch có th l u tr d ng nh phân thô s . N u mu n ph n ánh
c d li u th c t a d ng và phong phú, c n ph i xây d ng nh ng phép ánh x ,
nh ng qui t c t ch c ph c t p che lên t ng d li u thô, nh m a ra nh ng khái ni m
logic v hình th c l u tr khác nhau th ng c g i là ki u d li u. Nh ã phân tích
ph n u, gi a hình th c l u tr và các thao tác x lý trên ó có quan h m t thi t v i
nhau. T ó có th a ra m t nh ngh a cho ki u d li u nh sau:
1.3.1. nh ngh a ki u d li u
Ki u d li u T c xác nh b i b <V,O>, v i :
− V: t p các giá tr h p l mà it ng ki u T có th l u tr ;
− O : t p các thao tác x lý có th thi hành trên it ng ki u T.
Ví d :

Ch ng 1. T ng quan v c u trúc d li u và gi i thu t Trang 10


u trúc d li u và gi i thu t
• Ki u d li u ký t = <Vc, Oc> v i:
− Vc = {a - z, A - Z}
− Oc = {l y mã ASCII c a ký t , bi n i ký t th ng thành ký t
hoa,...}
• Ki u d li u s nguyên = <Vi, Oi>
− Vc = {-32768 ÷32767}
− Oc = {+, -, *, /, %, các phép so sánh}
Nh v y, mu n s d ng m t ki u d li u c n n m v ng c n i dung d li u c
phép l u tr và các x lý tác ng trên ó.
1.3.2. Các thu c tính c a m t ki u d li u
M t ki u d li u bao g m các thu c tính sau :
− Tên ki u d li u;
− Mi n giá tr ;
− Kích th c l u tr ;
− T p các toán t tác ng lên ki u d li u.
1.3.3. Các ki u d li u c b n
Thông th ng trong m t h ki u c a ngôn ng l p trình s có m t s ki u d li u
c g i là ki u d li u n hay ki u d li u phân t (atomic), các ki u d li u n bao
g m:
− Ki u r i r c: s nguyên, ký t , logic, li t kê, mi n con.
− Ki u liên t c: s th c.
Tu t ng ngôn ng l p trình, các ki u d li u nh ngh a s n này có th khác nhau
ôi chút. Ch ng h n, v i ngôn ng C, các ki u d li u này ch g m s nguyên, s th c,
ký t . Và theo quan i m c a C, ki u ký t th c ch t c ng là ki u s nguyên v m t l u
tr , ch khác v cách s d ng. Ngoài ra, giá tr logic úng (TRUE) và giá tr logic sai
(FALSE) c bi u di n trong ngôn ng C nh là các giá tr nguyên khác 0 và b ng 0.
Trong khi ó Pascal nh ngh a t t c các ki u d li u ã li t kê trên và phân bi t
chung m t cách ch t ch : Ki u integer; Ki u real; Ki u boolean; Ki u char; Ki u li t kê;
Ki u n con.
Các ki u d li u nh s n trong C g m các ki u sau:
Tên ki u Kích th c Mi n giá tr Ghi chú
char 01 byte -128 n 127 Có th dùng nh s nguyên
1 byte có d u ho c ki u ký
t
unsign char 01 byte 0 n 255 S nguyên 1 byte không
d u
int 02 byte -32738 n 32767
unsign int 02 byte 0 n 65335 Có th g i t t là unsign
long 04 byte -2 32 n 231 -1
Ch ng 1. T ng quan v c u trúc d li u và gi i thu t Trang 11
u trúc d li u và gi i thu t
unsign long 04 byte 0 n 2 32-1
float 04 byte 3.4E-38 n 3.4E38 Gi i h n ch tr tuy t
i.Các giá tr <3.4E-38
c coi = 0. Tuy nhiên
ki u float ch có 7 ch s
có ngh a.
double 08 byte 1.7E-308 n 1.7E308
long double 10 byte 3.4E-4932 n 1.1E4932

1.3.4. Các ki u d li u có c u trúc


Khi gi i quy t các bài toán ph c t p, ta ch s d ng các d li u các d li u n là
không , ta ph i c n n các c u trúc d li u. M t c u trúc d li u bao g m m t t p
h p nào ó các d li u phân t , các thành ph n này liên k t v i nhau b i m t ph ng
pháp nào ó. a s các ngôn ng l p trình u cài t s n m t s ki u có c u trúc c b n
nh m ng, chu i, t p tin, b n ghi...và cung c p c ch cho l p trình viên t nh ngh a
ki u d li u m i.
v Ki u chu i ký t (String): là m t trong các ki u d li u có c u trúc n gi n
nh t và th ng các ngôn ng l p trình u nh ngh a nó nh m t ki u c b n.
Do tính thông d ng c a ki u chu i ký t các ngôn ng l p trình luôn cung c p
s n m t b các hàm th vi n các x lý trên ki u d li u này. c bi t trong C
th vi n các hàm x lý chu i ký t r t a d ng và phong phú. Các hàm này
c t trong th vi n string.lib c a C.
Chu i ký t trong C c c u trúc nh m t chu i liên ti p các ký t k t
thúc b ng ký t có mã ASCII b ng 0 (NULL character). Nh v y, gi i h n
chi u dài c a m t chu i ký t trong C là 1 Segment (t i a ch a 65335 ký t ),
ký t u tiên c ánh s là ký t th 0.
• Ngôn ng Pascal: <ten_chuoi>: String (<kich_thuoc>);
Ví d : hoten: String; mssv: String(8);
• Ngôn ng C: char <ten_chu i>[< kich_thuoc >]; hay char *<ten_chu i>;
Ví d : char a[10], b[] = “ABC”, *c= “ABC”;
Các thao tác trên chu i ký t r t a d ng. Sau ây là m t s thao tác thông d ng:
− So sánh 2 chu i: strcmp
− Sao chép 2 chu i: strcpy
− Ki m tra 1 chu i n m trong chu i kia: strstr
− C t 1 t ra kh i 1 chu i: strtok
− i 1 s ra chu i: itoa
− i 1 chu i ra s : atoi, atof, ...
− i 1 hay 1 s giá tr ra chu i: sprintf
− Nh p m t chu i: gets Xu t m t chu i: puts

Ch ng 1. T ng quan v c u trúc d li u và gi i thu t Trang 12


u trúc d li u và gi i thu t
v Ki u m ng (array): là m t t p h p nhi u ph n t có cùng m t ki u giá tr và
chung m t tên. M i ph n t m ng bi u di n c m t giá tr . Các ph n t c a
m ng c truy xu t thông qua ch s .
• Ngôn ng Pascal: <ten_mang>: array[ds_cacchieu] of <kieu_dulieu>;
Ví d : a: array[1..10] of integer; b: array[1..3,1..2] of integer;
• Ngôn ng C: <kieu_dulieu> <ten_mang>[<ds_cacchieu>];
Ví d : int a[10], b[3][2];
Ta c ng có th v a khai báo v a gán giá tr kh i ng cho m t m ng nh sau:
int a[5] = (1, 7, -3, 8, 19);
Trong tr ng h p này C cho phép ta khai báo m t cách ti n l i h n:
int a[] = (1, 7, -3, 8, 19);
int b[ ][ ]={{1, 7, -3, 8, 19}, {4, 5, 2, 8, 9}, {21, -7, 45, -3, 4}};
(m ng a s có kích th c là 3x5).
v Ki u b n ghi, m u tin (record, struct): là ki u c dùng l u tr m t i
t ng có nhi u thành ph n, các thành ph n có th thu c các ki u d li u khác
nhau.
• Ngôn ng Pascal: <ten_bangghi>: record
<ten_thanhphan>: <kieu_dulieu>;
……
<ten_thanhphan>: <kieu_dulieu>;
end;
Ví d : sinhvien: record
hoten: string[30];
namsinh: integer;
diachi: string;
toan, ly, hoa, tong: real;
end;
• Ngôn ng C: struct <ten_bangghi>
{ <kieu_dulieu> <ten_thanhphan>;
……
<kieu_dulieu> <ten_thanhphan>;
};
Ví d : struct hocvien
{ char ho[30];
char ten[7];
float toan, ly, hoa , dtb;
Ch ng 1. T ng quan v c u trúc d li u và gi i thu t Trang 13
u trúc d li u và gi i thu t
char xeploai[10];
};
v Ki u con tr (Pointer): là m t ki u d li u dùng ch a a ch c a m t bi n
ho c m t hàm nào ó. Con tr th ng c dùng :
+ Tr v nhi u tr t hàm qua c ch truy n theo tham s theo a ch trong
hàm (tham s hình th c bi n).
+ T o các c u trúc d li u ph c t p nh danh sách liên k t và cây nh phân.
+ Truy n m ng và chu i gi a các hàm khá thu n l i.
• Ngôn ng Pascal: <ten_contro> = ^<kieu_dulieu>;
Ví d : Pointer = ^Node ;
Node = record
infor : Item ;
next : Pointer;
end ;
• Ngôn ng C: <kieu_dulieu> *<ten_contro>;
Ví d : int *songuyen, char *chuoi;
v Ki u file (t p tin): là ki u d li u cho phép th c hi n các thao tác (m , óng,
xóa, ghi ký t , xóa ký t ,…) trên các t p tin (v n b n, nh phân).
• Ngôn ng C: <ten_taptin>: file of <kieu_dulieu>;
Ví d : fileReal: file of real;
• Ngôn ng C: FILE *<ten_taptin>;
Ví d : FILE *fptr;

Bài t p
1.Tìm thêm m t s ví d minh ho m i quan h gi a c u trúc d li u và gi i thu t.
2. Cho bi t m t s ki u d li u c nh ngh a s n trong m t ngôn ng l p trình các b n
th ng s d ng. Cho bi t m t s ki u d li u ti n nh này có áp ng m i yêu c u v t
ch c d li u không ?
3. t ngôn ng l p trình có nên cho phép ng i s d ng t nh ngh a thêm các ki u d
li u có c u trúc? Gi i thích và cho ví d .
4. Gi s có m t b ng gi tàu cho bi t thông tin v các chuy n tàu khác nhau c a m ng
ng s t. Hãy bi u di n các d li u này b ng m t c u trúc d li u thích h p (file, array, struct
...) sao cho d dàng truy xu t gi kh i hành, gi n c a m t chuy n tàu b t k t i m t nhà ga
tk .
5. Gi s quy t c t ch c qu n lý nhân viên c a m t công ty nh sau :
Thông tin v m t nhân viên bao g m lý l ch và b ng ch m công :
− Lý l ch nhân viên :
+ Mã nhân viên : chu i 8 ký t

Ch ng 1. T ng quan v c u trúc d li u và gi i thu t Trang 14


u trúc d li u và gi i thu t
+ Tên nhân viên : chu i 20 ký t
+ Tình tr ng gia ình : 1 ký t ( M = Married, S = Single)
+ con : s nguyên $ 20
+ Trình v n hoá : chu i 2 ký t (C1 = c p 1 ; C2 = c p 2 ; C3 = c p 3; H = i
c; CH = cao h c)
+ ng c n b n : s $ 1000000
− Ch m công nhân viên :
+ ngày ngh có phép trong tháng : s $ 28
+ ngày ngh không phép trong tháng : s $ 28
+ ngày làm thêm trong tháng : s $ 28
+ t q a công vi c : chu i 2 ký t (T = T t; TB = t ;K = Kém)
+ ng th c l nh trong tháng : s $ 2000000
Quy t c tính l ng :
ng th c l nh = L ng c n b n + Ph tr i
Trong ó n u:
- s con > 2: Ph tr i = +5% L ng c n b n
- trình v n hoá = CH: Ph tr i = +10%L ng c n b n
- làm thêm: Ph tr i=+4%L ng c n b n/ngày
- ngh không phép: Ph tr i= -5%L ng c n b n/ngày
Ch c n ng yêu c u :
- C p nh t lý l ch, b ng ch m công cho nhân viên (thêm, xoá, s a)
- Xem b ng l ng hàng tháng
- Tìm thông tin c a m t nhân viên
ch c c u trúc d li u thích h p bi u di n các thông tin trên, và cài t
ch ng trình theo các ch c n ng ã mô t .

Ch ng 1. T ng quan v c u trúc d li u và gi i thu t Trang 15

You might also like