Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 151 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
151
Dung lượng
1,31 MB
Nội dung
NGUYỄN VĂN LINH TRẦN CAO ĐỆ TRƯƠNG THỊ THANH TUYỀN LÂM HỒI BẢO PHAN HUY CƯỜNG TRẦN NGÂN BÌNH CẤU TRÚC DỮ LIỆU Trang Cấu trúc liệu Lời nói đầu ĐẠI HỌC CẦN THƠ – 12/2003 LỜI NĨI ĐẦU Để đáp ứng nhu cầu học tập bạn sinh viên, sinh viên chuyên ngành tin học, Khoa Công Nghệ Thông Tin Trường Đại Học Cần Thơ tiến hành biên soạn giáo trình, giảng chương trình học Giáo trình môn Cấu Trúc Dữ Liệu biên soạn dựa "Data Structures and Algorithms" Alfred V Aho, John E Hopcroft Jeffrey D Ullman Addison-Wesley tái năm 1987 Giáo trình biên soạn dựa kinh nghiệm giảng dạy nhiều năm môn Cấu Trúc Dữ Liệu Giải Thuật Tài liệu soạn theo đề cương chi tiết môn Cấu Trúc Dữ Liệu sinh viên chuyên ngành tin học Khoa Công Nghệ Thông Tin Trường Đại Học Cần Thơ Mục tiêu nhằm giúp bạn sinh viên chuyên ngành có tài liệu cô đọng dùng làm tài liệu học tập, chúng tơi khơng loại trừ tồn đối tượng khác tham khảo Chúng nghĩ bạn sinh viên không chuyên tin người quan tâm tới cấu trúc liệu giải thuật tìm điều hữu ích Mặc dù cố gắng nhiều trình biên soạn giáo trình chắn giáo trình cịn nhiều thiếu sót hạn chế Rất mong nhận đóng góp ý kiến quý báu sinh viên bạn đọc để giáo trình ngày hồn thiện Cần thơ, ngày 10 tháng 11 năm 2003 Các tác giả Trần Cao Đệ Nguyễn Văn Linh Trương Thị Thanh Tuyền Lâm Hồi Bảo Phan Huy Cường Trần Ngân Bình Trang Cấu trúc liệu Mục lục MỤC LỤC CHƯƠNG I MỞ ĐẦU U I TỪ BÀI TỐN ĐẾN CHƯƠNG TRÌNH Mơ hình hóa toán thực tế Giải thuật (algorithms) .12 Ngôn ngữ giả tinh chế bước (Pseudo-language and stepwise refinement) 15 Tóm tắt 17 II KIỂU DỮ LIỆU TRỪU TƯỢNG (ABSTRACT DATA TYPE) 18 Khái niệm trừu tượng hóa 18 Trừu tượng hóa chương trình .18 Trừu tượng hóa liệu .19 III KIỂU DỮ LIỆU - CẤU TRÚC DỮ LIỆU VÀ KIỂU DỮ LIỆU TRỪU TƯỢNG (DATA TYPES, DATA STRUCTURES, ABSTRACT DATA TYPES) 20 CHƯƠNG II CÁC KIỂU DỮ LIỆU TRỪU TƯỢNG CƠ BẢN .22 (BASIC ABSTRACT DATA TYPES) 22 I KIỂU DỮ LIỆU TRỪU TƯỢNG DANH SÁCH (LIST) 24 Khái niệm danh sách 24 Các phép toán danh sách .24 Cài đặt danh sách 26 NGĂN XẾP (STACK) .43 Định nghĩa ngăn xếp 43 Các phép toán ngăn xếp 44 Cài đặt ngăn xếp 45 Ứng dụng ngăn xếp để loại bỏ đệ qui chương trình 48 III HÀNG ĐỢI (QUEUE) 53 Định Nghĩa 53 Các phép toán hàng 53 Cài đặt hàng 53 Một số ứng dụng cấu trúc hàng 62 IV DANH SÁCH LIÊN KẾT KÉP (double - lists) 62 II BÀI TẬP 68 CHƯƠNG III CẤU TRÚC CÂY (TREES) .73 I II III CÁC THUẬT NGỮ CƠ BẢN TRÊN CÂY .74 Định nghĩa 74 Thứ tự nút 75 Các thứ tự duyệt quan trọng .75 Cây có nhãn biểu thức 76 KIỂU DỮ LIỆU TRỪU TƯỢNG CÂY 78 CÀI ĐẶT CÂY 79 Cài đặt mảng .79 Trang Cấu trúc liệu Mục lục Biểu diễn danh sách .85 Biểu diễn theo trái anh em ruột phải: 86 Cài đặt trỏ .87 IV CÂY NHỊ PHÂN (BINARY TREES) 87 Định nghĩa 87 Duyệt nhị phân 88 Cài đặt nhị phân 89 V CÂY TÌM KIẾM NHỊ PHÂN (BINARY SEARCH TREES) .92 Định nghĩa 92 Cài đặt tìm kiếm nhị phân 93 BÀI TẬP 100 CHƯƠNG IV I TẬP HỢP 103 KHÁI NIỆM TẬP HỢP .104 II KIỂU DỮ LIỆU TRỪU TƯỢNG TẬP HỢP 104 III CÀI ĐẶT TẬP HỢP 105 Cài đặt tập hợp vector Bit 105 Cài đặt danh sách liên kết 107 IV TỪ ĐIỂN (dictionary) .111 Cài đặt từ điển mảng 111 Cài đặt từ điển bảng băm 113 Các phương pháp xác định hàm băm .122 V HÀNG ƯU TIÊN (priority queue) 123 Khái niệm hàng ưu tiên 123 Cài đặt hàng ưu tiên 124 BÀI TẬP 131 CHƯƠNG V ĐỒ THỊ (GRAPH) .133 I CÁC ĐỊNH NGHĨA 134 II KIỂU DỮ LIỆU TRỪU TƯỢNG ĐỒ THỊ 135 III BIỂU DIỄN ĐỒ THỊ 136 Biểu diễn đồ thị ma trận kề 136 Biểu diễn đồ thị danh sách đỉnh kề: 138 IV CÁC PHÉP DUYỆT ĐỒ THỊ (traversals of graph) .138 Duyệt theo chiều sâu (depth-first search) 139 Duyệt theo chiều rộng (breadth-first search) 140 V MỘT SỐ BÀI TOÁN TRÊN ĐỒ THỊ 143 Bài tốn tìm đuờng ngắn từ đỉnh đồ thị (the single source shorted path problem) 143 Tìm đường ngắn tất cặp đỉnh 145 Bài tốn tìm bao đóng chuyển tiếp (transitive closure) 146 Trang Cấu trúc liệu Mục lục Bài tốn tìm bao trùm tối thiểu (minimum-cost spanning tree) .147 BÀI TẬP 150 Trang Cấu trúc liệu Phần tổng quan PHẦN TỔNG QUAN Mục đích u cầu Mơn học cấu trúc liệu cung cấp cho sinh viên khối lượng lớn kiến thức kiểu liệu trừu tượng phép tốn kiểu liệu Sau học xong môn này, sinh viên cần phải: - Nắm vững khái niệm kiểu liệu, kiểu liệu trừu tượng - Nắm vững cài đặt kiểu liệu trừu tượng danh sách, ngăn xếp, hàng đợi, cây, tập hợp, bảng băm, đồ thị ngơn ngữ lập trình - Vận dụng kiểu liệu trừu tượng để giải toán đơn giản thực tế Đối tượng sử dụng Môn học cấu trúc liệu dùng để giảng dạy cho sinh viên sau: - Sinh viên năm thứ chuyên ngành Tin học (môn bắt buộc ) - Sinh viên năm thứ chun ngành Tốn tin, Lý tin (mơn bắt buộc) - Sinh viên năm thứ hai chuyên ngành Điện tử - Viễn thơng tự động hóa (mơn tự chọn) Nội dung cốt lõi Nội dung giáo trình gồm chương đuợc trình bày 60 tiết cho sinh viên, có khoảng 40 tiết lý thuyết 20 tiết tập mà giáo viên hướng dẫn cho sinh viên lớp Bên cạnh tài liệu cịn có tài liệu thực hành cấu trúc liệu, nội dung giáo trình trọng cấu trúc liệu giải thuật cấu trúc liệu chương trình hồn chỉnh ngơn ngữ lập trình C Chương 1: Trình bày cách tiếp cận từ tốn đến chương trình, bao gồm mơ hình hố tốn, thiết lập cấu trúc liệu theo mơ hình tốn, viết giải thuật giải tốn bước tinh chế giải thuật đưa đến cài đặt cụ thể ngơn ngữ lập trình Chương 2: Trình bày kiểu liệu trừu tượng danh sách, cấu trúc liệu để cài đặt danh sách Ngăn xếp hàng đợi trình bày chương hai cấu trúc danh sách đăc biệt Ở chúng tơi muốn trình bày việc ứng dụng ngăn xếp để khử đệ qui chương trình nêu số ứng dụng hàng đợi Cuối chương, chúng tơi trình bày cấu trúc danh sách liên kết kép cho toán cần duyệt danh sách theo hai chiều xuôi, ngược cách thuận lợi Chương có nhiều cài đặt tương đối chi tiết Trang Cấu trúc liệu Phần tổng quan để bạn sinh viên tiếp cận với lập trình có hội nâng cao khả lập trình ngôn ngữ C đồng thời nhằm minh hoạ việc cài đặt kiểu liệu trừu tượng ngơn ngữ lập trình cụ thể Chương 3: Chương giới thiệu kiểu liệu trừu tượng cây, khái niệm tổng quát, phép duyệt tổng quát cài đặt tổng quát Kế đến trình bày nhị phân, cách cài đặt nhị phân ứng dụng nhị phân để xây dựng mã Huffman Cuối cùng, chúng tơi trình bày tìm kiếm nhị phân ứng dụng nhị phân để lưu trữ tìm kiếm liệu Chương 4: Chương dành để nói kiểu liệu trừu tượng tập hợp, cách đơn giản để cài đặt tập hợp cài đặt vectơ bít hay danh sách có khơng có thứ tự Phần chương trình bày cấu trúc liệu tự điển, tập hợp với ba phép tốn thêm, xố tìm kiếm phần tử, với cấu trúc thích hợp cho bảng băm hàng ưu tiên Chương 5: Trình bày kiểu liệu trừu tượng đồ thị, cách biểu diễn đồ thị cài đặt đồ thị Ở chúng tơi trình bày phép duyệt đồ thị bao gồm duyệt theo chiều rộng duyệt theo chiều sâu đồ thị Do hạn chế thời lượng lên lớp nên không tách riêng để trình bày đồ thị có hướng, đồ thị vơ hướng chúng tơi phân biệt chổ cần thiết Chương đề cập số toán thường gặp đồ thị tốn tìm đường ngắn nhất, tốn tìm phủ tối thiểu.…Chương giới thiệu để sinh viên tham khảo thêm cách cài đặt đồ thị toán đồ thị Kiến thức tiên Để học tốt môn học cấu trúc liệu này, sinh viên cần phải có kiến thức sau: - Kiến thức kỹ lập trình - Kiến thức toán rời rạc Danh mục tài liệu tham khảo [1] Aho, A V , J E Hopcroft, J D Ullman "Data Structure and Algorihtms", Addison– Wesley; 1983 [2] Đỗ Xuân Lôi "Cấu trúc liệu giải thuật" Nhà xuất khoa học kỹ thuật Hà nội, 1995 [3] N Wirth " Cấu trúc liệu + giải thuật= Chương trình", 1983 [4] Nguyễn Trung Trực, "Cấu trúc liệu" BK HCM, 1990 [5] Lê Minh Trung ; “Lập trình nâng cao Pascal với cấu trúc liệu “; 1997 Trang Cấu trúc liệu Phần tổng quan [6] Ngơ Trung Việt, “Ngơn ngữ lập trình C C++ Bài giảng- Bài tập – Lời giải mẫu”; NXB Giao thơng vận tải, 2000 [7] Nguyễn Đình Tê, Hồng Đức Hải, “ Giáo trình lý thuyết tập ngôn ngữ C” , NXB Giáo dục; 1998 [8] Lê Xuân Trường, “ Giáo trình cấu trúc liệu ngôn ngữ C++”; NXB thống kê; 1999 [9] Nguyễn Thanh Thủy, Nguyễn Quang Huy ,” Bài tập lập trình ngơn ngữ C”, NXB Khoa học kỹ thuật, 1999 [10] Michel T Goodrich, Roberto Tamassia, David Mount, “Data Structures and Algorithms in C++” Weley International Edition; 2004 [11] http://courses.cs.hcmuns.edu.vn/ctdl1/Ctdl1/index.html [12] http://www.cs.ualberta.ca/~holte/T26/top.realTop.html [13] http://ciips.ee.uwa.edu.au/~morris/Year2/PLDS210/ds_ToC.html Trang Cấu trúc liệu CHƯƠNG I Chương I:Mở đầu MỞ ĐẦU TỔNG QUAN Mục tiêu Sau học xong chương này, sinh viên sẽ: Nắm bước lập trình để giải cho toán Nắm vững khái niệm kiểu liệu trừu tượng, khác kiểu liệu, kiểu liệu trừu tượng cấu trúc liệu Kiến thức cần thiết Các kiến thức cần thiết để học chương bao gồm: Khả nhận biết giải toán theo hướng tin học hóa Tài liệu tham khảo Aho, A V , J E Hopcroft, J D Ullman "Data Structure and Algorihtms", Addison– Wesley; 1983 (chapter 1) Đỗ Xuân Lôi "Cấu trúc liệu giải thuật" Nhà xuất khoa học kỹ thuật Hà nội, 1995 (Chương 1) Nội dung cốt lõi Chương nghiên cứu vấn đề sau: - Cách tiếp cận từ tốn đến chương trình - Kiểu liệu trừu tượng (Abstract Data Type) - Kiểu liệu – Kiểu liệu trừu tượng – Cấu trúc liệu I TỪ BÀI TỐN ĐẾN CHƯƠNG TRÌNH Mơ hình hóa tốn thực tế Để giải tốn thực tế máy tính ta phải việc xác định toán Nhiều thời gian cơng sức bỏ để xác định tốn cần giải quyết, tức phải trả lời rõ ràng câu hỏi "phải làm gì?" sau "làm nào?" Thông thường, khởi đầu, hầu Trang Cấu trúc liệu Chương I: Mở đầu hết tốn khơng đơn giản, khơng rõ ràng Để giảm bớt phức tạp toán thực tế, ta phải hình thức hóa nó, nghĩa phát biểu lại tốn thực tế thành tốn hình thức (hay cịn gọi mơ hình tốn) Có thể có nhiều tốn thực tế có mơ hình tốn Ví dụ 1: Tơ màu đồ giới Ta cần phải tô màu cho nước đồ giới Trong nước tô màu hai nước láng giềng (cùng biên giới) phải tơ hai màu khác Hãy tìm phương án tơ màu cho số màu sử dụng Ta xem nước đồ giới đỉnh đồ thị, hai nước láng giềng hai đỉnh ứng với nối với cạnh Bài toán lúc trở thành tốn tơ màu cho đồ thị sau: Mỗi đỉnh phải tơ màu, hai đỉnh có cạnh nối phải tơ hai màu khác ta cần tìm phương án tơ màu cho số màu sử dụng Ví dụ 2: Đèn giao thơng Cho ngã năm hình I.1, C E đường chiều theo chiều mũi tên, đường khác hai chiều Hãy thiết kế bảng đèn hiệu điều khiển giao thông ngã năm cách hợp lý, nghĩa là: phân chia lối ngã năm thành nhóm, nhóm gồm lối đi đồng thời không xảy tai nạn giao thông (các hướng không cắt nhau), số lượng nhóm Ta xem đầu vào (input) tốn tất lối ngã năm này, đầu (output) tốn nhóm lối đi đồng thời mà khơng xảy tai nạn giao thơng, nhóm tương ứng với pha điều khiển đèn hiệu, ta phải tìm kiếm lời giải với số nhóm để giao thơng khơng bị tắc nghẽn phải chờ đợi lâu Trước hết ta nhận thấy ngã năm có 13 lối đi: AB, AC, AD, BA, BC, BD, DA, DB, DC, EA, EB, EC, ED Tất nhiên, để giải tốn ta phải tìm cách Trang 10 Cấu trúc liệu Chương V: Đồ thị int FIRST(int v) //trả số [1 n] đỉnh kề với v ∈ n { int i; for (i=1; i