Giáo trình Cấu trúc dữ liệu và giải thuật
MỤC LỤC
Mục Trang
CHƯƠNG 1: TỔNG QUAN VỀ CẤU TRÚC DỮ LIỆU & GT .3
1.1. Tầm quan trọng của CTDL & GT trong một đề án tin học . 3
1.1.1. Xây dựng cấu trúc dữ liệu . 3
1.1.2. Xây dựng giải thuật . 3
1.1.3. Mối quan hệ giữa cấu trúc dữ liệu vàgiải thuật . 3
1.2. Đánh giá Cấu trúc dữ liệu & Giải thuật . 3
1.2.1. Các tiêu chuẩn đánh giá cấu trúc dữ liệu . 3
1.2.2. Đánh giá độ phức tạp của thuật toán . 4
1.3. Kiểu dữ liệu . 4
1.3.1. Khái niệm về kiểu dữ liệu . 4
1.3.2. Các kiểu dữ liệu cơ sở . 4
1.3.3. Các kiểu dữ liệu có cấu trúc. 5
1.3.4. Kiểu dữ liệu con trỏ . 5
1.3.5. Kiểu dữ liệu tập tin. 5
Câu hỏi và bài tập . 6
CHƯƠNG 2: KỸ THUẬT TÌM KIẾM (Searching) .8
2.1. Khái quát về tìm kiếm. 8
2.2. Các giải thuật tìm kiếm nội . 8
2.2.1. Đặt vấn đề . 8
2.2.2. Tìm tuyến tính. 8
2.2.3. Tìm nhị phân. 10
2.3. Các giải thuật tìm kiếm ngoại . 14
2.3.1. Đặt vấn đề . 14
2.3.2. Tìm tuyến tính. 14
2.3.3. Tìm kiếm theo chỉ mục . 16
Câu hỏi và bài tập . 17
CHƯƠNG 3: KỸ THUẬT SẮP XẾP (SORTING) .19
3.1. Khái quát về sắp xếp. 19
3.2. Các giải thuật sắp xếp nội. 19
3.2.1 Sắp xếp bằng phương pháp đổi chỗ . 20
3.2.2. Sắp xếp bằng phương pháp chọn . 28
3.2.3. Sắp xếp bằng phương pháp chèn . 33
3.2.4. Sắp xếp bằng phương pháp trộn . 40
3.3. Các giải thuật sắp xếp ngoại. 60
3.3.1. Sắp xếp bằng phương pháp trộn . 60
3.3.2. Sắp xếp theo chỉ mục . 79
Câu hỏi và bài tập . 82
Giáo trình: Cấu Trúc Dữ Liệu và Giải Thuật
Trang: 2
CHƯƠNG 4: DANH SÁCH (LIST) .84
4.1. Khái niệm về danh sách. 84
4.2. Các phép toán trên danh sách. 84
4.3. Danh sách đặc. 85
4.3.1. Định nghĩa. 85
4.3.2. Biểu diễn danh sách đặc. 85
4.3.3. Các thao tác trên danh sách đặc . 85
4.3.4. Ưu nhược điểm và Ứng dụng . 91
4.4. Danh sách liên kết. 92
4.4.1. Định nghĩa. 92
4.4.2. Danh sách liên kết đơn . 92
4.4.3. Danh sách liên kết kép . 111
4.4.4. Ưu nhược điểm của danh sách liên kết . 135
4.5. Danh sách hạn chế. 135
4.5.1. Hàng đợi. 135
4.5.2. Ngăn xếp . 142
4.5.3. Ứng dụng của danh sách hạn chế . 147
Câu hỏi và bài tập . 147
CHƯƠNG 5: CÂY (TREE) .149
5.1. Khái niệm – Biểu diễn cây. 149
5.1.1. Định nghĩa cây . 149
5.1.2. Một số khái niệm liên quan . 149
5.1.3. Biểu diễn cây. 151
5.2. Cây nhị phân. 152
5.2.1. Định nghĩa. 152
5.2.2. Biểu diễn và Các thao tác . 152
5.2.3. Cây nhị phân tìm kiếm. 163
5.3. Cây cân bằng. 188
5.3.1. Định nghĩa – Cấu trúc dữ liệu. 188
5.3.2. Các thao tác . 189
Câu hỏi và bài tập . 227
ÔN TẬP (REVIEW) .224
Hệ thống lại các Cấu trúc dữ liệu và cácGiải thuật đã học. 224
Câu hỏi và Bài tập ôn tập tổng hợp . 227
TÀI LIỆU THAM KHẢO .229
anh sách
2. Các phép toán trên danh sách
3. Danh sách đặc (Condensed List)
3.1. Định nghĩa
3.2. Biểu diễn và Các thao tác
const int MaxLen = 10000; // hoặc: #define MaxLen 10000
int Length;
T CD_LIST[MaxLen]; // hoặc: T * CD_LIST = new T[MaxLen];
3.3. Ưu nhược điểm và Ứng dụng
4. Danh sách liên kết (Linked List)
4.1. Định nghĩa
4.2. Danh sách liên kết đơn (Singly Linked List)
typedef struct SLL_Node
{ T Key;
SLL_Node * NextNode;
} SLL_OneNode;
typedef SLL_OneNode * SLL_Type;
4.3. Danh sách liên kết kép (Doubly Linked List)
typedef struct DLL_Node
{ T Key;
DLL_Node * NextNode;
DLL_Node * PreNode;
} DLL_OneNode;
typedef DLL_OneNode * DLL_Type;
4.4. Ưu nhược điểm của danh sách liên kết
5. Danh sách hạn chế
5.1. Hàng đợi (Q ueue)
typedef struct Q_C
Giáo trình: Cấu Trúc Dữ Liệu và Giải Thuật
Trang: 226
{ int Len; // Chiều dài hàng đợi
int Front, Rear;
T * List; // Nội dung hàng đợi
} C_QUEUE;
C_QUEUE CQ_List;
5.2. Ngăn xếp (Stack)
typedef struct S_C
{ int Size; // Kích thước ngăn xếp
int SP;
T * List; // Nội dung ngăn xếp
} C_STACK;
C_STACK CS_List;
Chương 5: Cây (Tree)
1. Các khái niệm
2. Cây nhị phân (Binary tree)
2.1. Định nghĩa
2.2. Biểu diễn và Các thao tác
typedef struct BinT_Node
{ T Key;
BinT_Node * BinT_Left;
BinT_Node * BinT_Right;
} BinT_OneNode;
typedef BinT_OneNode * BinT_Type;
2.3. Cây nhị phân tìm kiếm (Binary Searching Tree)
typedef struct BST_Node
{ T Key;
BST_Node * BST_Left;
BST_Node * BST_Right;
} BST_OneNode;
typedef BST_OneNode * BST_Type;
3. Cây cân bằng (Balanced tree)
3.1. Định nghĩa
typedef struct BAL_Node
{ T Key;
int Bal;
BAL_Node * BAL_Left;
BAL_Node * BAL_Right;
} BAL_OneNode;
typedef BAL_OneNode * BAL_Type;
3.2. Các thao tác
Giáo trình: Cấu Trúc Dữ Liệu và Giải Thuật
Trang: 227
Câu hỏi và Bài tập ôn tập tổng hợp
1. Phân biệt về cấu trúc dữ liệu, ý nghĩa và tác dụng giữa: danh sách liên kết đôi, danh
sách đa liên kết có hai mối liên kết và cây nhị phân?
2. Hãy sử dụng cấu trúc dữ liệu thích hợp để lưu trữ các số nguyên có dấu có giá trị
tuyệt đối quá lớn trong bộ nhớ trong của máy tính. Với cấu trúc dữ liệu này, hãy
trình bày thuật toán và cài đặt chương trình thực hiện việc cộng, trừ, nhân, chia
nguyên, lấy dư, so sánh các số nguyên có giá trị lớn này.
3. Hãy sử dụng cấu trúc dữ liệu thích hợp để lưu trữ độ dài đường đi giữa các Thành
phố với nhau trong một quốc gia vào trong bộ nhớ trong của máy tính. Với cấu trúc
dữ liệu này, hãy trình bày thuật toán và cài đặt chương trình thực hiện việc liệt kê tất
cả các đường đi từ Thành phố A đến Thành phố B? Đường đi nào là đường đi ngắn
nhất?
4. Các văn bản được lưu trữ thành từng dòng trên các file văn bản, mỗi dòng có chiều
dài không quá 127 ký tự. Hãy đề xuất cấu trúc dữ liệu thích hợp để lưu trữ trong bộ
nhớ trong của máy tính tần suất xuất hiện của các từ trong tập tin văn bản này. Với
cấu trúc dữ liệu này, hãy trình bày thuật toán và cài đặt chương trình thực hiện việc
thống kê xem các từ trong file văn bản xuất hiện với tần suất như thế nào? Cho biết
văn bản có bao nhiêu t ừ, bao nhiêu tên từ?
5. Các văn bản được lưu trữ thành từng dòng trên các file văn bản, mỗi dòng có chiều
dài không quá 127 ký tự. Hãy đề xuất cấu trúc dữ liệu thích hợp để lưu trữ trong bộ
nhớ trong của máy tính các dòng văn bản trong tập tin văn bản này (có thể bộ nhớ
không đủ để lưu toàn bộ nội dung tập tin văn bản này vào trong bộ nhớ trong của
máy tính). Với cấu trúc dữ liệu này, hãy trình bày thuật toán và cài đặt chương trình
thực hiện việc hiện nội tập tin văn bản này theo từng trang màn hình sao cho chúng
ta có thể sử dụng các phím PgUp/PgDn để lật lên/xuống theo từng trang màn hình và
sử dụng các phím Up-arrow/Down-arrow để cho trôi lên/xuống từng dòng văn bản
trên màn hình? Cho biết văn bản có bao nhiêu dòng?
6. Hãy sử dụng cấu trúc dữ liệu thích hợp để lưu trữ các ma trận thưa (ma trận mà chủ
yếu giá trị các phần tử bằng 0) trong bộ nhớ trong của máy tính. Với cấu trúc dữ liệu
này, hãy trình bày thuật toán và cài đặt chương trình thực hiện việc cộng, trừ, nhân
hai ma trận thưa với nhau, tạo ma trận thưa chuyển vị từ một ma trận thưa khác.
7. Hãy sử dụng cấu trúc dữ liệu thích hợp để lưu trữ Gia phả của một dòng họ nào đó
trong bộ nhớ trong của máy tính. Với cấu trúc dữ liệu này, hãy trình bày thuật toán
và cài đặt chương trình thực hiện việc kiểm tra xem 02 người có tên là X và Y có
phải là hai anh em ruột hay không? Nếu không phải thì ai có “vai vế” cao hơn? Giả
sử rằng mỗi cặp vợ chồng có không quá 05 người con.
8. Hãy sử dụng cấu trúc dữ liệu thích hợp để lưu trữ một hệ thống Menu có nhiều mục
chọn, nhiều cấp trong bộ nhớ trong của máy tính. Với cấu trúc dữ liệu này, hãy trình
bày thuật toán và cài đặt chương trình thực hiện việc cho menu xuất hiện trên màn
hình và cho phép người sử dụng chọn một chức năng nào đó của menu.
9. Kết hợp cấu trúc dữ liệu ở trong bài tập và 4, 5 và 8. Hãy trình bày thuật toán và cài
đặt chương trình thực hiện các chức năng của một phần mềm soạn thảo văn bản
đơn giản?
Giáo trình: Cấu Trúc Dữ Liệu và Giải Thuật
Trang: 228
10. Hãy sử dụng cấu trúc dữ liệu thích hợp để lưu trữ các từ của một từ điển vào trong
tập tin có tên DICT.DAT. Thông tin giải nghĩa về một từ bao gồm: Tên từ, Loại từ
(Danh từ, động từ, tính từ, …), nghĩa tiếng Việt.
a) Sử dụng tập tin chỉ mục để liệt kê các từ theo thứ tự Alphabet (A -> Z).
b) Hãy đề xuất cấu trúc dữ liệu thích hợp để lưu trữ trong bộ nhớ trong của máy tính
thông tin giải nghĩa của các từ trong tập tin DICT.DAT này (có thể bộ nhớ không
đủ để lưu toàn bộ nội dung tập tin DICT.DAT này vào trong bộ nhớ trong của máy
tính). Với cấu trúc dữ liệu này, hãy trình bày thuật toán và cài đặt chương trình
thực hiện việc tra nghĩa cho một từ. Ngoài ra, ta có thể sử dụng các phím
PgUp/PgDn để lật lên/xuống theo từng trang (do mình quy định) màn hình và sử
dụng các phím Up-arrow/Down-arrow để cho trôi lên/xuống từng từ trên màn
hình? Sử dụng cấu trúc dữ liệu thích hợp để lưu trữ trong bộ nhớ trong các từ đã
được tra nghĩa.
11. Người ta lưu trữ các hệ số của một đa thức bậc n thành các dòng văn bản trong file
DATHUC.DAT theo nguyên tắc: Mỗi dòng là hệ số và số mũ của 1 đa thức và các hệ
số và số mũ này cách nhau ít nhất là một khoảng trắng.
Hãy sử dụng cấu trúc dữ liệu thích hợp để lưu trữ một đa thức vào trong bộ nhớ
trong của máy tính. Với cấu trúc dữ liệu này, hãy trình bày thuật toán và cài đặt
chương trình thực hiện các công việc sau:
- Xuất các đa thức trong file DATHUC.DAT ra màn hình;
- Tính đa thức tổng, đa thức hiệu của các đa t hức này;
- Tính đa thức tích của các đa thức này.
12. Một hình vuông có độ dài cạnh là a được tô 02 màu: trắng và đen. Người ta tiến
hành chia hình vuông này thành 04 hình vuông con đều nhau và ghi nhận vị trí của
chúng trong hình vuông lớn. Nếu trong mỗi hình vuông con chỉ gồm toàn màu trắng
hoặc màu đen thì giữ nguyên, còn nếu trong hình vuông con còn có 02 màu thì tiếp
tục chia hình vuông con này thành 04 hình vuông con nhỏ hơn và ghi nhận vị trí, …,
cứ như vậy sau một số hữu hạn phép chia sẽ kết thúc việc chia. Hãy sử dụng cấu
trúc dữ liệu thích hợp để lưu trữ các hình vuông này vào trong bộ nhớ trong của máy
tính. Với cấu trúc dữ liệu lựa chọn, hãy trình bày thuật toán và cài đặt chương trình
thực hiện các công việc sau:
- Tính tổng số hình vuông tạo thành qua các lần chia.
- Tính tổng số hình vuông màu trắng, màu đen và tổng diện tích tương ứng của
chúng.
- Tái tạo lại hình vuông ban đầu.
13. Định nghĩa cấu trúc dữ liệu thích hợp để lưu trữ các giá trị trong tam giác Pascal
vào trong bộ nhớ trong của máy tính. Với cấu trúc dữ liệu này hãy trình bày thuật
toán và viết chương trình thực hiện các công việc sau:
- In tam giác Pascal có N dòng ra màn hình.
- In và tính giá trị biểu thức (a+b)N ra màn hình.
14. Trình bày thuật toán và viết chương trình thực hiện công việc minh họa (Demo) quá
trình thực hiện tất cả các thuật toán đã học.
Giáo trình: Cấu Trúc Dữ Liệu và Giải Thuật
Trang: 229
IV. HƯỚNG DẪN SỬ DỤNG TÀI LIỆU THAM KHẢO
1. Cấu trúc dữ liệu
Tác giả: Nguyễn Trung Trực
Khoa CNTT, trường ĐHBK TP.HCM
2. Giáo trình Cấu trúc dữ liệu 1
Tác giả: Trần Hạnh Nhi – Dương Anh Đức
Khoa CNTT, trường ĐHKHTN – ĐHQG TP.HCM
3. Algorithms + Data Structures = Programs
Tác giả: N.Wirth
NXB: Prentice Hall, 1976
4. Data Structures and Algorithms
Tác giả: Alfred V.Aho - John E.Hopcroft – Jeffrey D.Ullman
NXB: Addison-Wesley Publishing Company
5. Algorithms (Second Edition)
Tác giả: Robert Sedgewick
NXB: Addison-Wesley Publishing Company
6. Data Structures and Program Design (Third Edition)
Tác giả: Robert L.Kruse
NXB: Prentice Hall
File đính kèm:
Giáo trình Cấu trúc dữ liệu và giải thuật.pdf
