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

pdf229 trang | Chuyên mục: Cấu Trúc Dữ Liệu & Giải Thuật | Chia sẻ: dkS00TYs | Lượt xem: 5353 | Lượt tải: 3download
Tóm tắt nội dung Giáo trình Cấu trúc dữ liệu và giải thuật, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
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:

  • pdfGiáo trình Cấu trúc dữ liệu và giải thuật.pdf