Tổng quan về giáo trình

Tài liệu học tập Thực hành Cấu trúc dữ liệu và Giải thuật (mã lưu hành nội bộ: CATT 1.C0S8321) do Tiến sĩ Nguyễn Thị Hải Bình biên soạn, được phát hành bởi Trường Đại học Công nghệ TP.HCM (HUTECH). Trong chương trình đào tạo ngành Công nghệ thông tin bậc đại học, học phần này giữ vai trò cầu nối thực hành, bổ trợ trực tiếp cho môn học lý thuyết Cấu trúc dữ liệu và Giải thuật, đồng thời kế thừa kiến thức từ học phần Nhập môn lập trình và Kỹ thuật lập trình.

Mục tiêu đào tạo của tài liệu nhằm trang bị cho sinh viên kỹ năng lập trình nâng cao trên ngôn ngữ C, nắm vững các phương pháp tổ chức dữ liệu trong bộ nhớ máy tính và thành thạo việc cài đặt các thao tác cơ sở trên từng cấu trúc. Hoàn thành giáo trình, sinh viên đạt được các chuẩn đầu ra cụ thể: vận dụng được mảng một chiều, mảng hai chiều kết hợp thuật toán đệ quy; cài đặt thành thạo danh sách liên kết đơn, kép, vòng; hiện thực hóa cấu trúc dữ liệu tuyến tính ngăn xếp (Stack), hàng đợi (Queue) cùng các bài toán ứng dụng thực tế; thao tác trên cấu trúc phi tuyến gồm cây nhị phân, cây nhị phân tìm kiếm (BST) và cây nhị phân tìm kiếm cân bằng (AVL).

Tài liệu được cấu trúc thành 5 bài thực hành tuần tự, mỗi bài phân tách thành 3 phần rõ ràng: tóm tắt lý thuyết, hướng dẫn thực hành cơ bản và hệ thống bài tập thực hành nâng cao. Cách tiếp cận của tài liệu tập trung vào phân tích kỹ thuật: cung cấp đặc tả cấu trúc dữ liệu, nguyên mẫu hàm, giải thuật từng bước và mã nguồn C minh họa có chú thích chi tiết, giúp người học chuyển hóa kiến thức lý thuyết thành chương trình máy tính có khả năng vận hành thực tế.


Nội dung kiến thức cốt lõi

Các chương/chủ đề chính

Nội dung tài liệu được phân bổ qua 5 bài thực hành theo tiến trình từ cấu trúc dữ liệu tuyến tính sang phi tuyến:

  • Bài 1: Mảng — Đệ quy: Hệ thống lại cấu trúc chương trình C phân chia theo hàm (khái niệm nguyên mẫu hàm, hàm không trả về giá trị, hàm trả về giá trị, cơ chế truyền tham số theo tham trị và tham biến). Trình bày cách khai báo mảng tường minh và không tường minh. Giới thiệu lý thuyết đệ quy (xác định bước đệ quy và điều kiện dừng) kết hợp bài tập thực hành mảng số nguyên, mảng cấu trúc bản ghi CuonSach và chuỗi thuật toán đệ quy.
  • Bài 2: Danh sách liên kết: Giới thiệu kiểu dữ liệu trừu tượng danh sách với hai giải pháp cài đặt: cấp phát kế tiếp (mảng tĩnh) và cấp phát liên kết (danh sách liên kết đơn, kép, vòng). Tài liệu tập trung sâu vào danh sách liên kết đơn, định nghĩa cấu trúc nút Node (gồm trường dữ liệu info và con trỏ next), con trỏ quản lý pHead, cùng các thao tác cơ bản: khởi tạo, kiểm tra rỗng, tạo nút, chèn đầu/cuối/sau một nút, xóa phần tử, duyệt và sắp xếp bằng thuật toán Interchange Sort.
  • Bài 3: Cấu trúc Queue và Stack: Phân tích bản chất của ngăn xếp hoạt động theo cơ chế LIFO (Last In First Out) với hai thao tác cơ bản push và pop; hàng đợi hoạt động theo cơ chế FIFO (First In First Out) với hai thao tác insert và remove được quản lý bởi con trỏ pHead và pTail.
  • Bài 4: Cấu trúc Cây — Cây nhị phân tìm kiếm: Trình bày định nghĩa cây nhị phân với cấu trúc mỗi nút gồm dữ liệu, con trỏ nhánh trái left và nhánh phải right, quản lý thông qua con trỏ gốc proot. Triển khai các phương pháp duyệt cây: duyệt tiền thứ tự (NLR), trung thứ tự (LNR), hậu thứ tự (LRN). Nêu định nghĩa cây nhị phân tìm kiếm (BST), các thao tác chèn nút (Insert), xóa nút (Remove) xử lý tường minh trường hợp nút có 2 con bằng kỹ thuật tìm nút thế mạng nhỏ nhất bên nhánh phải.
  • Bài 5: Cây nhị phân tìm kiếm cân bằng: Nghiên cứu cấu trúc cây AVL được đề xuất bởi Adelson Velski và Landis (1962). Cung cấp định nghĩa chỉ số cân bằng bf = height(left) - height(right) với điều kiện cân bằng bf(p) ∈ {-1, 0, 1}. Trình bày chi tiết giải thuật xoay phải, xoay trái và 4 trường hợp mất cân bằng (Trái-Trái, Trái-Phải, Phải-Phải, Phải-Trái) cùng các thao tác cập nhật chiều cao và cân bằng lại cây.

Kiến thức nền tảng được xây dựng

Giáo trình củng cố nền tảng lý thuyết khoa học máy tính thông qua các mô hình dữ liệu trừu tượng (Abstract Data Types - ADT). Sinh viên được trang bị tư duy quản lý tài nguyên bộ nhớ thông qua cơ chế cấp phát động bằng con trỏ trong C (new, delete), cách thức tổ chức các kiểu dữ liệu tự định nghĩa bằng struct và typedef. Giáo trình chuẩn hóa nguyên lý hoạt động của cấu trúc tuyến tính hạn chế thao tác (LIFO của Stack, FIFO của Queue) và nguyên lý phân cấp của cấu trúc dữ liệu dạng cây, đặc biệt là tính chất bảo toàn thứ tự khóa trên cây BST và nguyên lý bảo toàn độ cao logarithmic của cây AVL.

Kỹ năng phát triển

Người học phát triển hệ thống kỹ năng thực hành lập trình có cấu trúc:

  • Kỹ năng kỹ thuật: Cài đặt mã nguồn C chuẩn xác cho các hàm xử lý con trỏ, xây dựng thao tác duyệt cây đệ quy, tính toán hệ số cân bằng và thực thi các phép xoay đơn, xoay kép trên cây AVL.
  • Kỹ năng phân tích thuật toán: Phân tích điều kiện biên, xác định điểm dừng đệ quy, chuyển đổi biểu thức số học giữa các dạng trung tố, tiền tố, hậu tố và tối ưu hóa thao tác tìm kiếm nhị phân.
  • Kỹ năng thiết kế ứng dụng: Đóng gói chương trình thành hệ thống menu điều khiển tương tác qua console, phân tách các khối chức năng quản trị dữ liệu riêng biệt.

Phương pháp giảng dạy và học tập

Giáo trình triển khai phương pháp giảng dạy lấy thực hành lập trình làm trọng tâm (Lab-based learning). Cấu trúc từng bài học dẫn dắt người học qua quy trình 3 giai đoạn: Tái hiện lý thuyết thông qua bảng biểu, sơ đồ con trỏ và cú pháp mẫu; Nghiên cứu mã nguồn mẫu có chú thích giải thuật; Trực tiếp gõ mã, biên dịch, gỡ lỗi và giải quyết các bài tập mở rộng.

Tài liệu cung cấp hệ thống bài tập thực hành đa tầng:

  • Bài tập cơ bản: Cung cấp khung chương trình hoàn chỉnh hoặc mã giả chi tiết (như hàm Convert đổi hệ thập phân sang nhị phân dùng Stack, hàm rotateLeft, rotateRight trên cây AVL) nhằm giúp sinh viên hiểu rõ cơ chế vận hành của thuật toán.
  • Bài tập nâng cao: Yêu cầu sinh viên vận dụng cấu trúc dữ liệu để giải quyết các mô hình thực tế như quản lý danh mục sách thư viện (tìm tuần tự, tìm nhị phân, tìm sách giá cao nhất), quản lý danh sách sinh viên theo cấu trúc SinhVien (tính điểm trung bình, xếp loại học lực, sắp xếp theo mã), giải thuật đếm tổ hợp $C(n, k)$ hay bài toán tháp Hà Nội.

Về phương pháp đánh giá, học phần quy định điểm số gồm:

  • Điểm quá trình (chiếm 30% tổng điểm): Đánh giá qua các buổi thực hành trên lớp, mức độ chuyên cần và kết quả giải quyết bài tập do giảng viên trực tiếp phụ trách quyết định.
  • Điểm thi thực hành kết thúc học phần: Thực hiện trên máy tính với nội dung bao quát toàn diện các kiến thức lập trình từ Bài 1 đến Bài 5.

Giáo trình đưa ra chỉ dẫn cụ thể về phương pháp tự học: sinh viên cần nghiên cứu lý thuyết trước khi đến phòng máy, ghi chú các điểm vướng mắc về con trỏ hoặc thuật toán xoay cây để trao đổi cùng giảng viên, đồng thời phải tự cài đặt lại toàn bộ các bài tập từ cơ bản đến nâng cao sau buổi học.


Điểm nổi bật và cập nhật

  • Tính chuẩn hóa trong tổ chức mã nguồn C: Toàn bộ các ví dụ và hướng dẫn trong tài liệu đều tuân thủ chặt chẽ phong cách lập trình cấu trúc: định nghĩa kiểu rõ ràng bằng typedef struct, quản lý con trỏ theo địa chỉ tham chiếu (Node* &phead), kiểm tra tính hợp lệ của bộ nhớ và cung cấp menu điều khiển chức năng rõ ràng.
  • Trình bày tường minh giải thuật xoay trên cây AVL: Điểm nhấn kỹ thuật của tài liệu là việc chuẩn hóa giải thuật cân bằng cây AVL của Adelson Velski và Landis (1962). Giáo trình cung cấp mã nguồn C chi tiết cho việc tính chiều cao nút (getHeight), hệ số cân bằng (balanceFactor), các hàm xoay đơn (rotateLeft, rotateRight), hàm tổng hợp cân bằng (balance) và thao tác xóa nút có tái cân bằng (removeNode). Các trường hợp mất cân bằng được minh họa song song bằng hình vẽ chuyển vị trí con trỏ và mã lệnh tương ứng.
  • Tích hợp bài toán ứng dụng sát thực tế: Tài liệu không dừng lại ở các kiểu dữ liệu nguyên thủy mà đưa vào các mô hình dữ liệu thực tiễn:
    • Sử dụng cấu trúc Queue để giải bài toán điều phối lượt khám bệnh nhân tại phòng khám tư (quản lý thông tin BenhNhan, số thứ tự tự động, gọi khám và thống kê).
    • Ứng dụng Stack trong thuật toán chuyển đổi hệ số thập phân sang nhị phân và xử lý các biểu thức toán học (trung tố, tiền tố, hậu tố).
    • Áp dụng DSLK đơn trong bài toán quản lý sinh viên với các nghiệp vụ lọc phân loại khá, giỏi và tìm kiếm theo khóa.

Đối tượng sử dụng giáo trình

  • Sinh viên đại học: Giáo trình được biên soạn phục vụ trực tiếp cho sinh viên năm thứ nhất và năm thứ hai theo học khối ngành Công nghệ thông tin, Kỹ thuật phần mềm, Hệ thống thông tin và An toàn thông tin tại Đại học Công nghệ TP.HCM (HUTECH) cùng các cơ sở đào tạo đại học có học phần thực hành tương đương.
  • Điều kiện tiên quyết (Prerequisites): Người học cần trang bị tư duy logic, kiến thức toán học cơ sở và đã hoàn thành các học phần Nhập môn lập trình, Kỹ thuật lập trình (nắm vững cú pháp C, cấu trúc điều khiển, kiểu dữ liệu mảng, con trỏ và hàm).
  • Giảng viên: Tài liệu là khung chuẩn để giảng viên hướng dẫn tại các phòng thực hành máy tính, làm cơ sở xây dựng ngân hàng đề kiểm tra quá trình và đề thi kết thúc học phần.
  • Người tự học và tham khảo: Lập trình viên cần hệ thống lại kiến thức cốt lõi về cấu trúc dữ liệu và giải thuật bằng ngôn ngữ C có thể sử dụng tài liệu như một tài liệu tham khảo kỹ thuật có sẵn mã nguồn mẫu.

Câu hỏi thường gặp

1. Giáo trình này phù hợp với ai?

Giáo trình phù hợp với sinh viên đại học ngành Công nghệ thông tin đang theo học môn Thực hành Cấu trúc dữ liệu và Giải thuật, cũng như người học cần rèn luyện kỹ năng hiện thực hóa các cấu trúc dữ liệu cơ sở bằng ngôn ngữ C.

2. Cần kiến thức nền nào để học giáo trình này?

Theo phần Yêu cầu môn học, người học bắt buộc phải có tư duy logic, kiến thức toán học cơ bản, nắm vững kỹ thuật lập trình C căn bản, bao gồm thao tác với biến, cấu trúc rẽ nhánh, vòng lặp, kiểu mảng và cơ chế truyền tham số cho hàm.

3. Điểm khác biệt của tài liệu này so với các giáo trình lý thuyết khác là gì?

Tài liệu lược bỏ các chứng minh toán học phức tạp, tập trung hoàn toàn vào việc chuyển hóa lý thuyết thành mã lệnh C thực thi. Mỗi cấu trúc dữ liệu đều đi kèm mã khai báo kiểu dữ liệu, các hàm khởi tạo, chèn, xóa, duyệt và bài toán ứng dụng thực tế.

4. Làm sao để tự học và thực hành giáo trình hiệu quả?

Người học cần làm theo hướng dẫn của tác giả: đọc trước tài liệu trước khi thực hành, gạch chân nội dung chưa hiểu để trao đổi với giảng viên; tự gõ và chạy thử các bài mẫu; sau đó hoàn thành độc lập các bài tập nâng cao mà không sao chép mã nguồn có sẵn.

5. Có tài liệu hoặc kênh liên hệ bổ trợ nào kèm theo không?

Tài liệu thuộc hệ thống học liệu nội bộ của Trường Đại học Công nghệ TP.HCM (HUTECH). Trong quá trình học tập, sinh viên và độc giả có thể gửi các ý kiến đóng góp về nội dung giáo trình trực tiếp đến ban biên tập qua thư điện tử: tailieuhoctap@hutech.vn.


Kết luận

Tài liệu học tập Thực hành Cấu trúc dữ liệu và Giải thuật của TS. Nguyễn Thị Hải Bình cung cấp tài liệu hướng dẫn kỹ thuật chi tiết, gắn kết chặt chẽ giữa nguyên lý dữ liệu trừu tượng và kỹ năng lập trình trên ngôn ngữ C. Lộ trình 5 bài thực hành giúp sinh viên làm chủ từ các cấu trúc dữ liệu tuyến tính cơ bản đến các cấu trúc cây nhị phân cân bằng phức tạp. Mọi ý kiến phản hồi chuyên môn phục vụ hoàn thiện tài liệu được ban biên tập tiếp nhận chính thức qua hộp thư tailieuhoctap@hutech.vn.