UBND TỈNH LÂM ĐNG
TRƯỜNG CAO ĐẲNG ĐÀ LẠT
GIÁO TRÌNH
N HC: CẤU TRÚC DỮ LIỆU VÀ GIẢI THUT
NGÀNH/NGHỀ: CÔNG NGHỆ THÔNG TIN ( ỨNG DNG PHN MM)
TRÌNH ĐỘ: CAO ĐẲNG
Ban hành kèm theo Quyết định số: /QĐ-… ngày…….tháng….năm .........
…………........... của……………………………….
LƯU HÀNH NI B
Đà Lạt, năm 2017
2
TUYÊN BỐ BN QUYN
Tài liệu này thuộc loại sách giáo trình nên các nguồn thông tin thể được phép
dùng nguyên bản hoặc trích dùng cho các mục đích về đào tạo và tham khảo.
Mi mục đích khác mang tính lệch lc hoc s dng vi mục đích kinh doanh
thiếu lành mnh s b nghiêm cấm.
LI GII THIU
Để đáp ứng nhu cầu học tập của người học, chúng tôi đã tiến hành biên soạn giáo
trình cho môn học Cấu trúc dữ liệu và giải thuật. Tài liệu này được biên soạn theo đề
cương chi tiết môn học Cấu trúc dữ liệu và giải thuật theo chương trình đào tạo nghề
Công nghệ thông tin (Ứng dụng phần mềm) trình độ cao đẳng.
Mục tiêu của giáo trình nhằm giúp c bạn sinh viên chuyên ngành một tài
liệu động dùng làm i liệu học tập, nhưng chúng tôi cũng không loại trừ toàn bộ
các đối tượng khác tham khảo. Chúng tôi hi vọng người đọc sẽ m thấy được những
kiến thức bổ ích trong giáo trình này.
Trong phạm vi giao trình này, chúng tôi giới thiệu các kiến thức, kỹ năng phân
tích được các loại dữ liệu, giải thuật kết hợp được dữ liệu giải thuật. Kiến thức
kỹ năng cài đặt các thuật toán sắp xếp tìm kiếm. Kiến thức kỹ năng cài đặt
các thuật toán, các cấu trúc dữ liệu: mảng, danh sách, danh sách liên kết.
Trong quá trình biên soạn, mặc đã cố gắng tham khảo nhiều tài liệu giáo
trình khác nhưng c giả không khỏi tránh được những thiếu sót hạn chế. Tác giả
chân tnh mong đợi những nhận xét, đánh giá và góp ý để cuốn giáo trình ngày một
hoàn thiện hơn.
Tài liệu này được thiết kế theo tng mô đun/ môn học thuộc hệ thống mô đun/môn
học để đào tạo hoàn chỉnh nghề Công nghệ thông tin (Ứng dụng phần mềm) trình độ
cao đẳng và được dùng làm Giáo trình cho học viên trong các khoá đào tạo, cũng có
thể được sử dụng cho đào tạo ngắn hạn hoặc cho các công nhân kỹ thuật, các nhà
quản lý và người sử dụng nhân lực tham khảo.
Đà Lạt, ngày 07 tháng 7 năm 2017
Tham gia biên soạn
1. Ch biên Ngô Thiên Hoàng
2. Phạm Đình Nam
3. Trương Thị Thanh Tho
4. Nguyn Quỳnh Nguyên
5. Phan Ngc Bo
3
MC LC
Trang
GIÁO TRÌNH ................................................................................................................. 1
LI GII THIU ........................................................................................................... 2
CHƯƠNG 1 THIẾT K PHÂN TÍCH GIẢI THUT ........................................... 5
1.1. M đầu ................................................................................................................ 5
1.2 Thiết kế gii thut ................................................................................................. 6
1.3. Phân tích gải thut............................................................................................... 9
1.4 Thiết kế và phân tích giải thuật và mt s dụ ................................................. 11
1.4. Bài tập ................................................................................................................ 26
CHƯƠNG 2: CÁC KIỂU D LIỆU CƠ SỞ ............................................................... 29
2.1. Các kiểu d liệu cơ bản ..................................................................................... 29
2.2 Kiu d liệu có cấu trúc ...................................................................................... 43
2.3. Kiu hp ............................................................................................................. 51
2.4 Kiu tp tin (file) ................................................................................................ 55
2.5. Các kiểu d liệu khác ......................................................................................... 67
2.6. Bài tập ............................................................................................................... 70
CHƯƠNG 3: MẢNG, DANH SÁCH VÀ CÁC KIỂU D LIU TRỪU TƯỢNG .. 71
3.1 Mng ................................................................................................................... 71
3.2. Danh sách liên kết ............................................................................................ 80
2.3. Các kiểu d liu trừu tượng ........................................................................... 149
Bài tập ..................................................................................................................... 157
CHƯƠNG 4: SẮP XP.............................................................................................. 159
2.1. Sp xếp kiu chọn, chèn, ni bt ................................................................... 159
2.2. Sp xếp bằng phương pháp trộn .................................................................... 170
2.3. Sp xếp nhanh (Quick sort) ........................................................................... 174
Bài Tập: ................................................................................................................... 176
CHƯƠNG 5: TÌM KIẾM ........................................................................................... 178
5.1 Tìm kiếm tun t ............................................................................................... 178
5.2 Tìm kiếm nh phân ............................................................................................ 179
Bài tập ..................................................................................................................... 181
TÀI LIỆU THAM KHO .......................................................................................... 182
4
GIÁO TRÌNH MÔ ĐUN/MÔN HỌC
Tên môn học: CU TRÚC DỮ LIỆU VÀ GIẢI THUT
Mã môn học: MH28
I. Vị trí, tính chất của môn học:
1. V trí: Môn học được b trí sau khi sinh viên học xong các môn học/môn học Lp
trình căn bản.
2. Tính chất: Cấu trúc dữ liệu và gii thuật là môn học t chọn, môn k thuật cơ s áp
dụng cho trình độ Cao đẳng Công nghệ thông tin (ứng dng phn mm).
II. Mục tiêu môn học:
1. V kiến thc:
- Xác định được mi quan h gia cấu trúc dữ liệu và giải thut trong việc xây dựng
chương trình;
- Trình bày được ý nghĩa, cấu trúc, cách khai báo, các thao tác của các loại cấu trúc d
liu: mảng, danh sách liên kết, các giải thuật cơ bản x lý các cấu trúc dữ liệu đó;
2. V k năng:
- Xây dựng được cu trúc dữ liệu và mô tả ờng minh các giải thut cho mt s bài
toán ứng dng c th;
- Cài đặt được mt s gii thuật trên ngôn ngữ lập trình C/ C++;
3. V năng lực t ch và trách nhim:
- Co kha năng tư nghiên cư
u, tư hoc, tham khao tai liê
u liên quan đên môn ho
c đê vâ
n
du
ng vào hoa
t động hoc tâ
p.
- Vâ
n du
ng đươc cac kiên thư
c tư nghiên
u, hoc tâ
p va kiên thư
c, ky năng đa đươc
hc đê hoan thiê
n cac k năng liên quan đên môn hoc môt cach khoa hoc, đung quy
đi
nh
III. Nội dung môn học:
5
CHƯƠNG 1 THIT K VÀ PHÂN TÍCH GIẢI THUT
Mã bài: MH 28.1
Mục tiêu:
- Xác định được mi quan h gia cấu trúc dữ liệu và giải thut;
- Xác định được tiến trình phân tích và thiết kế thut toán;
- Trình bày được cách đánh giá độ phc tp thuật toán;
- Xây dựng được mt s gii thuật cơ bn;
- Viết tường minh mt s gii thut;
- Nghiêm túc, tỉ m trong vic học và vận dụng vào làm bài tập.
1.1. M đầu
Hằng ngày chúng ta xcông việc theo một kế hoạch đã định sẵn bao gồm các
bước để thực hiện. Chng hạn, để in một văn bản viết tay chúng ta phải thực hiện hai
bước quan trọng: văn bản In văn bản ra giấy, hai bước này không thể thay đổi
thứ tđược. Đây chính ý tưởng về một giải thuật. Như vậy, giải thuật một hệ
thống chặt chẽ ràng các quy tắc nhằm c định một dãy các thao tác (các
bước) trên những đối tượng sao cho một shữu hạn bước thực hiện các thao tác,
chúng ta sẽ đạt được mục tiêu định trước. Khi thiết kế một gii thuật, chúng ta phải
đảm bảo đạt được các đặc trưng của một giải thuật:
a) Tính xác định: mỗi bước của giải thuật, các thao tác phải hết sức ràng.
Không thể gây sự lẫn lộn, nhập nhằng, tuỳ tiện.
b) Tính hữu hạn dừng: Một giải thuật bao giờ cũng phải dừng lại sau một số hữu
hạn các bước. Có thể số lượng các bước là rất lớn.
c) Tính đúng đắn: Sau khi thực hiện và thuật toán dừng lại, chúng ta phải đạt được
kết quả yêu cầu.
d) Tính phổ biến: Thuật toán thể giải bất k bài toán nào trong cùng mt lớp
các bài toán, có nghĩa là thuật toán có thể xử lý với các dữ liệu khác nhau.
e) Tính đại lượng vào ra: Khi bt đầu thuật toán lúc nào cũng phải xác định
được đại lượng vào, thường được lấy từ tập xác định cho trước; Sau khi kết thúc,
thuật toán phải cho ra một hay một số đại lượng ra tuỳ theo chức năng thuật toán
đảm nhiệm.