Giáo trình này nhằm cung cấp cho sinh viên các kiến thức căn bản về các cấu trúc dữ liệu cơ sở có cấu trúc tuyến tính tĩnh, động (danh sách liên kết), cấu trúc cây và các giải thuật cơ [r]
(1)TRƯỜNG ĐẠI HỌC ĐÀ LẠT KHOA TOÁN - TIN HỌC
Trương Chí Tín
GIÁO TRÌNH
CẤU TRÚC DỮ LIỆU & GIẢI THUẬT 1
(2)
LỜI MỞ ĐẦU
Giáo trình nhằm cung cấp cho sinh viên kiến thức cấu trúc liệu sở có cấu trúc tuyến tính tĩnh, động (danh sách liên kết), cấu trúc giải thuật liên quan đến chúng xếp, tìm kiếm nhớ trong, so sánh độ phức tạp giải thuật Để nắm bắt kiến thức trình bày học phần này, sinh viên cần nắm kiến thức tin học đại cương, nhập môn lập trình Ngơn ngữ lập trình chọn để minh họa kiến thức C++ Các kiến thức tạo điều kiện cho học viên tiếp tục dễ dàng nắm bắt kiến thức học phần tin học sau như: cấu trúc liệu giải thuật nâng cao, phân tích thiết kế giải thuật, đồ hoạ, hệ điều hành, trí tuệ nhân tạo,
Nội dung giáo trình gồm chương:
- Chương 1: Giới thiệu khái niệm ban đầu mối liên hệ mật thiết cấu trúc liệu giải thuật, kiểu liệu, thiết kế phân tích giải thuật, độ phức tạp giải thuật,
- Chương 2: Giới thiệu phương pháp tìm kiếm xếp kiểu liệu tuyến tính mảng Thơng qua đó, trình bày số ý tưởng kỹ thuật nhằm cải tiến giải thuật
- Chương 3: Trình bày kiểu liệu trỏ Trên sở đó, trình bày kiểu liệu động tuyến tính có nhiều ứng dụng tin học kiểu danh sách liên kết khác nhau, ngăn xếp, hàng đợi, số ứng dụng chúng - Chương 4: Giới thiệu loại cấu trúc liệu động khác thao tác nhị phân, nhị phân tìm kiếm, cân AVL
Nhằm mục đích dành thời gian nhiều cho sinh viên để làm tập lớn, nên số phần tác giả trình bày chi tiết dạng cài đặt biến thể khác cho giải thuật Các phần thứ yếu phức tạp in cỡ chữ nhỏ dành cho sinh viên đọc thêm
Chắn chắn giáo trình nhiều khiếm khuyết, tác giả mong muốn nhận biết ơn ý kiến quí báu đóng góp đồng nghiệp bạn đọc để giáo trình hồn thiện mặt nội dung hình thức lần tái sau
(3)MỤC LỤC
Chương I GIỚI THIỆU CẤU TRÚC DỮ LIỆU, PHÂN TÍCH GIẢI THUẬT
Trang
I.1 Quan hệ cấu trúc liệu giải thuật, kiểu liệu I.1
I.1.1 Biểu diễn liệu I.1
I.1.2 Quan hệ cấu trúc liệu giải thuật, kiểu liệu I.1 I.1.3 Các bước để giải tốn máy tính I.2
I.2 Thiết kế phân tích giải thuật I.4
I.2.1 Thiết kế giải thuật theo phương pháp Top-Down I.4 I.2.2 Các chiến lược khác để thiết kế giải thuật I.5 I.2.3 Phân tích giải thuật độ phức tạp giải thuật I.5
I.2.4 Qui ước ngôn ngữ mã giả I.9
Chương II TÌM KIẾM VÀ SẮP XẾP TRONG
II.1 Giới thiệu xếp tìm kiếm II.1
II.1.1 Sắp xếp II.1
a Định nghĩa xếp II.1
b Phân loại phương pháp xếp II.1
c Vài qui uớc kiểu liệu xét giải thuật xếp II.1
II.1.2 Tìm kiếm II.3
a Định nghĩa phép tìm kiếm II.3
b Phân loại phương pháp tìm kiếm II.3
II.2 Phương pháp tìm kiếm trong II.3
II.2.1 Phương pháp tìm kiếm tuyến tính II.3
a Dãy chưa II.3
b Dãy II.5
II.2.2 Phương pháp tìm kiếm nhị phân II.6
II.3 Phương pháp xếp trong II.7
(4)II.3.8 Phương pháp xếp trộn (Merge Sort) II.25 II.3.9 Phương pháp xếp dựa số (Radix Sort) II.28 II.3.10 So sánh phương pháp xếp II.31 Trang
Chương III CẤU TRÚC DANH SÁCH LIÊN KẾT
III.1 Giới thiệu đối tượng liệu trỏ III.1
III.1.1 So sánh cấu trúc liệu tĩnh cấu trúc liệu động III.1
III.1.2 Kiểu liệu trỏ III.1
a Định nghĩa III.1
b Khai báo III.2
c Các thao tác kiểu liệu trỏ III.3
III.1.3 Biến động III.4
a Đặc trưng biến động III.4
b Truy xuất biến động III.4
c Hai thao tác biến động III.5
III.2 Danh sách liên kết (DSLK) III.7
III.2.1 Định nghĩa danh sách III.7
III.2.2 Các cách tổ chức danh sách III.7
III.3 DSLK đơn III.8
III.3.1 Tổ chức DSLK đơn, thao tác bản, tìm kiếm xếp
trên kiểu DSLK đơn III.8
a Tổ chức DSLK đơn (khơng có nút câm) III.8 b Các thao tác kiểu DSLK đơn III.9 c Sắp xếp kiểu DSLK đơn: xếp chèn, QuickSort,
MergeSort, RadixSort III.17
III.3.2 Ứng dụng DSLK đơn III.24
a Ngăn xếp: định nghĩa, cài đặt, phép toán
ứng dụng ngăn xếp III.24
b Hàng đợi: định nghĩa, cài đặt, phép toán
ứng dụng hàng đợi III.31
III.4 Một số kiểu DSLK khác III.34
III.4.1 DSLK đơn có nút câm III.34
III.4.2 DSLK vòng III.37
III.4.3 DSLK đối xứng III.38
a Cấu trúc liệu biểu diễn DSLK đối xứng III.39 b Các thao tác kiểu DSLK đối xứng III.39 c Ứng dụng DSLK đối xứng: hàng đợi hai đầu III.47
III.4.4 DS đa liên kết III.48
III.4.5 Một số ứng dụng khác DSLK III.51
a DS có thứ tự DS tổ chức lại III.51
b.Biểu diễn tập hợp DSLK III.53
(5)e Sắp xếp tôpô III.57
Trang
Chương IV CẤU TRÚC CÂY
IV.1 Định nghĩa khái niệm bản IV.1
IV.1.1 Định nghĩa IV.1
IV.1.2 Các khái niệm khác IV.1
IV.2 Cây nhị phân IV.3
IV.2.1 Định nghĩa IV.3
IV.2.2 Vài tính chất nhị phân IV.3
IV.2.3 Biểu diễn nhị phân IV.3
IV.2.4 Duyệt nhị phân IV.4
IV.2.5 Một cách biểu diễn khác nhị phân IV.7 IV.2.6 Biểu diễn n - phân nhị phân IV.8 IV.2.7 Xây dựng nhị phân cân hoàn toàn IV.8
IV.3 Cây nhị phân tìm kiếm IV.9
IV.3.1 Định nghĩa nhị phân tìm kiếm IV.9 IV.3.2 Tìm kiếm phần tử BST IV.10 IV.3.3 Chèn phần tử vào BST, xây dựng BST IV.11 IV.3.4 Phương pháp xếp BST IV.13 IV.3.5 Xóa phần tử khỏi BST, hủy nhị phân IV.13
IV.4 Cây nhị phân tìm kiếm cân bằng IV.16
IV.4.1 Định nghĩa IV.17
IV.4.2 Chiều cao cân IV.17
IV.4.3 Chỉ số cân việc cân lại AVL IV.18
IV.4.4 Chèn phần tử vào AVL IV.24
IV.4.5 Xóa phần tử khỏi AVL IV.25
Bài tập. BT.1
Bài tập chương I BT.1
Bài tập chương II BT.4
Bài tập chương III BT.6
Bài tập chương IV BT.11
(6)TÀI LIỆU THAM KHẢO
[1] A.V AHO , J.E HOPCROFT , J.D ULMANN: Data structures and algorithms Addition Wesley - 1983
[2] DONALD KNUTH: The Art of Programming (vol.1: Fundamental Algorithms, vol 3: Sorting and Searching) Addition Wesley Puplishing Company - 1973
[3] ĐINH MẠNH TƯỜNG: Cấu trúc liệu giải thuật NXB KHKT - 2001 [4] ĐỖ XUÂN LÔI: Cấu trúc liệu giải thuật NXB KHKT - 1995
[5] LARRY N HOFF, SANFORD LEESTMA: Lập trình nâng cao Pascal với cấu trúc liệu Bản dịch Lê Minh Trung Công ty Scitec - 1991 [6] NGUYỄN TRUNG TRỰC: Cấu trúc liệu Trung tâm điện toán, trường ĐH
Bách khoa TP HCM – 1992
[7] NIKLAUS WIRTH: Cấu trúc liệu + Giải thuật = Chươngtrình (Nguyễn Quốc Cường dịch) NXB ĐH THCN – 1991