(NB) Giáo trình Cấu trúc dữ liệu và giải thuật nhằm cung cấp cho sinh viên các thuật toán tổng quát, danh sách liên kết, và các giải thuật sắp xếp, tìm kiếm. Từ đó sinh viên sẽ từng bước cải tiến thuật toán để xây dựng được những chương trình hiệu quả và có tính ứng dụng cao. Mục đích của giáo trình là trang bị cho học viên những kiến thức và kỹ năng phân tích xây dựng được thuật toán kết hợp với giải thuật.
ỦY BAN NHÂN DÂN TỈNH BR – VT TRƯỜNG CAO ĐẲNG NGHỀ GIÁO TRÌNH MƠ ĐUN CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT NGHỀ CƠNG NGHỆ THƠNG TIN TRÌNH ĐỘ CAO ĐẲNG Ban hành kèm theo Quyết định số: 01/QĐCĐN ngày 04 tháng 01 năm 2016 của Hiệu trưởng trường Cao đẳng nghề tỉnh Bà Rịa – Vũng Tàu Bà Rịa – Vũng Tàu, năm 2016 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 Giáo trình cấu trúc dữ liệu và giải thuật dùng cho học sinh hệ Cao Đẳng và Trung cấp của nghề lập trình máy tính và hệ cao đẳng chun ngành cơng nghệ thơng tin ứng dụng phần mềm trong trường Cao đẳng nghề Tỉnh BR – VT. Nhằm cung cấp cho sinh viên các thuật tốn tổng qt, danh sách liên kết, và các giải thuật sắp xếp, tìm kiếm. Từ đó sinh viên sẽ từng bước cải tiến thuật tốn để xây dựng được những chương trình hiệu quả và có tính ứng dụng cao. Mục đích của giáo trình là trang bị cho học viên những kiến thức và kỹ năng phân tích xây dựng được thuật tốn kết hợp với giải thuật Để có thể nắm bắt các kiến thức học sinh cần được trang bị các kiến thức về mơn lập trình căn bản. Ngơn ngữ lập trình được chọn để minh họa các kiến thức trên là Dev C++. Trong qua trình biên soạn giáo trình, chắn chắn rằng trong giáo trình sẽ cịn nhiều khiếm khuyết, tác giả mong muốn nhận được các ý kiến q báu đóng góp của đồng nghiệp cũng như bạn đọc để giáo trình này có thể hồn thiện hơn nữa về mặt nội dung cũng như hình thức trong lần tái bản sau Bà Rịa – Vũng Tàu, ngày 02 tháng 01 năm 2016 Biên soạn Nguyễn Thị Mai MỤC LỤC TRANG CHƯƠNG TRÌNH MÔ ĐUN BÀI GIỚI THIỆU CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT 10 Mối liên hệ giải thuật cấu trúc liệu 10 1.1 Giải thuật 10 1.2 Dữ liệu 10 1.3 Mối quan hệ cấu trúc liệu giải thuật 11 Kiểu liệu, mơ hình liệu, kiểu liệu trừu tượng 11 2.1.Khái niệm kiểu liệu 11 2.2 Mơ hình kiểu liệu 12 2.3 Kiểu liệu trừu tượng 13 Thiết kế phân tích giải thuật 13 3.1 Thiết kế thuật toán 13 3.2 Phân tích tính đắn giải thuật 13 3.3 Phân tích tính đơn giản 14 Một số ví dụ thiết kế phân tích giải thuật 14 BÀI LÀM VIỆC VỚI CON TRỎ 17 Biến trỏ 17 1.1 Khái niệm trỏ ( pointer ) 17 1.3 Gán địa biến cho biến trỏ 18 1.4 Cấp phát vùng nhớ cho biến trỏ 19 1.5 Giải phóng vùng nhớ cho biến trỏ 19 1.6 Một số phép toán trỏ 20 Con trỏ mảng chiều 21 Con trỏ mảng nhiều chiều 22 BÀI LÀM VIỆC VỚI KIỂU CẤU TRÚC 25 Khái niệm cấu trúc 25 Khai báo kiểu cấu trúc 25 Truy nhập đến thành phần biến cấu trúc 28 Nhập liệu cho biến cấu trúc 28 BÀI LÀM VIỆC VỚI KIỂU TẬP TIN 32 Khái niệm tập tin 32 Các kiểu vào với tệp: 33 2.1 Khai báo biến tập tin 33 2.2 Mở tập tin 34 2.3 Đóng tập tin 35 2.4 Kiểm tra đến cuối tập tin hay chưa? 35 2.5 Di chuyển trỏ tập tin đầu tập tin - Hàm rewind() 36 Các thao tác tệp: 36 3.1 Ghi liệu lên tập tin văn 36 3.2 Đọc liệu từ tập tin văn 37 BÀI THÊM PHẦN TỬ TRONG DANH SÁCH ĐẶC 41 Định nghĩa 41 Khởi tạo danh sách 41 Thêm phần tử vào danh sách 42 3.1.Thêm vào đầu danh sách: 42 3.2.Thêm vào cuối danh sách: 42 3.3 Thêm vào vị trí danh sách: 42 BÀI XÓA PHẦN TỬ TRONG DANH SÁCH ĐẶC 44 Xóa phần tử đầu 44 Xóa phần tử cuối 45 Xóa phần tử vị trí danh sách: 45 BÀI LÀM VIỆC VỚI DANH SÁCH LIÊN KẾT 46 Định nghĩa: 46 Khai báo nút 47 Khai báo danh sách 47 Khởi tạo nút 47 Khởi tạo danh sách 48 Nhập danh sách 48 Xuất danh sách 49 BÀI CHÈN PHẦN TỬ TRONG DANH SÁCH LIÊN KẾT 50 Chèn nút vào đầu danh sách 50 Chèn nút vào cuối danh sách 51 Chèn nút vào vị trí 51 BÀI XÓA PHẦN TỬ TRONG DANH SÁCH LIÊN KẾT 53 Xóa nút đầu danh sách 53 Xóa nút cuối danh sách 53 Hủy danh sách 54 BÀI 10 LÀM VIỆC VỚI NGĂN XẾP 56 1.4 Lấy phần tử khỏi ngăn xếp 58 1.5 Thêm phần tử vào ngăn xếp 58 2.3 Lấy phần tử khỏi ngăn xếp 59 2.4 Thêm phần tử vào ngăn xếp 60 2.5 Xóa phần tử ngăn xếp 60 BÀI 11 LÀM VIỆC VỚI HÀNG ĐỢI(QUEUE) 62 Biểu diễn hàng đợi dùng mảng: 63 2.4 Lấy phần tử ở đầu Queue 67 BÀI 12 SỬ DỤNG CÁC PHƯƠNG PHÁP SẮP XẾP 70 Định nghĩa toán xếp: 70 2.3 Giải thuật: 71 Phương pháp xếp bọt 73 3.3 Giải thuật: 74 Phương pháp đổi chỗ trực tiếp 74 4.3 Giải thuật: 75 Phương pháp chèn trực tiếp( insertion sort) 77 5.3 Giải thuật: 78 Phương pháp tìm kiếm nhị phân 83 2.1 Ý tưởng 83 TÀI LIỆU CẦN THAM KHẢO: 86 CHƯƠNG TRÌNH MƠ ĐUN CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Mã số mơ đun: MĐ15 VỊ TRÍ, TÍNH CHẤT CỦA MƠ ĐUN: Vị trí: Mơ đun này được học sau mơ đun Tin học văn phịng, Lập trình căn bản, cơ sở dữ liệu Tính chất: Mơ đun 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 MỤC TIÊU MƠ ĐUN: Trình bày được các kiểu dữ liệu Phân tích và xây dựng được thuật tốn 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 Thực hiện được các thao tác trên các kiểu dữ liệu 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 đơn Có tinh thần trách nhiệm, ý thức tổ chức kỷ luật, tác phong cơng nghiệp, tinh thần hợp tác trong cơng việc Có ý chủ động, độc lập trong cơng việc, tự học cập nhật kiến thức, nâng cao trình độ chun mơn NỘI DUNG CỦA MƠ ĐUN: STT Tên các bài trong mô đun Giới thiệu cấu trúc liệu giải thuật Làm việc với con trỏ Làm việc với kiểu cấu trúc Thời gian Hình thức giảng dạy Tích hợp Tích hợp Tích hợp Làm việc với kiểu tập tin Tích hợp Kiểm tra bài 1,2,3,4 Thêm phần tử trong danh sách đặc Tích hợp Xóa phần tử trong danh sách đặc Tích hợp Kiểm tra bài 5,6 Làm việc với danh sách liên kết Tích hợp Chèn phần tử trong danh sách liên kết Tích hợp Xóa phần tử trong danh sách liên kết Tích hợp 10 Làm việc với ngăn xếp Tích hợp 11 Làm việc với hàng đợi Tích hợp Kiểm tra bài 7,8,9,10,11 Sử dụng các phương pháp sắp xếp Sử dụng các phương pháp tìm kiếm Kiểm tra bài 12,13 Cộng 10 75 Tích hợp Tích hợp 12 13 BÀI 1 GIỚI THIỆU CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Giới thiệu: Giải thuật là cách phân tích 1 vấn đề, từ thực tiễn cho tới chương trình, cách thiết kế một giải pháp cho vấn đề theo cách giải quyết bằng máy tính. Tiếp theo, các phương pháp phân tích, đánh giá độ phức tạp và thời gian thực hiện giải thuật . Qua bài học này sẽ giới thiệu một cách thật cụ thể về 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, kiên trì, sáng tạo. Bảo đảm an tồn và vệ sinh cho người và thiết bị trong phịng máy Nội dung 1. Mối liên hệ giải thuật và cấu trúc dữ liệu 1.1. Giải thuật Giải thuật là các bước cần tác động theo một thứ tự nhất định nào đó trên cơ sở bổ dữ liệu vào để đạt dữ liệu ra đúng với chân lý của nó Dữ liệu vào Input Giải thuật DD ữữ li li ệệ u u rara Out put 1.2. 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ý 10 } } Ví dụ: Cho một dãy các phần tử như sau, minhhọa thuật tốn đổi chỗ: 12 2 8 5 1 6 4 15 72 3. Phương pháp sắp xếp nổi bọt 3.1. Ý tưởng: + Xuất phát từ cuối dãy, đổi chỗ các cặp phần tử kế cận để đưa phần tử nhỏ hơn trong cặp phần tử đó về vị trí đứng đầu dãy hiện hành, sau đó sẽ khơng xét đến nó ở bước tiếp theo, do vậy ở lần xử lý thứ i sẽ có vị trí đầu dãy là i. + Lặp lại xử lý trên cho đến khi khơng cịn cặp phần tử nào để xét 3.2. Các bước tiến hành: + Bước 1: i = 0;// lần xử lý đầu tiên + Bước 2: j=N1;//Duyệt từ cuối dãy ngược về vị trí i Trong khi (j a[j1] Doicho(a[j],a[j1]); j = j1 + Bước 3 : i = i+1; // lần xử lý kế tiếp Nếu i>N1 : Hết dãy .Dừng Ngược lại: Lặp lai Bước 2 73 3.3. Giải thuật: void SXNoibot(int a[],int n) { int i, j,tg; for (i = 0 ; ii ; j ) if(a[j]