(NB) Giáo trình Cấu trúc dữ liệu và giải thuật cung cấp cho người học các kiến thức: Giới thiệu về cấu trúc dữ liệu và giải thuật; Kiểu dữ liệu nâng cao; Danh sách; Ngăn xếp và hàng đợi; Sắp xếp và tìm kiếm. Mời các bạn cùng tham khảo.
Trang 1B NÔNG NGHI P VÀ PHÁT TRI N NÔNG THÔNỘ Ệ Ể
TRƯỜNG CAO Đ NG C GI I NINH BÌNHẲ Ơ Ớ
Trang 2Ninh Bình, năm 2018
Trang 4L i gi i thi uờ ớ ệ
Các ki n th c v c u trúc d li u (CTDL) và gi i thu t đóng vai trò quanế ứ ề ấ ữ ệ ả ậ
tr ng trong vi c đào t o ngh L p trình máy tính. Sách này đọ ệ ạ ề ậ ựơc hình thành trên
c s các bài gi ng v CTDL và gi i thu t mà tôi cùng các đ ng nghi p đã đ cơ ở ả ề ả ậ ồ ệ ọ nhi u năm t i khoa ToánC Tin h c Trề ạ ơ ọ ường Đ i h c Khoa h c T nhiên –ạ ọ ọ ự
Đ i h c Qu c Gia Hà N i; Khoa Công ngh thông tin Đ i h c Bách Khoa Hàạ ọ ố ộ ệ ạ ọ
N i; Khoa Công ngh thông tin Đ i h c Giao thông v n t i. Sách độ ệ ạ ọ ậ ả ược biên
so n ch y u đ làm tài li u tham kh o cho h c sinh, sinh viên ngh L p trìnhạ ủ ế ể ệ ả ọ ề ậ máy tính, nh ng nó cũng r t b ích cho các đ c gi khác c n có hi u bi t đ yư ấ ổ ộ ả ầ ể ế ầ
đ h n v CTDL và gi i thu t.ủ ơ ề ả ậ
Giáo trình này g m b n chồ ố ương
Chương 1. Gi i thi u v c u trúc d li u và gi i thu tớ ệ ề ấ ữ ệ ả ậ
Chương 2. Ki u d li u nâng caoể ữ ệ
Chương 3. Danh sách
Chương 4. Ngăn x p và hàng đ iế ợ
Chương 5. S p x p và tìm ki mắ ế ế
Đ biên so n giáo trình này, chúng tôi đã tham kh o các tài li u: C u trúcể ạ ả ệ ấ
d li u và gi i thu t, PTS Đinh M nh Tữ ệ ả ậ ạ ường; Lê Minh Hoàng, C u trúc d li uấ ữ ệ
và gi i thu t.ả ậ
Giáo trình C u trúc d li u và gi i thu t đã đấ ữ ệ ả ậ ược H i đ ng th m đ nhổ ồ ẩ ị
Trường Cao đ ng ngh C Gi i Ninh Bình xét duy t. Tuy nhiên trong quá trìnhẳ ề ơ ớ ệ biên so n không tránh kh i nh ng sai sót, r t mong đạ ỏ ữ ấ ượ ực s đóng góp quý báu chân thành c a b n đ c.ủ ạ ọ
Trang 510 1.2. Xây d ng gi i thu tự ả ậ
10 1.3. M i quan h gi a c u trúc d li u và gi i thu tố ệ ữ ấ ữ ệ ả ậ
11
2. Ki u d li u và mô hình d li uể ữ ệ ữ ệ
11 2.1. Bi u di n d li uể ễ ữ ệ
11 2.3. H ki u c a ngôn ng Pascalệ ể ủ ữ
16 2.4. Mô hình d li u và ki u d li u tr u tữ ệ ể ữ ệ ừ ượng
18
3. Thi t k và gi i thu tế ế ả ậ
22 3.1. Các tiêu chu n đánh giá c u trúc d li uẩ ấ ữ ệ
22 3.2. Đánh giá đ ph c t p c a thu t toánộ ứ ạ ủ ậ
23
Chương 2
25 Các ki u d li u nâng caoể ữ ệ
28 2.2. Con tr và m ng m t chi u ỏ ả ộ ề
29 2.2.2. Tên m ng là m t h ng đ a ch ả ộ ằ ị ỉ
30 2.2.3. Con tr tr t i các ph n t c a m ng m t chi u ỏ ỏ ớ ầ ử ủ ả ộ ề
30 2.3. Con tr và m ng nhi u chi u ỏ ả ề ề
34 2.4. Ki u con tr , ki u đ a ch , các phép toán trên con tr ể ỏ ể ị ỉ ỏ
36
3. C u trúc và h p ấ ợ
44 3.1. C u trúc (struct)ấ
44 3.2. Ki u unionể
45
Trang 646 4.1. Khái ni m v t p tin ệ ề ệ
46 4.2. Khai báo s d ng t p m t s hàm thử ụ ệ ộ ố ường dùng khi thao tác trên t pệ
54
1. Các khái ni m ệ
54 1.1. Khái ni m v danh sáchệ ề
54 1.2. Các phép toán trên danh sách
54
2. L u t k ti p đ i v i danh sách tuy n tính ư ữ ế ế ố ớ ế
56 2.1. Đ nh nghĩaị
56 2.2. Danh sách liên k t đ n (Singly Linked List)ế ơ
56
3. L u tr móc n i đ i v i danh sách tuy n tính ư ữ ố ố ớ ế
85 3.1. C u trúc d li uấ ữ ệ
85 3.2. Các thao tác trên danh sách
87
Chương 4
111 Ngăn x p và hàng đ iế ợ
113 2.2. Thêm (Đ y) m t ph n t vào ngăn x p (Push)ẩ ộ ầ ử ế
114 2.3. L y n i dung m t ph n t trong ngăn x p ra đ x lý (Pop)ấ ộ ộ ầ ử ế ể ử
115 2.4. H y ngăn x pủ ế
116 3.Ví d v ng d ng stackụ ề ứ ụ
122 5.2. Thêm (Đ a) m t ph n t vào hàng đ i (Add)ư ộ ầ ử ợ
123 5.3. L y n i dung m t ph n t trong hàng đ i ra đ x lý (Get)ấ ộ ộ ầ ử ợ ể ử
124
Trang 75.4. H y hàng đ iủ ợ
126
6. Stack và queue móc n iố
126 6.1. Stack móc n iố
126 6.2. Queue móc n iố
133 1.2. Gi i thi u v tìm ki mớ ệ ề ế
134
2. Các phương pháp s p x pắ ế
134 2.1. S p x p ki u ch n (Selection sort)ắ ế ể ọ
134 2.2. Thu t toán s p x p n i b t (bubble sort)ậ ắ ế ổ ọ
136 2.3. Thu t toán s p x p ki u chèn (insertion sort)ậ ắ ế ể
137 2.4. Thu t toán s p x p ki u phân đo n (quick sort)ậ ắ ế ể ạ
139 2.5. Thu t toán s p x p tr n ậ ắ ế ộ
144
3. Các phương pháp tìm ki mế
149 3.1. Tìm ki m tu n t (Sequential search)ế ầ ự
149 3.2. Tìm ki m nh phân (Binary search)ế ị
149 TÀI LI U THAM KH OỆ Ả
152
Trang 8MÔN H C C U TRÚC D LI U VÀ GI I THU TỌ Ấ Ữ Ệ Ả Ậ
Tên Môn h c: ọ C u trúc d li u và gi i thu tấ ữ ệ ả ậ
Mã môn h c: MH19ọ
V trí, tính ch t, ý nghĩa và vai trò c a môn h c:ị ấ ủ ọ
V trí môn h c: Môn h c này đị ọ ọ ược h c sau môn h c Tin h c căn b n, L pọ ọ ọ ả ậ trình căn b n.ả
Tính ch t môn h c: Môn h c này yêu c u ph i có t duy logic và các ki nấ ọ ọ ầ ả ư ế
th c v l p trình căn b n, l p trình hứ ề ậ ả ậ ướng đ i tố ượng
Ý nghĩa, vai trò c a môn h c: ủ ọ Đây là môn h c c s ngành c a các ngành liênọ ơ ở ủ quan đ n công ngh thông tin, cung c p cho sinh viên các ki n th c c b nế ệ ấ ế ứ ơ ả
+ Trình bày được các k thu t ngăn x p và hàng đ i, các thu t toán s p x pỹ ậ ế ợ ậ ắ ế
và tìm ki m, các lo i danh sách liên k t.ế ạ ế
K năng: ỹ
+ Phân tích được các lo i d li u, gi i thu t và k t h p đạ ữ ệ ả ậ ế ợ ược d li u vàữ ệ
gi i thu t;ả ậ
+ Cài đ t đặ ược các thu t toán s p x p và tìm ki m; ậ ắ ế ế
+ Cài đ t đặ ược các thu t toán trên các c u trúc d li u: m ng, danh sách,ậ ấ ữ ệ ả danh sách liên k t.ế
Thái đ :ộ
+ Rèn luy n tính c n th n, t m , chính xác, sáng t o, làm vi c đ c l p vàệ ẩ ậ ỉ ỉ ạ ệ ộ ậ theo nhóm;
+ Rèn luy n k năng l p trình;ệ ỹ ậ
+ Đ m b o an toàn cho ngả ả ười và trang thi t b ế ị
Trang 9Th cự hành
Ki mể tra
I Chương 1: Gi i thi u c u trúc d li uớ ệ ấ ữ ệ
2. Ki u d li u và mô hình d li u ể ữ ệ ữ ệ 2 2
3. Thi t k và gi i thu t ế ế ả ậ 2 2
II Chương 2: Ki u d li u nâng caoể ữ ệ 20 5 14 1
Trang 10 Phân tích được gi i thu t; ả ậ
S d ng đử ụ ược các phương pháp phân tích, thi t k gi i thu t;ế ế ả ậ
Rèn luy n tính c n th n, t m , chính xác, sáng t o, th c hi n các thao tác anệ ẩ ậ ỉ ỉ ạ ự ệ toàn v i máy tính.ớ
N i dung:ộ
1. M i liên h gi a c u trúc d li u và gi i thu tố ệ ữ ấ ữ ệ ả ậ
1.1. Xây d ng c u trúc d li uự ấ ữ ệ
Có th nói r ng không có m t chể ằ ộ ương trình máy tính nào mà không có dữ
li u đ x lý. D li u có th là d li u đ a vào (input data), d li u trungệ ể ử ữ ệ ể ữ ệ ư ữ ệ gian ho c d li u đ a ra (output data). Do v y, vi c t ch c đ l u tr dặ ữ ệ ư ậ ệ ổ ứ ể ư ữ ữ
li u ph c v cho chệ ụ ụ ương trình có ý nghĩa r t quan tr ng trong toàn b hấ ọ ộ ệ
th ng chố ương trình. Vi c xây d ng c u trúc d li u quy t đ nh r t l n đ nệ ự ấ ữ ệ ế ị ấ ớ ế
ch t lấ ượng cũng nh công s c c a ngư ứ ủ ườ ậi l p trình trong vi c thi t k , càiệ ế ế
đ t chặ ương trình
1.2. Xây d ng gi i thu tự ả ậ
Khái ni m gi i thu t hay thu t gi i mà nhi u khi còn đệ ả ậ ậ ả ề ược g i là thu t toánọ ậ dùng đ ch phể ỉ ương pháp hay cách th c (method) đ gi i quy t v n đ Gi iứ ể ả ế ầ ề ả thu t có th đậ ể ược minh h a b ng ngôn ng t nhiên (natural language), b ngọ ằ ữ ự ằ
s đ (flow chart) ho c b ng mã gi (pseudo code). Trong th c t , gi i thu tơ ồ ặ ằ ả ự ế ả ậ
thường được minh h a hay th hi n b ng mã gi t a trên m t hay m t sọ ể ệ ằ ả ự ộ ộ ố
Trang 11ngôn ng l p trình nào đó (thữ ậ ường là ngôn ng mà ngữ ườ ậi l p trình ch n đọ ể cài đ t thu t toán), ch ng h n nh C, Pascal, …ặ ậ ẳ ạ ư
Khi đã xác đ nh đ ị ượ c c u trúc d li u thích h p, ng ấ ữ ệ ợ ườ ậ i l p trình s b t đ u ẽ ắ ầ
ti n hành xây d ng thu t gi i t ế ự ậ ả ươ ng ng theo yêu c u c a bài toán đ t ra ứ ầ ủ ặ trên c s c a c u trúc d li u đã đ ơ ở ủ ấ ữ ệ ượ c ch n ọ Đ gi i quy t m t v n đ cóể ả ế ộ ấ ề
th có nhi u phể ề ương pháp, do v y s l a ch n phậ ự ự ọ ương pháp phù h p là m tợ ộ
vi c mà ngệ ườ ậi l p trình ph i cân nh c và tính toán. S l a ch n này cũng cóả ắ ự ự ọ
th góp ph n đáng k trong vi c gi m b t công vi c c a ngể ầ ể ệ ả ớ ệ ủ ườ ậi l p trình trong ph n cài đ t thu t toán trên m t ngôn ng c th ầ ặ ậ ộ ữ ụ ể
1.3. M i quan h gi a c u trúc d li u và gi i thu tố ệ ữ ấ ữ ệ ả ậ
M i quan h gi a c u trúc d li u và Gi i thu t có th minh h a b ng đ ngố ệ ữ ấ ữ ệ ả ậ ể ọ ằ ẳ
th c:ứ
C u trúc d li u + Gi i thu t = Chấ ữ ệ ả ậ ương trình
Nh v y, khi đã có c u trúc d li u t t, n m v ng gi i thu t th c hi n thìư ậ ấ ữ ệ ố ắ ữ ả ậ ự ệ
vi c th hi n chệ ể ệ ương trình b ng m t ngôn ng c th ch là v n đ th iằ ộ ữ ụ ể ỉ ấ ề ờ gian. Khi có c u trúc d li u mà ch a tìm ra thu t gi i thì không th cóấ ữ ệ ư ậ ả ể
chương trình và ngượ ạc l i không th có Thu t gi i khi ch a có c u trúc dể ậ ả ư ấ ữ
li u. M t chệ ộ ương trình máy tính ch có th đỉ ể ược hoàn thi n khi có đ y đ cệ ầ ủ ả
C u trúc d li u đ l u tr d li u và Gi i thu t x lý d li u theo yêu c uấ ữ ệ ể ư ữ ữ ệ ả ậ ử ữ ệ ầ
c a bài toán đ t ra.ủ ặ
2. Ki u d li u và mô hình d li uể ữ ệ ữ ệ
2.1. Bi u di n d li uể ễ ữ ệ
Trong máy tính đi n t (MTĐT), các d li u dù có b n ch t khác nhau nhệ ử ữ ệ ả ấ ư
th nào (s nguyên, s th c, hay xâu ký t , ), đ u đế ố ố ự ự ề ược bi u di n dể ễ ướ i
d ng nh phân. M i d li u đạ ị ỗ ữ ệ ược bi u di n dể ễ ướ ại d ng m t dãy các s nhộ ố ị phân 0 ho c 1. V m t k thu t đây là cách bi u di n thích h p nh t, vì cácặ ề ặ ỹ ậ ể ễ ợ ấ giá tr 0 và 1 d dàng đị ễ ược mã hoá b i các ph n t v t lý ch có hai tr ngở ầ ử ậ ỉ ạ thái. Chúng ta s không quan tâm đ n cách bi u di n này c a d li u, cũngẽ ế ể ễ ủ ữ ệ
Trang 12nh các cách ti n hành các thao tác, các phép toán trên các d li u đư ế ữ ệ ược bi uể
di n dễ ướ ại d ng nh phân.ị
Cách bi u di n nh phân c a d li u r t không thu n ti n đ i v i con ngể ễ ị ủ ữ ệ ấ ậ ệ ố ớ ườ i
Vi c xu t hi n các ngôn ng l p trình b c cao (FORTRAN, BASIC,ệ ấ ệ ữ ậ ậ PASSCAL, C ) đã gi i phóng con ngả ười kh i nh ng khó khăn khi làm vi cỏ ữ ệ
v i cách bi u di n trong máy c a d li u. Trong các ngôn ng l p trình b cớ ể ễ ủ ữ ệ ữ ậ ậ cao, các d li u, hi u theo m t nghĩa nào đó, là s trìu tữ ệ ể ộ ự ượng hoá các tính
ch t c a các đ i tấ ủ ố ượng trong th gi i hi n th c. Nói d li u là s trìu tế ớ ệ ự ữ ệ ự ượ nghoá t th gi i hi n th c, vì ta đã b qua nh ng nhân t , tính ch t mà ta choừ ế ớ ệ ự ỏ ữ ố ấ
là không c b n, ch gi l i nh ng tính ch t đ c tr ng cho các đ i tơ ả ỉ ữ ạ ữ ấ ặ ư ố ượ ngthu c ph m vi bài toán đang xét. Ch ng h n, v trí c a m t đ i tộ ạ ẳ ạ ị ủ ộ ố ượng trong
th c ti n, đự ễ ược đ c tr ng b i c p s th c (x,y) (đó là to đo đêcác c aặ ư ở ặ ố ự ạ ạ ủ
m t đi m trong m t ph ng). Do đó, trong ngôn ng Pascal, v trí m t đ iộ ể ặ ẳ ữ ị ộ ố
tượng được bi u di n b i b n ghi g m hai trể ễ ở ả ồ ường tương ng v i hoành đứ ớ ộ
và tung đ c a m t đi m. Trong toán h c có các khái ni m bi u di n đ cộ ủ ộ ể ọ ệ ể ễ ặ
tr ng v m t s lư ề ặ ố ượng và các quan h c a các đ i tệ ủ ố ượng trong th gi i hi nế ớ ệ
th c, đó là các khái ni m s nguyên, s th c, s ph c, dãy, ma tr n, Trênự ệ ố ố ự ố ứ ậ
c s các khái ni m toán h c này, ngơ ở ệ ọ ười ta đã đ a vào trong các ngôn ngư ữ
l p trình b c cao các d li u ki u nguyên, th c, ph c, m ng, b n ghi, Tuyậ ậ ữ ệ ể ự ứ ả ả nhiên do tính đa d ng c a các bài toán c n x lý b ng MTĐT, ch s d ngạ ủ ầ ử ằ ỉ ử ụ các ki u d li u có s n trong các ngôn ng l p trình b c cao là ch a đ để ữ ệ ẵ ữ ậ ậ ư ủ ể
mô t các bài toán. Chúng ta ph i c n đ n các ả ả ầ ế c u trúc d li u ấ ữ ệ Đó là các dữ
li u ph c t p, đệ ứ ạ ược xây d ng nên t các d li u đã có, đ n gi n h n b ngự ừ ữ ệ ơ ả ơ ằ các phương pháp liên k t nào đó.ế
Đ gi i quy t m t bài toán b ng MTĐT, ta c n xây d ng ể ả ế ộ ằ ầ ự mô hình d li u ữ ệ
mô t ả bài toán. Đó là s trìu tự ượng hoá các đ c tr ng c a các đ i tặ ư ủ ố ượng thu cộ
ph m vi v n đ mà ta quan tâm, các m i quan h gi a các đ i tạ ấ ề ố ệ ữ ố ượng đó. Dùng làm các mô hình d li u trong tin h c, chúng ta s s d ng các mô hìnhữ ệ ọ ẽ ử ụ toán h c nh danh sách, cây, t p h p, ánh x , quan h , đ th , Mô hình dọ ư ậ ợ ạ ệ ồ ị ữ
Trang 13li u s đệ ẽ ược bi u di n b i các c u trúc d li u. Thông thể ễ ở ấ ữ ệ ường m t mô hìnhộ
d li u có th đữ ệ ể ược bi u hi n b i nhi u c u trúc d li u khác nhau. Tuể ệ ở ề ấ ữ ệ ỳ
t ng ng d ng, ta s ch n c u trúc d li u nào mà các thao tác c n th c hi nừ ứ ụ ẽ ọ ấ ữ ệ ầ ự ệ
là hi u qu nh t có th đệ ả ấ ể ược
2.2. Ki u d li u và c u trúc d li uể ữ ệ ấ ữ ệ
Trong các ngôn ng l p trình b c cao, các d li u đữ ậ ậ ữ ệ ược phân l p thành cácớ
l p d li u d a vào b n ch t c a d li u. M i m t l p d li u đớ ữ ệ ự ả ấ ủ ữ ệ ỗ ộ ớ ữ ệ ược g i làọ
m t ộ ki u d li u. ể ữ ệ Nh v y, m t ki u T là m t t p h p nào đó, các ph n tư ậ ộ ể ộ ậ ợ ầ ử
c a t p đủ ậ ược g i là các ọ giá tr ịc a ki u.ủ ể Ch ng h n, ki u ẳ ạ ể integer là t p h pậ ợ các s nguyên, ki u ố ể char là m t t p h u h n các ký hi u. Các ngôn ng l pộ ậ ữ ạ ệ ữ ậ trình khác nhau có th có các ki u d li u khác nhau. Fortran có các ki u dể ể ữ ệ ể ữ
li u là ệ integer, real, logical, complex và double complex. Các ki u d li uể ữ ệ trong ngôn ng C là ữ int, float, char, con tr , struct ỏ , Ki u d li u trong ngônể ữ ệ
ng Lisp l i là các Sbi u th c. M t cách t ng quát, m i ngôn ng l p trìnhữ ạ ể ứ ộ ổ ỗ ữ ậ
có m t ộ h ki u ệ ể c a riêng mình. H ki u c a m t ngôn ng bao g m các ki uủ ệ ể ủ ộ ữ ồ ể
d li u c s và các phữ ệ ơ ở ương pháp cho phép ta t các ki u d li u đã có xâyừ ể ữ ệ
d ng nên các ki u d li u m i.ự ể ữ ệ ớ
Khi nói đ n m t ki u d li u, chúng ta c n ph i đ c p đ n hai đ c tr ngế ộ ể ữ ệ ầ ả ề ậ ế ặ ư sau đây:
1. T p h p các giá tr thu c ki u. Ch ng h n, ki u integer trong ngôn ngậ ợ ị ộ ể ẳ ạ ể ữ Pascal g m t t c các s nguyên đồ ấ ả ố ược bi u di n b i hai byte, t c là g m cácể ễ ở ứ ồ
s nguyên t 32768 đ n + 32767. Trong các ngôn ng l p trình b c cao m iố ừ ế ữ ậ ậ ỗ
h ng, bi n, bi u th c ho c hàm c n ph i đằ ế ể ứ ặ ầ ả ược g n v i m t ki u d li uắ ớ ộ ể ữ ệ xác đ nh. Khi đó, m i bi n (bi u th c, hàm) ch có th nh n các giá tr thu cị ỗ ế ể ứ ỉ ể ậ ị ộ
ki u c a bi n (bi u th c, hàm) đó. ể ủ ế ể ứ
Ví d , n u X là bi n có ki u ụ ế ế ể boolean trong Pascal (var X : boolean) thì X chỉ
có th nh n m t trong hai giá tr ể ậ ộ ị true, false.
2. V i m i ki u d li u, c n ph i xác đ nh m t t p h p nào đó các phép toánớ ỗ ể ữ ệ ầ ả ị ộ ậ ợ
có th th c hi n để ự ệ ược trên các d li u c a ki u. Ch ng h n, v i ki u real,ữ ệ ủ ể ẳ ạ ớ ể
Trang 14các phép toán có th th c hi n để ự ệ ược là các phép toán s h c thông thố ọ ường +,
, *, / , và các phép toán so sánh = , < >, < , < =, >, > =
Thông thường trong m t h ki u c a m t 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).
Ch ng h n, trong ngôn ng Pascal, các ki u d li u ẳ ạ ữ ể ữ ệ integer, real, boolean , char và các ki u li t kê để ệ ược g i là các ki u d li u đ n. S dĩ g i là đ n, vìọ ể ữ ệ ơ ở ọ ơ các giá tr c a các ki u này đị ủ ể ược xem là các đ n th đ n gi n nh t khôngơ ể ơ ả ấ
th phân tích thành các thành ph n đ n gi n h n để ầ ơ ả ơ ược n a.ữ
Nh đã nói, khi gi i quy t các bài toán ph c t p, ch s d ng 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 thành ph n ữ ệ ầ , các d li u thành ph n nàyữ ệ ầ
được liên k t v i nhau b i m t phế ớ ở ộ ương pháp nào đó. Các d li u thành ph nữ ệ ầ
có th là d li u đ n, ho c cũng có th là m t c u trúc d li u đã để ữ ệ ơ ặ ể ộ ấ ữ ệ ược xây
d ng. Có th hình dung m t c u trúc d li u đự ể ộ ấ ữ ệ ượ ạc t o nên t các ừ t bào ế
(kh i xây d ng), m i t bào có th xem nh m t cái h p ch a d li u thànhố ự ỗ ế ể ư ộ ộ ứ ữ ệ
ph n.ầ
Trong Pascal và trong nhi u ngôn ng thông d ng khác có m t cách đ n gi nề ữ ụ ộ ơ ả
nh t đ liên k t các t bào, đó là s p x p các t bào ch a các d li u cùngấ ể ế ế ắ ế ế ứ ữ ệ
m t ki u thành m t dãy. Khi đó ta có m t c u trúc d li u độ ể ộ ộ ấ ữ ệ ược g i là ọ m ng ả
(array). Nh v y, có th nói, m t m ng là m t c u trúc d li u g m m t dãyư ậ ể ộ ả ộ ấ ữ ệ ồ ộ xác đ nh các d li u thành ph n cùng m t ki u. Ta v n thị ữ ệ ầ ộ ể ẫ ường nói đ n m ngế ả các s nguyên, m ng các s th c, m ng các b n ghi, M i m t d li uố ả ố ự ả ả ỗ ộ ữ ệ thành ph n c a m ng đầ ủ ả ược g n v i m t ch s t m t t p ch s nào đó. Taắ ớ ộ ỉ ố ừ ộ ậ ỉ ố
có th truy c p đ n m t thành ph n nào đó c a m ng b ng cách ch ra tênể ậ ế ộ ầ ủ ả ằ ỉ
m ng và ch s c a thành ph n đó.ả ỉ ố ủ ầ
M t phộ ương pháp khác đ t o nên các c u trúc d li u m i, là k t h p m tể ạ ấ ữ ệ ớ ế ợ ộ
s t bào (có th ch a các d li u có ki u khác nhau) thành m t ố ế ể ứ ữ ệ ể ộ b n ghi ả
(record). Các t bào thành ph n c a b n ghi đế ầ ủ ả ược g i là các ọ tr ườ c a b n ng ủ ả ghi. Các b n ghi đ n lả ế ượ ạ ượt l i đ c s d ng làm các t bào đ t o nên cácử ụ ế ể ạ
Trang 15c u trúc d li u khác. Ch ng h n, m t trong các c u trúc d li u hay đấ ữ ệ ẳ ạ ộ ấ ữ ệ ượ c
s d ng nh t là m ng các b n ghi.ử ụ ấ ả ả
Còn m t phộ ương pháp quan tr ng n a đ ki n t o các c u trúc d li u, đó làọ ữ ể ế ạ ấ ữ ệ
s d ng con tr Trong phử ụ ỏ ương pháp này, m i t bào là m t b n ghi g m haiỗ ế ộ ả ồ
ph n INFOR và LINK, ph n INFOR có th có m t hay nhi u trầ ầ ể ộ ề ường d li u,ữ ệ còn ph n LINK có th ch a m t hay nhi u con tr tr đ n các t bào khác cóầ ể ứ ộ ề ỏ ỏ ế ế quan h v i t bào đó. Ch ng h n, ta có th cài đ t m t danh sách b i c uệ ớ ế ẳ ạ ể ặ ộ ở ấ trúc d li u danh sách liên k t, trong đó m i thành ph n c a danh sách liênữ ệ ế ỗ ầ ủ
k t là b n ghi g m hai trế ả ồ ường
type Cell = record
element : Item ;next : ^Cell ;end ;
Ở đây, trường element có ki u d li uể ữ ệ Item, m t ki u d li u nào đó c a cácộ ể ữ ệ ủ
ph n t c a danh sách. Trầ ử ủ ường next là con tr tr t i ph n t ti p theo trongỏ ỏ ớ ầ ử ế danh sách. C u trúc d li u danh sách liên k t bi u di n danh sách (aấ ữ ệ ế ể ễ 1, a2, ,
an) có th để ược bi u di n nh trong hìnhể ễ ư
Hình 1.1: C u trúc d li u danh sách liên k t.ấ ữ ệ ế
S d ng con tr đ liên k t các t bào là m t trong các phử ụ ỏ ể ế ế ộ ương pháp ki nế
t o các c u trúc d li u đạ ấ ữ ệ ược áp d ng nhi u nh t. Ngoài danh sách liên k t,ụ ề ấ ế
người ta còn dùng các con tr đ t o ra các c u trúc d li u bi u di n cây,ỏ ể ạ ấ ữ ệ ể ễ
m t mô hình d li u quan tr ng b c nh t.ộ ữ ệ ọ ậ ấ
Trên đây chúng ta đã nêu ba phương pháp chính đ ki n t o các c u trúc dể ế ạ ấ ữ
li u. ( đây chúng ta ch nói đ n các c u trúc d li u trong b nh trong, cácệ Ở ỉ ế ấ ữ ệ ộ ớ
a1 a2 an .
Trang 16c u trúc d li u b nh ngoài nh file ch s , Bcây s đấ ữ ệ ở ộ ớ ư ỉ ố ẽ ược đ c pề ậ riêng.)
M t ki u d li u mà các giá tr thu c ki u không ph i là các d li u đ n màộ ể ữ ệ ị ộ ể ả ữ ệ ơ
là các c u trúc d li u đấ ữ ệ ược g i là ọ ki u d li u có c u trúc ể ữ ệ ấ Trong ngôn ngữ Pascal, các ki u d li u m ng, b n ghi, t p h p, file đ u là các ki u d li uể ữ ệ ả ả ậ ợ ề ể ữ ệ
có c u trúc.ấ
2.3. H ki u c a ngôn ng Pascalệ ể ủ ữ
Pascal là m t trong các ngôn ng có h ki u phong phú nh t. H ki u c aộ ữ ệ ể ấ ệ ể ủ Pascal ch a các ki u c s , integer, real, boolean, char và các quy t c, d aứ ể ơ ở ắ ự vào đó ta có th xây d ng nên các ki u ph c t p h n t các ki u đã có. Tể ự ể ứ ạ ơ ừ ể ừ các ki u c s và áp d ng các quy t c, ta có th xây d ng nên m t t p h pể ơ ở ụ ắ ể ự ộ ậ ợ
vô h n các ki u. H ki u c a Pascal có th đạ ể ệ ể ủ ể ược đ nh nghĩa đ nh quy nhị ị ư sau :
Các ki u c s ể ơ ở
1. Ki u ể integer
2. Ki u ể real
3. Ki u ể boolean
4. Ki u ể char
5. Ki u li t kêể ệ
Gi s obj1, obj2, objn là các đ i tả ử ố ượng nào đó. khi đó ta có th t o nênể ạ
ki u li t kê T b ng cách li t kê ra t t c các đói tể ệ ằ ệ ấ ả ượng đó
Chú ý. T t c các ki u đ n đ u là các ấ ả ể ơ ề ki u có th t ể ứ ự, t c là v i hai giá tr b tứ ớ ị ấ
k a và b thu c cùng m t ki u, ta luôn có a ỳ ộ ộ ể b ho c a ặ b. tr ki u ừ ể real,
các ki u còn l i đ u là ki u có th t đ m để ạ ề ể ứ ự ế ược
6. Ki u ể đo n con ạ
type T = (obj1, obj2, objn)
Trang 17 Trong đó min và max là c n dậ ưới và c n trên c a kho ng ; min và max là cácậ ủ ả giá tr thu c cùng m t ki u integer, char, ho c các ki u li t kê, đ ng th iị ộ ộ ể ặ ể ệ ồ ờ min max. Ki u T g m t t c các giá tr t min đ n max.ể ồ ấ ả ị ừ ế
Các phép toán trong h ki u Pascalệ ể
Nh đã nói v i m i ki u d li u ta ch có th th c hi n m t s phép toánư ớ ỗ ể ữ ệ ỉ ể ự ệ ộ ố
nh t đ nh trên các d li u c a ki u. Ta không th áp d ng m t phép toán trênấ ị ữ ệ ủ ể ể ụ ộ các d li u thu c ki u này cho các d li u có ki u khác. Ta có th phân t pữ ệ ộ ể ữ ệ ể ể ậ
h p các phép toán trên các ki u d li u c a Pascal thành hai l p sau :ợ ể ữ ệ ủ ớ
A. Các phép toán truy c p đ n các thành ph n c a m t đ i tậ ế ầ ủ ộ ố ượng d li u,ữ ệ
ch ng h n truy c p đ n các thành ph n c a m t m ng, đ n các trẳ ạ ậ ế ầ ủ ộ ả ế ường c aủ
m t b n ghi.ộ ả
+ Gi s A là m t m ng v i t p ch s I, khi đó A[i] cho phép ta truy c pả ử ộ ả ớ ậ ỉ ố ậ
đ n thành ph n th i c a m ng. Còn n u X là m t b n ghi thì vi c truyế ầ ứ ủ ả ế ộ ả ệ
c p đ n trậ ế ường F c a nó đủ ược th c hi n b i phép toán X.F.ự ệ ở
B. Các phép toán k t h p d li u.ế ợ ữ ệ
+ Pascal có m t t p h p phong phú các phép toán k t h p m t ho c nhi uộ ậ ợ ế ợ ộ ặ ề
d li u đã cho thành m t d li u m i. Sau đây là m t s nhóm các phépữ ệ ộ ữ ệ ớ ộ ố toán chính
1. Các phép toán s h c. Đó là các phép toán + , , * , / trên các s th c ; cácố ọ ố ự phép toán +, *, /, div, mod trên các s nguyên.ố
2. Các phép toán so sánh. Trên các đ i tố ượng thu c các ki u có th t (đó làộ ể ứ ự các ki u c s và ki u t p), ta có th th c hi n các phép toán so sánh =, < >,ể ơ ở ể ậ ể ự ệ
<, <=, >, >=. C n l u ý r ng, k t qu c a các phép toán này là m t giá trầ ư ằ ế ả ủ ộ ị
ki u boolaen (t c là true ho c false).ể ứ ặ
3. Các phép toán logic. Đó là các phép toán and, or, not được th c hi n trênự ệ hai giá tr false và truc c a ki u boolean.ị ủ ể
type T = min . max
Trang 184. Các phép toán t p h p. Các phép toán h p, giao, hi u c a các t p h p trongậ ợ ợ ệ ủ ậ ợ pascal được bi u di n b i +, *, tể ễ ở ương ng. Vi c ki m tra m t đ i tứ ệ ể ộ ố ượng x
có là ph n t c a t p A hay không đầ ử ủ ậ ược th c hi n b i phép toán x in A. K tự ệ ở ế
qu c a phép toán này là m t giá boolean. ả ủ ộ
2.4. Mô hình d li u và ki u d li u tr u tữ ệ ể ữ ệ ừ ượng
Đ gi i quy t m t v n đ trên MTĐT thông thể ả ế ộ ấ ề ường chúng ta c n ph i quaầ ả
Ví d M t ngụ ộ ười giao hàng, hàng ngày anh ta ph i chuy n hàng t m t thànhả ể ừ ộ
ph đ n m t s thành ph khác r i l i quay v thành ph xu t phát. V n đố ế ộ ố ố ồ ạ ề ố ấ ấ ề
c a anh ta là làm th nào có đủ ế ược m t hành trình ch qua m i thành ph m tộ ỉ ỗ ố ộ
l n v i đầ ớ ường đi ng n nh t có th đắ ấ ể ược
Chúng ta th giúp ngử ười giao hàng mô t chính xác bài toán. Trả ước h t, taế
c n tr l i câu h i, nh ng thông tin đã bi t trong bài toán ngầ ả ờ ỏ ữ ế ười giao hàng là
gì ? Đó là tên c a các thành ph anh ta ph i ghé qua và đ dài các con đủ ố ả ộ ườ ng
có th có gi a hai thành ph Chúng ta c n tìm cái gì ? M t hành trình màể ữ ố ầ ộ
người giao hàng mong mu n là m t danh sách các thành ph A1,A2 An+1ố ộ ố (gi s có n thành ph ), trong đó các A1 (i=1,2, ,n+1) đ u khác nhau, trả ử ố ề ừ An+1 = A1.
V i m t v n đ đ t ra t th c ti n, ta có th mô t chính xác v n đ đóớ ộ ấ ề ặ ừ ự ễ ể ả ấ ề
ho c các b ph n c a nó (v n đ con) b i m t mô hình toán h c nào đó.ặ ộ ậ ủ ấ ề ở ộ ọ
Trang 19hàng là đ th Các đ nh c a đ th là các thành ph , các c nh c a đ th là cácồ ị ỉ ủ ồ ị ố ạ ủ ồ ị
đường n i hai thành ph Tr ng s c a các c nh là đ dài các đố ố ọ ố ủ ạ ộ ường n i haiố thành ph Trong thu t ng c a lý thuy t đ th , danh sách các thành phố ậ ữ ủ ế ồ ị ố
bi u di n hành trình c a ngể ễ ủ ười giao hàng, là m t chu trình qua t t c các đ nhộ ấ ả ỉ
c a đ th Nh v y, bài toán ngủ ồ ị ư ậ ười giao hàng được qui v bài toán trong lýề thuy t đ th Tìm m t chu trình xu t phát t m t đ nh qua t t c các đ nhế ồ ị ộ ấ ừ ộ ỉ ấ ả ỉ còn l i v i đ dài ng n nh t.ạ ớ ộ ắ ấ
Bài toán người giao hàng là m t trong các bài toán đã tr thành kinh đi n. Nóộ ở ể
d mô hình hoá, song cũng r t khó gi i. Chúng ta s quay l i bài toán này.ễ ấ ả ẽ ạ
C n l u ý r ng, đ tìm ra c u trúc toán h c thích h p v i m t bài toán đãầ ư ằ ể ấ ọ ợ ớ ộ cho, chúng ta ph i phân tích k bài toán đ tìm ra câu tr l i cho các câu h iả ỹ ể ả ờ ỏ sau
+ Các thông tin quan tr ng c a bài toán có th bi u di n b i các đ i tọ ủ ể ể ễ ở ố ượ ngtoán h c nào ?ọ
+ Có các m i quan h nào gi a các đ i tố ệ ữ ố ượng ?
+ Các k t qu ph i tìm c a bài toán có th bi u di n b i các khái ni m toánế ả ả ủ ể ể ễ ở ệ
M t mô hình toán h c cùng v i các phép toán có th th c hi n trên các đ iộ ọ ớ ể ự ệ ố
tượng c a mô hình đủ ược g i là ọ mô hình d li u ữ ệ Ch ng h n, trong mô hìnhẳ ạ
d li u đ th , trong s r t nhi u các phép toán, ta có th k ra m t s phépữ ệ ồ ị ố ấ ề ể ể ộ ố toán sau : tìm các đ nh k c a m i đ nh, xác đ nh đỉ ề ủ ỗ ỉ ị ường đi ng n nh t n i haiắ ấ ố
đ nh b t k , tìm các thành ph n liên thông, tìm các đ nh treo, V m t toánỉ ấ ỳ ầ ỉ ề ặ
h c, ọ danh sách là m t dãy h u h n n ph n t (aộ ữ ạ ầ ử 1, a2, , an). Trong mô hình dữ
li u danh sách, chúng ta cũng có th th c hi n m t t p h p r t đa d ng cácệ ể ự ệ ộ ậ ợ ấ ạ phép toán, ch ng h n nh , xác đ nh đ dài c a danh sách, xen m t ph n tẳ ạ ư ị ộ ủ ộ ầ ử
Trang 20m i vào danh sách, lo i m t ph n t nào đó kh i danh sách, s p x p l i danhớ ạ ộ ầ ừ ỏ ắ ế ạ sách theo m t tr t t nào đó, g p hai danh sách thành m t danh sách.ộ ậ ự ộ ộ
Tr l i bài toán ngở ạ ười giao hàng. Có nhi u thu t toán gi i bài toán này.ề ậ ả
Ch ng h n, ta có th gi i b ng phẳ ạ ể ả ằ ương pháp vét c n : gi s có n thành ph ,ạ ả ử ố khi đó m i hành trình là m t hoán v c a n1 thành ph (tr thành ph xu tỗ ộ ị ủ ố ừ ố ấ phát), thành l p (n1)! hoán v , tính đ dài c a hành trình ng v i m i hoán vậ ị ộ ủ ứ ớ ỗ ị
và so sánh, ta s tìm đẽ ược hành trình ng n nh t. Ta cũng có th gi i bài toánắ ấ ể ả
b ng phằ ương pháp qui ho ch đ ng (Phạ ộ ương pháp này s đẽ ược trình bày ở
t p 2 c a sách này). Sau đây ta đ a ra m t thu t toán đ n gi n. Thu t toánậ ủ ư ộ ậ ơ ả ậ này tìm ra r t nhanh nghi m "g n đúng", trong trấ ệ ầ ường h p có đợ ường đi n iố hai thành ph b t k Gi s G là m t đ th (Graph), V là t p h p các đ nhố ấ ỳ ả ử ộ ồ ị ậ ợ ỉ (Node), E là t p h p các c nh c a nó. Gi s c(u,v) là đ dài (nguyên dậ ợ ạ ủ ả ử ộ ương)
c a c nh (u,v). Hành trình (Tour) c a ngủ ạ ủ ười giao hàng có th xem nh m tể ư ộ
t p h p nào đó các c nh. Cost là đ dài c a hành trình. Thu t toán đậ ợ ạ ộ ủ ậ ược bi uể
di n b i th t c Salesperson.ễ ở ủ ụ
procedure Salespersen (G : Graph ; var Tour : set of E ;
var cost : integer) ;var v, w : Node
U : set of V ;begin
Tour : = [ ] ;Cost : = 0 ;
v : = vo ; {vo đ nh xu t phát}ỉ ấ
U : = V [vo] ;
while U < > [ ] dobegin
Ch n (v, w) là c nh ng n nh t v i w thu c U ;ọ ạ ắ ấ ớ ộ
Trang 21v : = w ;
U : = U [w] ;end ;
Tour : = Tour + [(v,vo)] ;Cost : = Cost + c(v,vo) ;end;
Thu t toán Salesperson đậ ược xây d ng trên c s mô hình d li u đ th vàự ơ ở ữ ệ ồ ị
mô hình d li u t p h p. Nó ch a các thao tác trên đ th , các phép toán t pữ ệ ậ ợ ứ ồ ị ậ
h p. T tợ ư ưởng c a thu t toán nh sau. Xu t phát t Tour là t p r ng. Gi sủ ậ ư ấ ừ ậ ỗ ả ử
ta xây d ng đự ược đường đi t đ nh xu t phát vừ ỉ ấ 0 t i đ nh v. Bớ ỉ ước ti p theo, taế
s thêm vào Tour c nh (v,w), đó là c nh ng n nh t t v t i các đ nh w khôngẽ ạ ạ ắ ấ ừ ớ ỉ
n m trên đằ ường đi t vừ 0 t i v. Đ có đớ ể ược chương trình, chúng ta ph i bi uả ể
di n đ th , t p h p b i các c u trúc d li u. Sau đó vi t các th t c (ho cễ ồ ị ậ ợ ở ấ ữ ệ ế ủ ụ ặ hàm) th c hi n các thao tác, các phép toán trên đ th , t p h p có trong thu tự ệ ồ ị ậ ợ ậ toán
Tóm l i, quá trình gi i m t bài toán có th quy v hai giai đo n k ti p nhạ ả ộ ể ề ạ ế ế ư sau:
+ Xây d ng các mô hình d li u mô t bài toán. Thi t k thu t toán b ngự ữ ệ ả ế ế ậ ằ cách s d ng các thao tác, các phép toán trên các mô hình d li u.ử ụ ữ ệ
+ Bi u di n các mô hình d li u b i các c u trúc d li u. V i các c u trúcể ễ ữ ệ ở ấ ữ ệ ớ ấ
d li u đã l a ch n, các phép toán trên các mô hình d li u đữ ệ ự ọ ữ ệ ược th hi nể ệ
b i các th t c (hàm) trong ngôn ng l p trình nào đó.ở ủ ụ ữ ậ
Toán h c đã cung c p cho Tin h c r t nhi u c u trúc toán h c có th dùngọ ấ ọ ấ ề ấ ọ ể làm mô hình d li u. Ch ng h n, các khái ni m toán h c nh dãy, t p h p,ữ ệ ẳ ạ ệ ọ ư ậ ợ ánh x , cây, đ th , quan h , n a nhóm, nhóm, otomat, Trong các chạ ồ ị ệ ử ương sau chúng ta s l n lẽ ầ ượt nghiên c u m t s mô hình d li u quan tr ng nh t,ứ ộ ố ữ ệ ọ ấ
Trang 22đượ ử ục s d ng thường xuyên trong các thu t toán. Đó là các mô hình d li uậ ữ ệ danh sách, cây, t p h p. V i m i mô hình d li u chúng ta nghiên c u cácậ ợ ớ ỗ ữ ệ ứ cách cài đ t nó b i các c u trúc d li u khác nhau. Trong m i cách cài đ t,ặ ở ấ ữ ệ ỗ ặ
m t s phép toán trên mô hình có th độ ố ể ược th c hi n d dàng, nh ng cácự ệ ễ ư phép toán khác có th l i không thu n ti n. Vi c l a ch n c u trúc d li uể ạ ậ ệ ệ ự ọ ấ ữ ệ nào đ bi u di n mô hình ph thu c vào t ng áp d ng.ể ể ễ ụ ộ ừ ụ
Nh đã nói, v i m i mô hình d li u, chúng ta có th th c hi n m t t p h pư ớ ỗ ữ ệ ể ự ệ ộ ậ ợ các phép toán r t đa d ng, phong phú. Song trong nhi u áp d ng, chúng ta chấ ạ ề ụ ỉ
s d ng mô hình v i m t s xác đ nh các phép toán nào đó. Khi đó chúng taử ụ ớ ộ ố ị
s có m t ki u d li u tr u tẽ ộ ể ữ ệ ừ ượng
Nh v y, m tư ậ ộ ki u d li u tr u t ể ữ ệ ừ ượ (abstract data type) là m t mô hình d ng ộ ữ
li u đệ ược xét cùng v i m t s xác đ nh các phép toán nào đó. Ch ng h n, cácớ ộ ố ị ẳ ạ
t p h p ch xét v i các phép toán : thêm m t ph n t vào m t t p đã cho, lo iậ ợ ỉ ớ ộ ầ ử ộ ậ ạ
m t ph n t kh i m t t p h p đã cho, tìm xem m t ph n t đã cho có n mộ ầ ử ỏ ộ ậ ợ ộ ầ ử ằ trong m t t p h p hay không, l p thành ki u d li u tr u tộ ậ ợ ậ ể ữ ệ ừ ượng (KDLTT) từ
đi n ể (dictionnaire).
Còn KDLTT hàng (hàng đ i) là mô hình d li u danh sách cùng v i hai phépợ ữ ệ ớ toán chính là : thêm m t ph n t m i vào m t đ u danh sách, và lo i m tộ ầ ử ớ ộ ầ ạ ộ
ph n t m t đ u khác c a danh sách. Chúng ta s nghiên c u k m t sầ ử ở ộ ầ ủ ẽ ứ ỹ ộ ố
ki u d li u tr u tể ữ ệ ừ ượng quan tr ng nh t : hàng, ngăn x p (stack), t đi n,ọ ấ ế ừ ể hàng u tiên. V i m i KDLTT, các c u trúc d li u đ bi u di n nó s đư ớ ỗ ấ ữ ệ ể ể ễ ẽ ượ cnghiên c u. Chúng ta cũng s đánh giá hi u qu c a các phép toán trong t ngứ ẽ ệ ả ủ ừ cách cài đ t.ặ
3. Thi t k và gi i thu tế ế ả ậ
3.1. Các tiêu chu n đánh giá c u trúc d li uẩ ấ ữ ệ
Đ đánh giá m t c u trúc d li u chúng ta thể ộ ấ ữ ệ ường d a vào m t s tiêu chíự ộ ố sau:
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ư ự
Trang 23tr ng thái bi n đ i c a d li u trong chu trình s ng đ có th 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 ự ế
Ví d ụ : M t s tình hu ng ch n c u trúc l u tr sai :ộ ố ố ọ ấ ư ữ
+ Ch n m t bi n s nguyên ọ ộ ế ố int đ 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 s làmị ậ ẽ tròn m i giá tr ti n thọ ị ề ưởng 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 28 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í $10. Ch n m t bi nọ ỗ ỗ ọ ọ ọ ộ ế
s nguyên ố unsigned char ( kh năng l u tr 0 255) đ l u tr t ng h cả ư ữ ể ư ữ ổ ọ phí c a l p h c trong tháng, n u x y ra trủ ớ ọ ế ả ường h p có thêm 6 h c sinhợ ọ
được nh n vào l p thì giá tr t ng h c phí thu đậ ớ ị ổ ọ ược là $260, vượt kh iỏ
kh năng l u tr c a bi n đã ch n, gây ra tình tr ng tràn, sai l ch.ả ư ữ ủ ế ọ ạ ệ
+ Phù h p v i các thao tác trên đó:ợ ớ Tiêu chu n này giúp tăng tính hi u quẩ ệ ả
c a đ án: vi c phát tri n các thu t toán đ n gi n, t nhiên h n; chủ ề ệ ể ậ ơ ả ự ơ ươ ngtrình đ t hi u qu cao h n v t c đ x lý.ạ ệ ả ơ ề ố ộ ử
Ví d 1.1 ụ : M t tình hu ng ch n c u trúc l u tr không phù h p:ộ ố ọ ấ ư ữ ợ
+ C n xây d ng m t chầ ự ộ ương trình so n th o văn b n, các thao tác x lýạ ả ả ử
thường x y ra là chèn, xoá s a các ký t trên văn b n. Trong th i gian xả ử ự ả ờ ử
lý văn b n, n u ch n c u trúc l u tr văn b n tr c ti p lên t p tin thì sả ế ọ ấ ư ữ ả ự ế ậ ẽ gây khó khăn khi xây d ng các gi i thu t c p nh t văn b n và làm ch mự ả ậ ậ ậ ả ậ
t c đ x lý c a chố ộ ử ủ ương trình vì ph i làm vi c trên b nh ngoài. Trả ệ ộ ớ ườ ng
h p này nên tìm m t c u trúc d li u có th t ch c b nh trong đợ ộ ấ ữ ệ ể ổ ứ ở ộ ớ ể
l u tr văn b n su t th i gian so n th o.ư ữ ả ố ờ ạ ả
3.2. Đánh giá đ ph c t p c a thu t toánộ ứ ạ ủ ậ
Vi c đánh giá đ ph c t p c a m t thu t toán qu không d dàng chút nào.ệ ộ ứ ạ ủ ộ ậ ả ễ dây, chúng ta ch mu n c l ng th i gian th c hi n thu n toán T(n) đ
có th có s so sánh tể ự ương đ i gi a các thu t toán v i nhau. Trong th c t ,ố ữ ậ ớ ự ế
Trang 24th i gian th c hi n m t thu t toán còn ph thu c r t nhi u vào các đi u ki nờ ự ệ ộ ậ ụ ộ ấ ề ề ệ khác nh c u t o c a máy tính, d li u đ a vào, …, đây chúng ta ch xemư ấ ạ ủ ữ ệ ư ở ỉ xét trên m c đ c a lứ ộ ủ ượng d li u đ a vào ban đ u cho thu t toán th c hi n.ữ ệ ư ầ ậ ự ệ
Đ ể ướ ược l ng th i gian th c hi n thu t toán chúng ta có th xem xét th iờ ự ệ ậ ể ờ gian th c hi n thu t toán trong hai trự ệ ậ ường h p:ợ
+ Trong trường h p t t nh t: Tminợ ố ấ
+ Trong trường h p x u nh t: Tmaxợ ấ ấ
+ T đó chúng ta có th ừ ể ướ ược l ng th i gian th c hi n trung bình c a thu tờ ự ệ ủ ậ toán: Tavg
Trang 25Chương 2Các ki u d li u nâng caoể ữ ệ
Trình bày được các ki u d li u nâng cao; ể ữ ệ
V n d ng đậ ụ ược các ki u d li u nâng cao đ l p trình m t s bài toán cể ữ ệ ể ậ ộ ố ụ
th theo yêu c u;ể ầ
Rèn luy n tính c n th n, t m , chính xác, tu duy sáng t o, k năng l p trìnhệ ẩ ậ ỉ ỉ ạ ỹ ậ
và đ m b o an toàn cho ngả ả ười và máy tính
N i dung:ộ
1. M ngả
Ki u d li u m ng là ki u d li u trong đó m i ph n t c a nó là m t t pể ữ ệ ả ể ữ ệ ỗ ầ ử ủ ộ ậ
h p có th t các giá tr có cùng c u trúc đợ ứ ự ị ấ ượ ưc l u tr liên ti p nhau trong bữ ế ộ
nh M ng có th m t chi u hay nhi u chi u. M t dãy s chính là hìnhớ ả ể ộ ề ề ề ộ ố
tượng c a m ng 1 chi u, ma tr n là hình tủ ả ề ậ ượng c a m ng 2 chi u.ủ ả ề
M t đi u đáng l u ý là m ng 2 chi u có th coi là m ng m t chi u trong đóộ ề ư ả ề ể ả ộ ề
m i ph n t c a nó là 1 m ng m t chi u. Tỗ ầ ử ủ ả ộ ề ương t nh v y, m t m ng nự ư ậ ộ ả chi u có th coi là m ng 1 chi u trong đó m i ph n t là 1 m ng n1 chi u.ề ể ả ề ỗ ầ ử ả ề
Hình tượng này được th hi n r t rõ trong cách khai báo c a C.ể ệ ấ ủ
M ng 1 chi u đả ề ược khai báo nh sau:ư
<Ki u d li u> <Tên bi n>[<S ph n t >];ể ữ ệ ế ố ầ ử
Ví d đ khai báo m t bi n có tên a là m t m ng nguyên 1 chi u có t i đaụ ể ộ ế ộ ả ề ố
100 ph n t ta ph i khai báo nh sau:ầ ử ả ư
int a[100];
Trang 26 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:
+ Chu i ký t 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.ố ự ứ
+ Ta có th khai báo m t chu i ký t theo m t s cách sau đây:ể ộ ỗ ự ộ ố
char S[10]; //Khai báo m t chu i ký t S có chi u dài ộ ỗ ự ề// t i đa 10 (k c kí t k t thúc)ố ể ả ự ế
Trang 27char S[]="ABC";// Khai báo m t chu i ký t S có chi u ộ ỗ ự ề
// dài b ng chi u dài c a chu i "ABC"ằ ề ủ ỗ // và giá tr kh i đ u c a S là "ABC"ị ở ầ ủ
char *S ="ABC";//Gi ng cách khai báo trên.ố
+ Trong ví d trên ta cũng th y đụ ấ ược m t h ng chu i ký t độ ằ ỗ ự ược th hi nể ệ
b ng m t chu i ký t đ t trong c p ngo c kép “”.ằ ộ ỗ ự ặ ặ ặ
+ 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
2. Con trỏ
Con tr là bi n ch a đ a ch c a m t bi n khác. Con tr đỏ ế ứ ị ỉ ủ ộ ế ỏ ược s d ng r tử ụ ấ nhi u trong C, m t ph n là do chúng đôi khi là cách duy nh t đ bi u di nề ộ ầ ấ ể ể ễ tính toán, và ph n n a do chúng thầ ữ ường làm cho chương trình ng n g n và cóắ ọ
Trang 282.1. Con tr và đ a ch ỏ ị ỉ
Vì con tr ch a đ a ch c a đ i tỏ ứ ị ỉ ủ ố ượng nên nó có th xâm nh p vào đ i tể ậ ố ượ nggián ti p qua con tr Gi s x là m t bi n ki u int, và gi s px là con trế ỏ ả ử ộ ế ể ả ử ỏ
đượ ạc t o ra theo m t cách nào đó. ộ
Phép toán m t ngôi & s cho đ a ch c a đ i tộ ẽ ị ỉ ủ ố ượng, nên câu l nh : px=&x; sệ ẽ gán đ a ch c a bi n x cho tr px, và px bây gi đị ỉ ủ ế ỏ ờ ược g i là " tr t i bi n x ".ọ ỏ ớ ế Phép toán & ch áp d ng đỉ ụ ược cho các bi n và ph n t b ng, k t c u ki uế ầ ử ả ế ấ ể
&(x+1) và &3 là không h p l L y đ i ch c a bi n register cũng là sai.ợ ệ ấ ạ ỉ ủ ế
Phép toán m t ngôi * coi là toán h ng c a nó là đ i ch c n xét và thâm nh pộ ạ ủ ạ ỉ ầ ậ
t i đ a ch đó đ l y ra n i dung. N u bi n y có ki u int thì thì l nh:ớ ị ỉ ể ấ ộ ế ế ể ệ
y=*px; s gán giá tr c a bi n mà tr px tr t i. V y dãy l nh :ẽ ị ủ ế ỏ ỏ ớ ậ ệ
Trong khai báo trên ta đã ng ý nói r ng đó là m t cách tụ ằ ộ ượng tr ng, r ng tư ằ ổ
h p *px có ki u int, t c là n u px xu t hi n trong ng c nh *px thì nó cũngợ ể ứ ế ấ ệ ữ ả
tương đương v i bi n có ki u int.ớ ế ể
Con tr có th xu t hi n trong các bi u th c. Ch ng h n, n u px tr t i sỏ ể ấ ệ ể ứ ẳ ạ ế ỏ ớ ố nguyên x thì *px có th xu t hi n trong b t k ng c nh nào mà x có thể ấ ệ ấ ỳ ữ ả ể
Trang 29s in ra giá tr hi n t i c a xẽ ị ệ ạ ủ
Con tr cũng có th xu t hi n bên v trái c a phép gán. N u px tr t i x thìỏ ể ấ ệ ế ủ ế ỏ ớ sau l nh : ệ *px=0; x s có giá tr b ng 0. Cũng tẽ ị ằ ương t các l nh: ự ệ
s sao n i dung c a px vào py, nghĩa là làm cho py tr t i n i mà px tr ẽ ộ ủ ỏ ớ ơ ỏ
2.2. Con tr và m ng m t chi u ỏ ả ộ ề
Trong C có m i quan h ch t ch gi a con tr và m ng: các ph n t c aố ệ ặ ẽ ữ ỏ ả ầ ử ủ
m ng có th đả ể ược xác đ nh nh ch s ho c thông qua con tr ị ờ ỉ ố ặ ỏ
2.2.1. Phép toán l y đ a ch ấ ị ỉ
Phép toán này ch áp d ng cho các ph n t c a m ng m t chi u. Gi s ta cóỉ ụ ầ ử ủ ả ộ ề ả ử khai báo :
double b[20];
Khi đó phép toán :
Trang 30máy s b trí b trí cho m ng a mẽ ố ố ả ười kho ng nh liên ti p, m i kho ng nhả ớ ế ỗ ả ớ
là 4 byte. Nh v y, n u bi t đ a ch c a m t ph n t nào đó c a m ng a, thìư ậ ế ế ị ỉ ủ ộ ầ ử ủ ả
ta có th d dàng suy ra đ a ch c a các ph n t khác c a m ng.ể ễ ị ỉ ủ ầ ử ủ ả
V i C ta có :ớ
a tương đương v i &a[0]ớ
a+i tương đương v i &a[i]ớ
*(a+i) tương đương v i a[i]ớ
2.2.3. Con tr tr t i các ph n t c a m ng m t chi u ỏ ỏ ớ ầ ử ủ ả ộ ề
Khi con tr pa tr t i ph n t a[k] thì :ỏ ỏ ớ ầ ử
pa+i tr t i ph n t th i sau a[k], có nghĩa là nó tr t i a[k+i].ỏ ớ ầ ử ứ ỏ ớ
pai tr t i ph n t th i trỏ ớ ầ ử ứ ước a[k], có nghĩa là nó tr t i a[ki].ỏ ớ
*(pa+i) tương đương v i pa[i].ớ
Trang 32for (i=0;i<4;++i) {
printf("\n a[%d]=",i);
scanf("%f",troa+i);
}tong=0;
Khi g p m t xâu ký t , máy s c p phát m t kho ng nh cho m t m ngặ ộ ự ẽ ấ ộ ả ớ ộ ả
ki u char đ l n đ ch a các ký t c a xâu và ch a thêm ký t '\0' là ký tể ủ ớ ể ứ ự ủ ứ ự ự dùng làm ký t k t thúc c a m t xâu ký t M i ký t c a xâu đự ế ủ ộ ự ỗ ự ủ ược ch aứ trong m t ph n t c a m ng.ộ ầ ử ủ ả
Cũng gi ng nh tên m ng, xâu ký t là m t hàng đ a ch bi u th đ a ch đ uố ư ả ự ộ ị ỉ ể ị ị ỉ ầ
c a m ng ch a nó. Vì v y n u ta khai báo bi n ủ ả ứ ậ ế ế xau nh m t con tr ki uư ộ ỏ ể char :
char *xau;
thì phép gán :
xau="Ha noi"
là hoàn toàn có nghĩa. Sau khi th c hi n câu l nh này trong con tr ự ệ ệ ỏ xau s có đ aẽ ị
ch đ u c a m ng (ki u char) đang ch a xâu ký t bên ph i. Khi đó các câu l nhỉ ầ ủ ả ể ứ ự ả ệ :
Trang 33puts(xau);
s có cùng m t tác d ng là cho hi n lên màn hình dòng chẽ ộ ụ ệ ữ Ha noi
M ng ki u char thả ể ường dùng đ ch a m t dãy ký t đ c vào b nh Ví d ,ể ứ ộ ự ọ ộ ớ ụ
đ n p t bàn phím tên c a m t ngể ạ ừ ủ ộ ười ta dùng m t m ng ki u char v i độ ả ể ớ ộ dài 25, ta s d ng các câu l nh sau :ử ụ ệ
char ten[25];
printf("\n Ho ten :");
gets(ten);
Bây gi ta xem gi a m ng ki u char và con tr ki u char có nh ng gì gi ngờ ữ ả ể ỏ ể ữ ố
và khác nhau. Đ th y để ấ ượ ực s khác nhau c a chúng, ta đ a ra s so sánh sauủ ư ự :
char *xau, ten[15];
ten="Ha noi"
gets(xau);
Các câu l nh trên là không h p l Câu l nh th hai sai ch : ten là m tệ ợ ệ ệ ứ ở ỗ ộ
h ng đ a ch và ta không th gán m t h ng đ a ch này cho m t h ng đ a chằ ị ỉ ể ộ ằ ị ỉ ộ ằ ị ỉ khác. Câu l nh th ba không th c hi n đệ ứ ự ệ ược, m c đích c a câu l nh là đ cụ ủ ệ ọ
t bàn phím m t dãy ký t và l u vào m t vùng nh mà con tr ừ ộ ự ư ộ ớ ỏ xau tr t i.ỏ ớ Song n i dung c a con tr ộ ủ ỏ xau còn ch a xác đ nh. N u tr ư ị ế ỏxau đã tr t i m tỏ ớ ộ vùng nh nào đó thì câu l nh này hoàn toàn có ý nghĩa. Ch ng h n nh sauớ ệ ẳ ạ ư khi th c hi n câu l nh :ự ệ ệ
xau=ten;
thì cách vi t: ế
gets(ten) ; và gets(xau);
đ u có tác d ng nh nhau.ề ụ ư
Trang 342.3. Con tr và m ng nhi u chi u ỏ ả ề ề
Vi c s lý m ng nhi u chi u ph c t p h n so v i m ng m t chi u.ệ ử ả ề ề ứ ạ ơ ớ ả ộ ề Không ph i m i qui t c đúng v i m ng m t chi u đ u có th áp d ng choả ọ ắ ớ ả ộ ề ề ể ụ
m ng nhi u chi u.ả ề ề
2.3.1. Phép l y đ a chấ ị ỉ
Phép l y đ a ch đ i v i các ph n t m ng hai chi u ch có th áp d ngấ ị ỉ ố ớ ầ ử ả ề ỉ ể ụ khi các ph n t m ng hai chi u có ki u nguyên, còn l i thì phép l y đ a ch choầ ử ả ề ể ạ ấ ị ỉ các ph n t m ng nhi u chi u là không th c hi n đầ ử ả ề ề ự ệ ược .Ví d nh ta có th l yụ ư ể ấ
đ a ch &a[1][2] khi a là m ng nguyên.ị ỉ ả
Th thu t đ c t bàn phím ph n t m ng hai chi u dùng l nh scanf :ủ ậ ọ ừ ầ ử ả ề ệ
Chương trình đ c vào s li u cho m t ma tr n hai chi u s đọ ố ệ ộ ậ ề ẽ ược th cự
hi n thông qua vi c đ c vào m t bi n trung gian, đ c m t giá tr và ch a t mệ ệ ọ ộ ế ọ ộ ị ứ ạ vào m t bi n trung gian sau đó ta gán bi n cho ph n t m ng: ộ ế ế ầ ử ả
printf("\n a[%d][%d]=",i,j);
scanf("%8.2f",&tg);
a[i][j]=tg;
} }
2.3.2. Phép c ng đ a ch trong m ng hai chi uộ ị ỉ ả ề
Gi s ta có m ng hai chi u a[2][3] có 6 ph n t úng v i sáu đ a ch liênả ử ả ề ầ ử ớ ị ỉ
ti p trong b nh đế ộ ớ ược x p theo th t sau :ế ứ ự
Trang 35Ph n tầ ử a[0][0] a[0][1] a[0][2] a[1][0] a[1][1] a[1][2]
a tr ph n t th nh t c a m ng : ph n t a[0][0]ỏ ầ ử ứ ấ ủ ả ầ ử
a+1 tr ph n t đ u hàng th hai c a m ng : ph n t a[1][0]ỏ ầ ử ầ ứ ủ ả ầ ử
2.3.3. Con tr và m ng hai chi u ỏ ả ề
Đ l n lể ầ ượt duy t trên các ph n t c a m ng hai chi u ta có th dùng conệ ầ ử ủ ả ề ể
Trang 36pa=(float*)a;
for (i=0;i<6;++i)scanf("%f",pa+i);
}
2.4. Ki u con tr , ki u đ a ch , các phép toán trên con tr ể ỏ ể ị ỉ ỏ
2.4.1. Ki u con tr và ki u đ a chể ỏ ể ị ỉ
Con tr dùng đ l u đ a ch M i ki u đ a ch c n có ki u con tr tỏ ể ư ị ỉ ỗ ể ị ỉ ầ ể ỏ ươ ng
ng. Phép gán đ a ch cho con tr ch có th th c hi n đ c khi ki u đ a ch phù
pm là con tr ki u float [30]ỏ ể
a là đ a ch ki u float [30]ị ỉ ể
Vì th phép gán :ế
pa=a;
là không h p l Nh ng phép gán :ợ ệ ư
pm=a;
Trang 37Có 4 phép toán liên quan đ n con tr và đ i ch là : ế ỏ ạ ỉ
Phép gán
Phép tăng gi m đ a ch ả ị ỉPhép truy c p b nh ậ ộ ớPhép so sánh
cho con tr px là con tr float tr t i ph n t x[10]. Ki u đ a ch float là ki u đ aỏ ỏ ỏ ớ ầ ử ể ị ỉ ể ị
ch 4 byte, nên các phép tăng gi m đ a ch đỉ ả ị ỉ ược th c hi n trên 4 byte. Vì th :ự ệ ế
px+i tr t i ph n t x[10+i]ỏ ớ ầ ử
pxi tr t i ph n t x[10i]ỏ ớ ầ ử
Trang 38Ví d 2.4 ụ Đo n chạ ương trình tính t ng các s th c dùng phép so sánh con tr :ổ ố ự ỏ
Trang 39*pc+1=0xCD (byte th hai c a n) ứ ủ
2.4.3. Con tr ki u voidỏ ể
Con tr ki u void đỏ ể ược khai báo nh sau :ư
Các phép toán tăng gi m đ a ch , so sánh và truy c p b nh không dùngả ị ỉ ậ ộ ớ
được trên con tr void.ỏ
Trang 40for (i=1;i<m;++i)for (j=1;j<m;++j)
*(pc+i*N+j)=*(pa+i*N+j)+*(pb+i*N+j);
}
Vì đ i là con tr void nên nó có th nh n đố ỏ ể ậ ược đ a ch c a các ma tr nị ỉ ủ ậ trong l i g i hàm. Tuy nhiên ta không th s d ng tr c ti p các đ i con tr voidờ ọ ể ử ụ ự ế ố ỏ trong thân hàm mà ph i chuy n ki u c a chúng sang thành float.ả ể ể ủ
2.4.5. M ng con trả ỏ
M ng con tr là s m r ng khái ni m con tr M ng con tr là m tả ỏ ự ở ộ ệ ỏ ả ỏ ộ
m ng mà m i ph n t c a nó ch a đả ỗ ầ ử ủ ứ ược m t đ a ch nào đó. Cũng gi ng nhộ ị ỉ ố ư con tr , m ng con tr có nhi u ki u : M i ph n t c a m ng con tr ki u int sỏ ả ỏ ề ể ỗ ầ ử ủ ả ỏ ể ẽ
ch a đứ ược các đ a ch ki u int. Tị ỉ ể ương t cho các m ng con tr c a các ki uự ả ỏ ủ ể khác
M ng con tr đả ỏ ược khai báo theo m u :ẫ
Ki u *Tên_m ng_con_tr [N];ể ả ỏTrong đó Ki u có th là int, float, double, char còn Tên_m ng_con_trể ể ả ỏ
là tên c a m ng, N là m t h ng s nguyên xác đ nh đ l n c a m ng.ủ ả ộ ằ ố ị ộ ớ ủ ả
Khi g p khai báo trên, máy s c p phát N kho ng nh liên ti p cho Nặ ẽ ấ ả ớ ế
ph n t c a m ng Tên_m ng_con_tr ầ ử ủ ả ả ỏ
Ví d 2.7 ụ L nh :ệ
double *pa[100];
Khai báo m t m ng con tr ki u double g m 100 ph n t M i ph n t pa[i] cóộ ả ỏ ể ồ ầ ử ỗ ầ ử
th dùng đ l u tr m t đ a ch ki u double.ể ể ư ữ ộ ị ỉ ể
Chú ý :
B n thân các m ng con tr không dùng đ l u tr s li u. Tuy nhiênả ả ỏ ể ư ữ ố ệ
m ng con tr cho phép s d ng các m ng khác đ l u tr s li u m t cách cóả ỏ ử ụ ả ể ư ữ ố ệ ộ
hi u qu h n theo cách : chia m ng thành các ph n và ghi nh đ a ch đ u c aệ ả ơ ả ầ ớ ị ỉ ầ ủ
m i ph n vào m t ph n t c a m ng con tr ỗ ầ ộ ầ ử ủ ả ỏ