(NB) Giáo trình Cấu trúc dữ liệu và giải thuật cung cấp cho người học các kiến thức: Giới thiệu về cấu trúc dữ liệu và giải thuật; Kiểu dữ liệu nâng cao; Danh sách; Ngăn xếp và hàng đợi; Sắp xếp và tìm kiếm. Mời các bạn cùng tham khảo.
BỘ NƠNG NGHIỆP VÀ PHÁT TRIỂN NƠNG THƠN TRƯỜNG CAO ĐẲNG CƠ GIỚI NINH BÌNH GIÁO TRÌNH MƠN HỌC: MH19_CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT NGHỀ: LẬP TRÌNH MÁY TÍNH TRÌNH ĐỘ: Cao đẳng/ trung cấp Ban hành kèm theo Quyết định số: /QĐ…TCGNB ngày…….tháng….năm của Hiệu trưởng Trường Cao Đẳng Cơ giới Ninh Bình Ninh Bình, năm 2018 TUN BỐ BẢN QUYỀN 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 có thể được phép dùng ngun bản hoặc trích dùng cho các mục đích về đào tạo và tham khảo Mọi mục đích khác mang tính lệch lạc hoặc sử dụng với mục đích kinh doanh thiếu lành mạnh sẽ bị nghiêm cấm Lời giới thiệu Các kiến thức về cấu trúc dữ liệu (CTDL) và giải thuật đóng vai trị quan trọng trong việc đào tạo nghề Lập trình máy tính. Sách này đựơc hình thành trên cơ sở các bài giảng về CTDL và giải thuật mà tơi cùng các đồng nghiệp đã đọc nhiều năm tại khoa TốnCơTin học Trường Đại học Khoa học Tự nhiên – Đại học Quốc Gia Hà Nội; Khoa Cơng nghệ thơng tin Đại học Bách Khoa Hà Nội; Khoa Cơng nghệ thơng tin Đại học Giao thơng vận tải. Sách được biên soạn chủ yếu để làm tài liệu tham khảo cho học sinh, sinh viên nghề Lập trình máy tính, nhưng nó cũng rất bổ ích cho các độc giả khác cần có hiểu biết đầy đủ hơn về CTDL và giải thuật Giáo trình này gồm bốn chương Chương 1. Giới thiệu về cấu trúc dữ liệu và giải thuật Chương 2. Kiểu dữ liệu nâng cao Chương 3. Danh sách Chương 4. Ngăn xếp và hàng đợi Chương 5. Sắp xếp và tìm kiếm Để biên soạn giáo trình này, chúng tơi đã tham khảo các tài liệu: Cấu trúc dữ liệu và giải thuật, PTS Đinh Mạnh Tường; Lê Minh Hồng, Cấu trúc dữ liệu và giải thuật Giáo trình Cấu trúc dữ liệu và giải thuật đã được Hổi đồng thẩm định Trường Cao đẳng nghề Cơ Giới Ninh Bình xét duyệt. Tuy nhiên trong q trình biên soạn khơng tránh khỏi những sai sót, rất mong được sự đóng góp q báu chân thành của bạn đọc Ninh Bình, ngày tháng năm 2018 Tham gia biên soạn: Chủ biên Đoàn Xuân Luận Phạm Thị Thoa Nguyễn Anh Văn Mục lục Lời giới thiệu 4 Mục lục 5 Chương 1 10 Giới thiệu cấu trúc dữ liệu và giải thuật 10 1. Mối liên hệ giữa cấu trúc dữ liệu và giải thuật 10 1.1. Xây dựng cấu trúc dữ liệu 10 1.2. Xây dựng giải thuật 10 1.3. Mối quan hệ giữa cấu trúc dữ liệu và giải thuật 11 2. Kiểu dữ liệu và mơ hình dữ liệu 11 2.1. Biểu diễn dữ liệu 11 2.3. Hệ kiểu của ngôn ngữ Pascal 16 2.4. Mơ hình dữ liệu và kiểu dữ liệu trừu tượng 18 3. Thiết kế và giải thuật 22 3.1. Các tiêu chuẩn đánh giá cấu trúc dữ liệu 22 3.2. Đánh giá độ phức tạp của thuật toán 23 Chương 2 25 Các kiểu dữ liệu nâng cao 25 1. Mảng 25 2. Con trỏ 27 2.1. Con trỏ và địa chỉ 28 2.2. Con trỏ và mảng một chiều 29 2.2.2. Tên mảng là một hằng địa chỉ 30 2.2.3. Con trỏ trỏ tới các phần tử của mảng một chiều 30 2.3. Con trỏ và mảng nhiều chiều 34 2.4. Kiểu con trỏ, kiểu địa chỉ, các phép toán trên con trỏ 36 3. Cấu trúc và hợp 44 3.1. Cấu trúc (struct) 44 3.2. Kiểu union 45 4. File 46 4.1. Khái niệm về tệp tin 46 4.2. Khai báo sử dụng tệp một số hàm thường dùng khi thao tác trên tệp 48 Chươ ng 3 54 Danh sách 54 1. Các khái niệm 54 1.1. Khái niệm về danh sách 54 1.2. Các phép toán trên danh sách 54 2. Lưu tữ kế tiếp đối với danh sách tuyến tính 56 2.1. Định nghĩa 56 2.2. Danh sách liên kết đơn (Singly Linked List) 56 3. Lưu trữ móc nối đối với danh sách tuyến tính 85 3.1. Cấu trúc dữ liệu 85 3.2. Các thao tác trên danh sách 87 Chương 4 111 Ngăn xếp và hàng đợi 111 1. Định nghĩa ngăn xếp (stack) 111 2. Lưu trữ stack bằng mảng 113 2.1. Khởi tạo ngăn xếp 113 2.2. Thêm (Đẩy) một phần tử vào ngăn xếp (Push) 114 2.3. Lấy nội dung một phần tử trong ngăn xếp ra để xử lý (Pop) 115 2.4. Hủy ngăn xếp 116 3.Ví dụ về ứng dụng stack 116 4. Định nghĩa hàng đợi(Queue) 120 5. Lưu trữ queue bằng mảng 122 5.1. Khởi tạo hàng đợi (Initialize) 122 5.2. Thêm (Đưa) một phần tử vào hàng đợi (Add) 123 5.3. Lấy nội dung một phần tử trong hàng đợi ra để xử lý (Get) 124 5.4. Hủy hàng đợi 126 6. Stack và queue móc nối 126 6.1. Stack móc nối 126 6.2. Queue móc nối 129 Chương 5 132 Sắp xếp và tìm kiếm 132 1. Giới thiệu về sắp xếp và tìm kiếm 133 1.1. Giới thiệu về sắp xếp 133 1.2. Giới thiệu về tìm kiếm 134 2. Các phương pháp sắp xếp 134 2.1. Sắp xếp kiểu chọn (Selection sort) 134 2.2. Thuật toán sắp xếp nổi bọt (bubble sort) 136 2.3. Thuật toán sắp xếp kiểu chèn (insertion sort) 137 2.4. Thuật toán sắp xếp kiểu phân đoạn (quick sort) 139 2.5. Thuật toán sắp xếp trộn 144 3. Các phương pháp tìm kiếm 149 3.1. Tìm kiếm tuần tự (Sequential search) 149 3.2. Tìm kiếm nhị phân (Binary search) 149 TÀI LIỆU THAM KHẢO 152 MƠN HỌC CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Tên Mơn học: Cấu trúc dữ liệu và giải thuật Mã mơn học: MH19 Vị trí, tính chất, ý nghĩa và vai trị của mơn học: Vị trí mơn học: Mơn học này được học sau mơn học Tin học căn bản, Lập trình căn bản Tính chất mơn học: Mơn học này u cầu phải có tư duy logic và các kiến thức về lập trình căn bản, lập trình hướng đối tượng Ý nghĩa, vai trị của mơn học: Đây là mơn học cơ sở ngành của các ngành liên quan đến cơng nghệ thơng tin, cung cấp cho sinh viên các kiến thức cơ bản về lập trình Mục tiêu của mơn học: Kiến thức: + Trình bày được mối liên hệ giữa cấu trúc dữ liệu và giải thuật; cách khai báo và sử dụng các kiểu dữ liệu nâng cao; + Trình bày được các kỹ thuật ngăn xếp và hàng đợi, các thuật tốn sắp xếp và tìm kiếm, các loại danh sách liên kết Kỹ năng: + Phân tích được các loại dữ liệu, giải thuật và kết hợp được dữ liệu và giải thuật; + Cài đặt được các thuật tốn sắp xếp và tìm kiếm; + Cài đặt được các thuật tốn trên các cấu trúc dữ liệu: mảng, danh sách, danh sách liên kết Thái độ: + Rèn luyện tính cẩn thận, tỉ mỉ, chính xác, sáng tạo, làm việc độc lập và theo nhóm; + Rèn luyện kỹ năng lập trình; + Đảm bảo an tồn cho người và trang thiết bị. Nội dung của mơn học: Số TT I II III IV IV Thời gian Lý Thực Kiểm Tên chương mục Tổng Chương 1: Giới thiệu cấu trúc dữ liệu số và giải thuật 1. Mỗi liên hệ giữa cấu trúc dữ liệu và 1 giải thuật 2. Kiểu dữ liệu và mơ hình dữ liệu 3. Thiết kế và giải thuật Chương 2: Kiểu dữ liệu nâng cao 1. Kiểu mảng 2. Con trỏ 3. Cấu trúc và hợp 4. File Chương 3: Danh sách 1. Các khái niệm 2. Lưu trữ kế tiếp đối với danh sách tuyến 2 20 5 5 20 2 1 2 14 4 3 13 tính Lưu trữ móc nối đối với danh sách tuyến tính Chương 4: Ngăn xếp và hàng đợi 1. Định nghĩa ngăn xếp (stack) 2. Lưu trữ stack bằng mảng 3.Ví dụ về ứng dụng stack 4. Định nghĩa hàng đợi(Queue) 5. Lưu trữ queue bằng mảng 6. Stack và queue móc nối Chương 5: Sắp xếp và tìm kiếm 1. Giới thiệu về sắp xếp và tìm kiếm 2. Các phương pháp sắp xếp 3. Các phương pháp tìm kiếm Cộng 20 5 25 10 12 90 1 1 2 2 30 11 3 18 56 1 thuyết hành tra 1 Chương 1 Giới thiệu cấu trúc dữ liệu và giải thuật Mã chương: MH19_CH01 Giới thiệu: Bài này giới thiệu về mối liên hệ giữa cấu trúc dữ liệu và giải thuật Mục tiêu: Trình bày được kiến thức cở bản về cấu trúc dữ liệu, giải thuật, kiểu dữ liệu, mơ hình dữ liệu; Phân tích được giải thuật; Sử dụng được các phương pháp phân tích, thiết kế giải thuật; Rèn luyện tính cẩn thận, tỉ mỉ, chính xác, sáng tạo, thực hiện các thao tác an tồn với máy tính Nội dung: 1. Mối liên hệ giữa cấu trúc dữ liệu và giải thuật 1.1. Xây dựng cấu trúc dữ liệu Có thể nói rằng khơng có một chương trình máy tính nào mà khơng có dữ liệu để xử lý. Dữ liệu có thể là dữ liệu đưa vào (input data), dữ liệu trung gian hoặc dữ liệu đưa ra (output data). Do vậy, việc tổ chức để lưu trữ dữ liệu phục vụ cho chương trình có ý nghĩa rất quan trọng trong tồn bộ hệ thống chương trình. Việc xây dựng cấu trúc dữ liệu quyết định rất lớn đến chất lượng cũng như cơng sức của người lập trình trong việc thiết kế, cài đặt chương trình 1.2. Xây dựng giải thuật Khái niệm giải thuật hay thuật giải mà nhiều khi cịn được gọi là thuật tốn dùng để chỉ phương pháp hay cách thức (method) để giải quyết vần đề. Giải thuật có thể được minh họa bằng ngơn ngữ tự nhiên (natural language), bằng sơ đồ (flow chart) hoặc bằng mã giả (pseudo code). Trong thực tế, giải thuật thường được minh họa hay thể hiện bằng mã giả tựa trên một hay một số 10 Đối với thuật tốn sắp xếp kiểu chèn, thì chi phí thời gian thực hiện thuật tốn phụ thuộc vào tình trạng dãy khố ban đầu. Nếu coi phép tốn tích cực ở đây là phép so sánh tmp