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

Giáo trình Cấu trúc dữ liệu và giải thuật được biên soạn và ban hành theo quyết định của Trường Cao đẳng Kinh tế - Kỹ thuật Vinatex TP.HCM (thuộc Tập đoàn Dệt May Việt Nam) vào tháng 03 năm 2019. Tài liệu được thiết kế làm giáo trình giảng dạy lưu hành nội bộ cho học sinh hệ Trung cấp và sinh viên hệ Cao đẳng ngành Công nghệ thông tin. Trong chương trình đào tạo, môn học có mã số MH 12, thuộc khối kiến thức cơ sở ngành bắt buộc, được bố trí giảng dạy sau khi người học đã hoàn thành hai môn học tiên quyết là Lập trình căn bảnCơ sở dữ liệu.

Thời lượng thực hiện môn học gồm 75 giờ, được phân bổ thành:

  • 15 giờ lý thuyết;
  • 55 giờ thực hành, thí nghiệm, thảo luận và bài tập;
  • 5 giờ kiểm tra.

Mục tiêu học tập của giáo trình được xác định cụ thể trên ba phương diện:

  • Về kiến thức: Người học nắm được mối quan hệ giữa cấu trúc dữ liệu và giải thuật thông qua nguyên lý kết hợp để xây dựng chương trình; phân tích được các kiểu dữ liệu; biết cách tổ chức dữ liệu khoa học cho chương trình; áp dụng được các thuật toán sắp xếp, tìm kiếm và giải thuật tương thích với từng dạng dữ liệu.
  • Về kỹ năng: Cài đặt và thực thi trên máy tính các bài toán về đệ quy, danh sách liên kết, ngăn xếp, hàng đợi, cây nhị phân, sắp xếp và tìm kiếm bằng một ngôn ngữ lập trình cụ thể.
  • Về năng lực tự chủ và trách nhiệm: Rèn luyện tư duy phân tích, tổng hợp logic cùng tính cẩn thận, chi tiết trong thao tác lập trình.

Giáo trình gồm 6 chương, triển khai theo cấu trúc logic từ các kiểu dữ liệu cơ bản, phương pháp đệ quy, các giải thuật xử lý mảng (tìm kiếm, sắp xếp) đến các cấu trúc dữ liệu động tuyến tính và phi tuyến. Điểm đặc trưng trong cách tiếp cận của tài liệu là dành phần lớn thời lượng (55/75 giờ) cho thực hành và gắn liền các cấu trúc lý thuyết với việc hiện thực hóa bằng mã nguồn ngôn ngữ C.


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

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

Giáo trình triển khai toàn bộ hệ thống kiến thức qua 6 chương chuyên đề:

  • Chương 1: Tổng quan về cấu trúc dữ liệu và giải thuật Trình bày các tiêu chuẩn đánh giá cấu trúc dữ liệu gồm: phản ánh đúng thực tế, phù hợp với các thao tác xử lý và tiết kiệm tài nguyên hệ thống (CPU, bộ nhớ). Định nghĩa kiểu dữ liệu thông qua bộ $\langle V, O \rangle$ (với $V$ là tập giá trị hợp lệ, $O$ là tập thao tác). Phân loại kiểu dữ liệu cơ bản trong C (char, unsigned char, int, unsigned int, long, unsigned long, float, long double) và các kiểu dữ liệu có cấu trúc: kiểu chuỗi ký tự (thư viện string.h), kiểu mảng (1 chiều, nhiều chiều), kiểu union, kiểu mẫu tin (struct), kiểu con trỏ (với các hàm cấp phát động malloc, calloc, realloc, free), và kiểu tập tin (tập tin văn bản, tập tin nhị phân truy cập ngẫu nhiên với các hàm fopen, fclose, fputc, fgetc, fgets, fscanf, fprintf, fwrite, fread, fseek, ftell, rewind, fgetpos, fsetpos, rename, remove).

  • Chương 2: Đệ quy và giải thuật đệ quy Khái niệm đối tượng và giải thuật đệ quy; mối liên hệ giữa đệ quy và phương pháp quy nạp toán học. Cấu trúc hàm đệ quy gồm phần neo (trường hợp suy biến) và phần đệ quy. Cơ chế hoạt động của vùng nhớ ngăn xếp (Stack) khi gọi hàm đệ quy. Các bài toán cơ bản: tính giai thừa ($n!$), dãy số Fibonacci, bài toán Tháp Hà Nội với công thức $2^n - 1$ phép chuyển đĩa. Phân loại 4 dạng đệ quy: đệ quy tuyến tính, đệ quy nhị phân, đệ quy tương hỗ, đệ quy phi tuyến; nguyên lý khử đệ quy và kỹ thuật quy hoạch động.

  • Chương 3: Tìm kiếm Khái niệm bài toán tìm kiếm dữ liệu. Trình bày chi tiết giải thuật, mã nguồn cài đặt và đánh giá độ phức tạp của hai thuật toán: Tìm kiếm tuyến tính (Linear Search) và Tìm kiếm nhị phân (Binary Search).

  • Chương 4: Các phương pháp sắp xếp cơ bản Định nghĩa bài toán sắp xếp dữ liệu. Trình bày giải thuật, phương pháp cài đặt và đánh giá hiệu năng của 5 phương pháp sắp xếp:

    1. Phương pháp chọn trực tiếp (Selection Sort);
    2. Phương pháp chèn trực tiếp (Insertion Sort);
    3. Phương pháp đổi chỗ trực tiếp (Interchange Sort);
    4. Phương pháp nổi bọt (Bubble Sort);
    5. Phương pháp sắp xếp nhanh (Quick Sort) dựa trên giải thuật phân hoạch dãy $a_l, a_{l+1}, \dots, a_r$ thành hai dãy con.
  • Chương 5: Danh sách Định nghĩa và biểu diễn danh sách liên kết (xâu liên kết đơn). Khai báo, cài đặt các thao tác cơ bản: thêm, xóa một phần tử, duyệt xâu, sắp xếp xâu liên kết, áp dụng thuật toán QuickSort trên xâu. Cấu trúc dữ liệu Ngăn xếp (Stack): khái niệm, cài đặt bằng mảng và xâu đơn, ứng dụng ngăn xếp trong bài toán xử lý biểu thức hậu tố. Cấu trúc dữ liệu Hàng đợi (Queue): khái niệm, cài đặt hàng đợi bằng mảng và xâu liên kết.

  • Chương 6: Cây nhị phân Định nghĩa cây và cây nhị phân, các khái niệm nút, nhánh, bậc, mức và tính chất toán học của cây nhị phân. Biểu diễn cây nhị phân và các giải thuật duyệt cây: duyệt tiền tự (NLR), trung tự (LNR), hậu tự (LRN); cài đặt thuật toán duyệt LNR. Cây tìm kiếm nhị phân (BST - Binary Search Trees): định nghĩa, cài đặt cấu trúc, thao tác tìm kiếm phần tử, chèn phần tử, xây dựng cây BST, sắp xếp bằng cây BST, xóa một phần tử khỏi cây và giải phóng bộ nhớ hủy cây nhị phân.

Tiến trình phát triển nội dung của giáo trình:
Chương 1: Kiểu dữ liệu tĩnh, động, con trỏ & Tệp tin
   ↓
Chương 2: Đệ quy & Cơ chế Stack hệ thống
   ↓
Chương 3 & 4: Thuật toán mảng (Tìm kiếm & Sắp xếp)
   ↓
Chương 5: Cấu trúc dữ liệu động tuyến tính (Danh sách liên kết, Stack, Queue)
   ↓
Chương 6: Cấu trúc dữ liệu phân cấp phi tuyến (Cây nhị phân & Cây tìm kiếm nhị phân BST)

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

  1. Mô hình hóa dữ liệu $\langle V, O \rangle$ và công thức chương trình: Mọi kiểu dữ liệu được xác định chặt chẽ qua tập giá trị $V$ và tập thao tác $O$. Mối quan hệ giữa dữ liệu và giải thuật được đúc kết qua công thức nền tảng: $$\text{Cấu trúc dữ liệu} + \text{Giải thuật} = \text{Chương trình}$$

  2. Cơ chế quản lý bộ nhớ máy tính: Phân biệt rõ ràng giữa cấp phát tĩnh và cấp phát động; cơ chế định vị địa chỉ bộ nhớ qua biến con trỏ (kích thước 2 byte trong mô hình 16-bit); nguyên lý hoạt động của vùng nhớ Stack khi thực hiện các cuộc gọi hàm lồng nhau trong đệ quy.

  3. Cơ sở toán học quy nạp: Sử dụng toán học quy nạp để chứng minh tính đúng đắn và tính dừng của các giải thuật đệ quy thông qua điểm dừng (neo suy biến).

Kỹ năng phát triển

  • Kỹ năng kỹ thuật (Technical skills): Cài đặt thành thạo các cấu trúc dữ liệu tự trỏ (nút danh sách, nút cây) bằng ngôn ngữ C; quản lý tài nguyên bộ nhớ thông qua các hàm malloc, calloc, realloc, free; thao tác đọc/ghi tệp tin văn bản và tệp tin nhị phân.
  • Kỹ năng phân tích (Analytical skills): Đánh giá và lựa chọn kiểu dữ liệu phù hợp dựa trên các tiêu chí về tính đúng đắn, tốc độ xử lý và dung lượng bộ nhớ tiêu thụ; so sánh hiệu năng giữa thuật toán lặp và đệ quy, giữa các thuật toán sắp xếp sơ cấp ($O(n^2)$) và sắp xếp nhanh QuickSort ($O(n \log n)$).
  • Kỹ năng thực tiễn (Practical competencies): Xây dựng các mô-đun phần mềm quản lý dữ liệu thực tế như quản lý hồ sơ thí sinh, danh sách nhân viên, tính toán giá trị biểu thức toán học và tổ chức cấu trúc tệp dữ liệu có khóa sắp thứ tự.

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

Phương pháp tiếp cận sư phạm

Giáo trình được thiết kế theo định hướng thực hành với tỷ trọng 73,3% thời lượng (55/75 giờ) dành cho bài tập, thí nghiệm và thảo luận. Nội dung lý thuyết (15 giờ) được cô đọng nhằm giải thích nguyên lý toán học và cấu trúc giải thuật, sau đó chuyển hóa trực tiếp thành mã lệnh ngôn ngữ C để người học thực nghiệm trên máy tính.

Phân bổ thời lượng môn học (Tổng số: 75 giờ):

Bài tập và tình huống thực hành

Tài liệu cung cấp các bài toán mẫu gắn liền với ngữ cảnh thực tế:

  • Tình huống chọn sai kiểu dữ liệu: Phân tích trường hợp dùng biến int lưu tiền thưởng bán hàng ($5%$) gây mất số lẻ, hoặc dùng biến unsigned char (0–255) lưu tổng học phí lớp 26 học sinh ($26 \times $10 = $260$) dẫn đến tràn số.
  • Quản lý hồ sơ dữ liệu: Bài toán nhập, so sánh và sắp xếp danh sách thí sinh (hoso) có cấu trúc ngày sinh (date), điểm thi 3 môn Toán, Lý, Hóa bằng hàm chuẩn qsortstrcmp.
  • Thao tác tệp tin ứng dụng:
    • Chương trình đọc tọa độ các đỉnh của đa giác từ tệp DAGIAC.DAT.
    • Chương trình đếm số từ xuất hiện trong tệp mã nguồn thu.cpp.
    • Chương trình duyệt, cập nhật, xóa logic bằng cờ dauloaibo và trộn 2 tệp nhân viên đã sắp thứ tự (DS.DBF).
  • Ứng dụng cấu trúc dữ liệu: Mô phỏng bài toán Tháp Hà Nội; cài đặt ngăn xếp để tính giá trị biểu thức hậu tố; cài đặt cây tìm kiếm nhị phân để tra cứu và sắp xếp thông tin.

Phương pháp đánh giá và hướng dẫn tự học

  • Đánh giá: Gồm 5 giờ kiểm tra định kỳ, tập trung vào khả năng lập trình trực tiếp trên máy tính, kiểm tra tính đúng đắn của giải thuật trên các bộ dữ liệu thử nghiệm (test cases).
  • Tự học:
    • Khi thiết kế hàm đệ quy, người học cần xác định rõ ràng trường hợp suy biến (neo) trước khi cài đặt phần đệ quy để tránh lỗi tràn ngăn xếp.
    • Khi thao tác với con trỏ và danh sách động, cần kiểm tra điều kiện con trỏ NULL và giải phóng bộ nhớ bằng hàm free() sau khi hoàn tất xử lý.

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

  • Tính quy chuẩn học thuật và đào tạo nghề nghiệp: Giáo trình được ban hành chính thức năm 2019 theo khung chương trình đào tạo nghề Công nghệ thông tin của Trường Cao đẳng Kinh tế - Kỹ thuật Vinatex TP.HCM, bảo đảm tính thống nhất về khối lượng kiến thức và mục tiêu đào tạo.
  • Minh họa tường minh cơ chế bộ nhớ hệ thống: Phân tích chi tiết mối quan hệ giữa biến tĩnh và biến động; chỉ rõ sự tương đương trong truy cập dữ liệu giữa cú pháp mảng và cú pháp con trỏ:
    • &a[i] tương đương với a + i
    • a[i] tương đương với *(a + i)
    • Biểu diễn mảng 2 chiều a[n][m] qua con trỏ với công thức phần tử $a[i][j]$ quản lý tại contro_int + i * m + j.
  • Xử lý tệp tin ở mức độ byte: Phân tích sự khác biệt giữa tệp văn bản và tệp nhị phân khi xử lý ký tự chuyển dòng \n (tệp văn bản chuyển thành cặp mã ASCII Carriage Return 13 và Line Feed 10; tệp nhị phân giữ nguyên mã 10). Hướng dẫn chi tiết các hàm điều khiển đầu đọc như fseek, ftell, rewind, fgetpos, fsetpos.
  • Định hướng ứng dụng doanh nghiệp: Nội dung giáo trình hướng tới việc trang bị nền tảng kỹ thuật để thiết kế, cài đặt các hệ thống tin học ứng dụng phục vụ quản lý sản xuất và vận hành trong doanh nghiệp.

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

  • Học sinh và Sinh viên: Dành cho học sinh hệ Trung cấp và sinh viên hệ Cao đẳng thuộc ngành Công nghệ thông tin tại Trường Cao đẳng Kinh tế - Kỹ thuật Vinatex TP.HCM cùng các cơ sở đào tạo nghề có chương trình tương đương.
  • Yêu cầu kiến thức tiên quyết (Prerequisites): Người học bắt buộc phải hoàn thành các môn học:
    • Lập trình căn bản (nắm vững cú pháp điều khiển, hàm, kiểu dữ liệu cơ sở của ngôn ngữ C);
    • Cơ sở dữ liệu (hiểu cấu trúc bảng, bản ghi và quan hệ dữ liệu).
  • Giảng viên: Sử dụng làm tài liệu giảng dạy chính thức cho môn học MH 12; làm cơ sở xây dựng đề cương bài giảng, bài tập thực hành phòng máy và đề thi kiểm tra đánh giá.
  • Tự học và Tham khảo: Phù hợp cho lập trình viên và người tự học cần tài liệu tra cứu có hệ thống về các giải thuật kinh điển (đệ quy, sắp xếp, tìm kiếm) và kỹ thuật quản lý bộ nhớ động trên nền tảng ngôn ngữ C.

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

1. Giáo trình này phù hợp với đối tượng người học nào?

Giáo trình được biên soạn chuyên biệt cho học sinh hệ Trung cấp và sinh viên hệ Cao đẳng ngành Công nghệ thông tin, cũng như những người muốn tìm hiểu về cấu trúc dữ liệu và giải thuật ứng dụng trong quản lý và sản xuất.

2. Cần chuẩn bị kiến thức nền tảng nào trước khi học giáo trình?

Người học cần hoàn thành môn Lập trình căn bản (thao tác cú pháp, cấu trúc rẽ nhánh, vòng lặp trên ngôn ngữ C) và môn Cơ sở dữ liệu để có thể tiếp thu và thực hành các nội dung trong tài liệu.

3. Giáo trình có điểm gì khác biệt so với các tài liệu lý thuyết thuần túy?

Giáo trình dành hơn 73% thời lượng (55/75 giờ) cho thực hành và bài tập; tích hợp mã nguồn C hoàn chỉnh cho từng giải thuật; phân tích sâu cơ chế bộ nhớ vật lý, kỹ thuật con trỏ và thao tác xử lý tệp tin nhị phân.

4. Phương pháp tự học giáo trình như thế nào để đạt hiệu quả cao?

Người học nên kết hợp đọc lý thuyết với việc gõ và biên dịch trực tiếp các đoạn mã nguồn mẫu trong giáo trình; tự phân tích trường hợp neo của bài toán đệ quy; vẽ sơ đồ liên kết con trỏ trước khi cài đặt danh sách liên kết và cây nhị phân.

5. Giáo trình sử dụng ngôn ngữ lập trình nào để cài đặt minh họa?

Giáo trình sử dụng ngôn ngữ lập trình C tiêu chuẩn, kết hợp các thư viện hệ thống cơ bản như stdio.h, alloc.h (hoặc stdlib.h), string.h để minh họa giải thuật.


Kết luận

Giáo trình Cấu trúc dữ liệu và giải thuật (Mã môn học: MH 12) của Trường Cao đẳng Kinh tế - Kỹ thuật Vinatex TP.HCM cung cấp hệ thống kiến thức nền tảng về tổ chức dữ liệu và thiết kế giải thuật. Thông qua 6 chương học kết hợp chặt chẽ giữa lý thuyết và thực hành, tài liệu giúp người học hình thành tư duy logic và kỹ năng lập trình hệ thống trên ngôn ngữ C.

Theo lộ trình đào tạo, sau khi hoàn thành học phần này, người học có đủ kiến thức nền tảng để tiếp cận các môn học chuyên ngành nâng cao về kỹ thuật lập trình, phát triển phần mềm ứng dụng và xây dựng các hệ thống thông tin quản trị trong thực tế doanh nghiệp.