1. Trang chủ
  2. » Công Nghệ Thông Tin

Giáo trình Cấu trúc dữ liệu và giải thuật (Nghề: Lập trình máy tính) - CĐ Cơ Giới Ninh Bình

152 16 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 152
Dung lượng 908,64 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

(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 1

B  NÔNG NGHI P VÀ PHÁT TRI N NÔNG THÔNỘ Ệ Ể

TRƯỜNG CAO Đ NG C  GI I NINH BÌNHẲ Ơ Ớ

Trang 2

Ninh Bình, năm 2018

Trang 4

L 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án­C ­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 5

               10   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 6

              46   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 7

5.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 8

MÔ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 9

Th 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 11

ngô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 12

nh  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 13

li 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 S­bi 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 14

cá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 15

c 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 16

c u trúc d  li u   b  nh  ngoài nh  file ch  s , B­câ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 18

4. 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 19

hà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 20

m 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 n­1 thành ph  (tr  thành ph  xu tỗ ộ ị ủ ố ừ ố ấ  phát), thành l p (n­1)! 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 21

     v  : = 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 23

tr 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 24

th 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 25

Chươ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 n­1 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 27

char 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 28

2.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 29

s  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 30

má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].ỏ ớ ầ ử ứ ỏ ớ

pa­i tr  t i ph n t  th  i trỏ ớ ầ ử ứ ước a[k], có nghĩa là nó tr  t i a[k­i].ỏ ớ

*(pa+i) tương đương v i pa[i].ớ

Trang 32

for (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 33

puts(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 34

2.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 35

Ph 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 36

pa=(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 37

Có 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]ỏ ớ ầ ử

px­i tr  t i ph n t  x[10­i]ỏ ớ ầ ử

Trang 38

Ví 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 40

for (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 ỗ ầ ộ ầ ử ủ ả ỏ

Ngày đăng: 28/05/2021, 11:24

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w