Bạn đang tìm kiếm một bộ tài liệu học tập toàn diện để vượt qua môn **Cấu trúc dữ liệu và Giải thuật (CTDL & GT)** tại **Đại học Kinh tế – Đại học Đà Nẵng (UED)** hay **Trường Đại học Tài chính – Marketing (UFM)**? **tailieuonthi.io.vn** mang đến cho bạn bộ tài liệu độc quyền **”PDF Đề cương – Tiểu luận mẫu – Bài tập lớn – Đề thi mẫu Cấu trúc dữ liệu và Giải thuật UED & UFM năm 2025″** – công cụ hỗ trợ đắc lực giúp bạn nắm vững kiến thức, hoàn thành xuất sắc các bài tập lớn và đạt điểm số cao nhất trong kỳ thi!
Tải ngay PDF “Đề cương – Tiểu luận mẫu – Bài tập lớn – Đề thi mẫu Cấu trúc dữ liệu và Giải thuật UED & UFM năm 2025” tại tailieuonthi.io.vn. Bộ tài liệu này được biên soạn đặc biệt, tổng hợp và chắt lọc từ kinh nghiệm học tập và giảng dạy tại cả UED và UFM, đảm bảo tính cập nhật và sát với yêu cầu của cả hai trường trong năm học **2025**.

LƯU Ý QUAN TRỌNG TỪ Tài liệu ôn thi – tailieuonthi.io.vn:
- Bộ tài liệu này là sự kết hợp hoàn hảo của **đề cương chi tiết, các mẫu tiểu luận/bài tập lớn hoàn chỉnh, và các đề thi mẫu (giữa kỳ & cuối kỳ) có đáp án chi tiết**, được thiết kế riêng cho sinh viên Đại học Kinh tế – Đại học Đà Nẵng và Trường Đại học Tài chính – Marketing.
- Nội dung được cập nhật liên tục để đảm bảo tính thời sự và phù hợp với chương trình, phong cách ra đề của cả hai trường cho năm **2025**.
- **Chúng tôi không cam kết đề thi sẽ trùng khớp hoàn toàn với đề thi thật. Mọi sự trùng hợp là ngẫu nhiên và bộ tài liệu này chỉ mang tính chất tham khảo, giúp bạn ôn luyện kiến thức, làm quen với cấu trúc đề và nâng cao kỹ năng làm bài.**
—
Tại sao bộ tài liệu “Đề cương – Tiểu luận mẫu – Bài tập lớn – Đề thi mẫu CTDL & GT UED & UFM” là không thể thiếu?
Cấu trúc dữ liệu và Giải thuật là môn học nền tảng quan trọng cho sinh viên ngành Công nghệ thông tin, Kỹ thuật phần mềm. Dù bạn học tại UED hay UFM, việc nắm vững môn này sẽ mở ra nhiều cơ hội. Bộ tài liệu này sẽ mang lại những lợi ích vượt trội:
- Nắm vững trọng tâm kiến thức của UED & UFM: Đề cương chi tiết giúp bạn xác định những phần quan trọng nhất, các chủ đề thường xuyên xuất hiện trong thi cử và bài tập lớn, được điều chỉnh sát với chương trình giảng dạy của cả hai trường.
- Định hướng làm tiểu luận/bài tập lớn hiệu quả: Các mẫu tiểu luận và bài tập lớn cung cấp cấu trúc, ý tưởng, cách phân tích bài toán, lựa chọn cấu trúc dữ liệu và triển khai code, giúp bạn hoàn thành dự án một cách bài bản và đạt điểm cao.
- Làm quen với cấu trúc và dạng đề thi thực tế: Các đề thi mẫu được xây dựng dựa trên phong cách ra đề của UED và UFM, giúp bạn làm quen với dạng câu hỏi (trắc nghiệm/tự luận), phân bổ thời gian và chiến lược làm bài hiệu quả.
- Nâng cao kỹ năng lập trình và giải quyết vấn đề: Từ việc thực hành với các bài tập lớn đến luyện giải đề thi, bạn sẽ rèn luyện khả năng chuyển đổi lý thuyết thành code, tối ưu hóa giải thuật và xử lý các tình huống thực tế.
- Tiết kiệm thời gian và công sức: Thay vì phải tự tìm kiếm và chắt lọc tài liệu từ nhiều nguồn, bạn có một bộ tài liệu tổng hợp, chất lượng cao, giúp bạn tập trung hoàn toàn vào việc học và thực hành.
- Tăng cường sự tự tin: Với sự chuẩn bị kỹ lưỡng từ bộ tài liệu sát sườn, bạn sẽ tự tin hơn rất nhiều khi đối mặt với các kỳ kiểm tra, thi cử và hoàn thành các bài tập lớn.
Để ôn tập toàn diện môn Cấu trúc dữ liệu và Giải thuật và các môn chuyên ngành khác, bạn có thể tham khảo thêm:
- Tổng hợp tài liệu ôn tập Cấu trúc dữ liệu và Giải thuật
- Kho tài liệu các môn Chuyên ngành
- Tổng hợp Tài liệu Đại học toàn diện
—
Những thách thức khi học và thi Cấu trúc dữ liệu và Giải thuật tại UED & UFM
Môn Cấu trúc dữ liệu và Giải thuật tại Đại học Kinh tế – Đại học Đà Nẵng (UED) và Trường Đại học Tài chính – Marketing (UFM) đều là những môn học nền tảng quan trọng, đòi hỏi sinh viên phải có phương pháp học tập đúng đắn để vượt qua:
1. Tại Đại học Kinh tế – Đại học Đà Nẵng (UED):
- Yêu cầu về tư duy logic và khả năng phân tích: UED thường có các bài toán yêu cầu sinh viên không chỉ nắm vững lý thuyết mà còn phải có khả năng phân tích, đánh giá độ phức tạp của giải thuật và chọn cấu trúc dữ liệu phù hợp cho từng vấn đề.
- Kết hợp lý thuyết và thực hành: Sinh viên cần không chỉ hiểu sâu về các khái niệm mà còn phải biết cách cài đặt chúng bằng ngôn ngữ lập trình (thường là C++ hoặc Java).
- Đa dạng các dạng bài tập: Từ các cấu trúc dữ liệu cơ bản đến các bài toán về cây, đồ thị, đôi khi có các bài tập yêu cầu khả năng tự thiết kế giải thuật cho các vấn đề cụ thể.
2. Tại Trường Đại học Tài chính – Marketing (UFM):
- Tập trung vào ứng dụng thực tế và bài tập lớn: UFM có xu hướng tập trung vào việc áp dụng kiến thức CTDL> để giải quyết các vấn đề trong thực tế thông qua các bài tập lớn và dự án cuối kỳ. Điều này đòi hỏi sinh viên phải có kỹ năng lập trình và khả năng làm việc nhóm tốt.
- Yêu cầu về kỹ năng cài đặt: Sinh viên cần có khả năng biến lý thuyết thành code một cách hiệu quả, đảm bảo tính đúng đắn và hiệu suất của chương trình.
- Lượng bài tập thực hành lớn: Để củng cố kiến thức, sinh viên UFM thường phải làm nhiều bài tập thực hành trên lớp và bài tập lớn về nhà, đòi hỏi sự kiên trì và quản lý thời gian hiệu quả.
☠️ Các môn dễ trượt nhóm ngành Khoa học Tự nhiên – Công nghệ
- Toán cao cấp A1 – 29.000đ
- Giải tích 1 – 29.000đ
- Vật lý đại cương – 29.000đ
- Hóa đại cương – 29.000đ
- Lập trình cơ bản (Python/C++) – 35.000đ
- Xác suất thống kê – 29.000đ
- Triết học Mác – Lênin – 25.000đ
—
Cấu trúc đề thi thường có tại UED và UFM
Đề thi Cấu trúc dữ liệu và Giải thuật tại UED và UFM có những điểm tương đồng và khác biệt, phản ánh mục tiêu đào tạo của từng trường:
1. Đại học Kinh tế – Đại học Đà Nẵng (UED):
- Phần Trắc nghiệm (thường 4-5 điểm):
- Tập trung vào lý thuyết chuyên sâu, định nghĩa chính xác về các cấu trúc dữ liệu (Stack, Queue, Linked List, Tree, Graph, Hash Table).
- Các câu hỏi về độ phức tạp thời gian và không gian (Big O notation) của các giải thuật sắp xếp (Quick Sort, Merge Sort, Heap Sort) và các thao tác trên cấu trúc dữ liệu.
- Cơ chế hoạt động chi tiết của các thao tác trên cấu trúc dữ liệu (ví dụ: các phép duyệt cây, cách xử lý đụng độ trong bảng băm).
- Phần Tự luận (thường 5-6 điểm):
- Bài toán minh họa thao tác: Yêu cầu vẽ trạng thái của cây (BST, AVL, Heap) sau một chuỗi thao tác thêm/xóa, hoặc minh họa các bước của một giải thuật sắp xếp trên một dãy số cho trước.
- Thiết kế giải thuật và phân tích: Đưa ra một bài toán và yêu cầu sinh viên đề xuất cấu trúc dữ liệu và giải thuật phù hợp, kèm theo phân tích độ phức tạp. Các bài toán về đồ thị (tìm đường đi ngắn nhất, cây bao trùm) có thể xuất hiện.
- Viết code/hàm cài đặt: Cài đặt một hàm/lớp liên quan đến cấu trúc dữ liệu hoặc giải thuật bằng C++/Java. Yêu cầu code phải rõ ràng, đúng logic và có thể tối ưu hiệu năng.
2. Trường Đại học Tài chính – Marketing (UFM):
- Phần Trắc nghiệm (thường 5-6 điểm):
- Bao gồm các câu hỏi cơ bản và trung bình về định nghĩa, tính chất, ưu nhược điểm của các cấu trúc dữ liệu phổ biến (mảng, danh sách liên kết, stack, queue, cây nhị phân).
- Độ phức tạp của các giải thuật sắp xếp cơ bản (Bubble Sort, Selection Sort, Insertion Sort) và các thao tác đơn giản trên cấu trúc dữ liệu.
- Các câu hỏi về cơ chế hoạt động của các thao tác Push/Pop, Enqueue/Dequeue, hoặc các phép duyệt cây cơ bản (Preorder, Inorder, Postorder).
- Phần Tự luận (thường 4-5 điểm):
- Minh họa thao tác trên cấu trúc dữ liệu: Vẽ biểu diễn của BST sau một chuỗi thao tác thêm/xóa. Minh họa các bước của một giải thuật sắp xếp trên một dãy số cho trước. Biểu diễn trạng thái của Stack/Queue sau một chuỗi thao tác.
- Viết code/hàm cài đặt cơ bản đến trung bình: Yêu cầu viết code (thường là C++ hoặc Java) cho các hàm thao tác trên danh sách liên kết (thêm, xóa, tìm kiếm), stack, queue, hoặc một phần của cây BST. Các bài toán có thể liên quan đến ứng dụng thực tế nhỏ.
- Phân tích ứng dụng đơn giản: Đưa ra một bài toán thực tế và yêu cầu sinh viên đề xuất cấu trúc dữ liệu hoặc giải thuật phù hợp nhất, kèm theo giải thích ngắn gọn.
☠️ Các môn dễ trượt nhóm ngành Khoa học Tự nhiên – Công nghệ
- Toán cao cấp A1 – 29.000đ
- Giải tích 1 – 29.000đ
- Vật lý đại cương – 29.000đ
- Hóa đại cương – 29.000đ
- Lập trình cơ bản (Python/C++) – 35.000đ
- Xác suất thống kê – 29.000đ
- Triết học Mác – Lênin – 25.000đ
—
Mẹo ôn tập đạt tín chỉ cao và “cày” GPA học bổng tại UED & UFM
Để đạt được điểm số cao trong môn CTDL & GT tại UED và UFM, bạn cần một chiến lược ôn tập thông minh, kiên trì và tập trung vào thực hành. Bộ tài liệu này sẽ là cẩm nang hữu ích cho bạn:
- Nắm vững Đề cương và theo sát bài giảng:
- Đọc kỹ đề cương môn học để xác định các chủ đề trọng tâm và mục tiêu kiến thức. UED có thể yêu cầu lý thuyết sâu hơn, trong khi UFM chú trọng ứng dụng và cài đặt.
- Ghi chép đầy đủ và hiểu rõ các ví dụ, bài tập mà giảng viên đưa ra trên lớp. Đây là nền tảng vững chắc nhất.
- Học đi đôi với hành – Code là chìa khóa:
- Không chỉ đọc lý thuyết, bạn phải thực hành lập trình thường xuyên. Tự tay cài đặt lại các cấu trúc dữ liệu (Linked List, Stack, Queue, Binary Tree, Heap, Graph) và các giải thuật (sắp xếp, tìm kiếm, đồ thị) bằng ngôn ngữ C++ hoặc Java (ngôn ngữ phổ biến ở cả hai trường).
- Đảm bảo code chạy đúng, không lỗi và có thể tối ưu nếu cần.
- Tận dụng “Tiểu luận mẫu” và “Bài tập lớn” để định hướng:
- Khi làm bài tập lớn, hãy tham khảo các mẫu sẵn có trong tài liệu. Tập trung vào cách các mẫu bài phân tích yêu cầu, thiết kế cấu trúc dữ liệu và giải thuật, cách tổ chức code và trình bày báo cáo.
- Đối với UED, chú ý cách trình bày phân tích độ phức tạp và chứng minh. Đối với UFM, tập trung vào khả năng ứng dụng thực tế và cài đặt.
- “Luyện đề” kỹ lưỡng với các đề thi mẫu:
- In các đề thi mẫu (giữa kỳ và cuối kỳ) ra giấy và làm trong điều kiện thi thật (bấm giờ, không sử dụng tài liệu).
- Sau khi làm xong, đối chiếu kỹ lưỡng với đáp án chi tiết. Tập trung vào các câu tự luận cần minh họa hoặc code, và hiểu rõ từng bước giải.
- Học từ những lỗi sai của mình. Việc này giúp bạn làm quen với áp lực thời gian và các dạng bài thường gặp trong đề thi của UED và UFM.
- Vẽ hình minh họa và theo dõi từng bước:
- Đối với các bài về cây (thêm/xóa, cân bằng) hoặc đồ thị (Dijkstra, Prim, Kruskal, BFS, DFS), việc vẽ hình và theo dõi từng bước thao tác là cực kỳ quan trọng. Nó giúp bạn hình dung rõ ràng và tránh nhầm lẫn.
- Học nhóm và trao đổi:
- Thảo luận với bạn bè về các câu hỏi khó, các lỗi sai thường gặp. Khi bạn giải thích một khái niệm cho người khác, bạn sẽ hiểu nó sâu hơn.
- Cùng nhau giải bài tập lớn, debug code, và trao đổi về các phương pháp giải quyết tối ưu.
—
Trích dẫn một phần demo tài liệu (Mô phỏng Đề thi mẫu cuối kỳ UED & UFM)
Dưới đây là một phần trích dẫn được mô phỏng theo cấu trúc của bộ tài liệu **”PDF Đề cương – Tiểu luận mẫu – Bài tập lớn – Đề thi mẫu Cấu trúc dữ liệu và Giải thuật UED & UFM năm 2025″**, giúp bạn hình dung về nội dung và cách trình bày:
TRÍCH DẪN ĐỀ MÔ TÀI LIỆU (Đề thi mẫu cuối kỳ UED & UFM)
ĐỀ THI MẪU CUỐI KỲ MÔN CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT (UED & UFM)
Thời gian: 90 phút (UED), 75 phút (UFM)
Ngày thi: 15/01/2026
Phần I: Trắc nghiệm (4.0 điểm cho UED, 5.0 điểm cho UFM)
(Chọn đáp án đúng nhất cho mỗi câu hỏi. Mỗi câu 0.5 điểm)
Câu 1 (UED & UFM): Khi nào thì một hàng đợi (Queue) được xem là đầy khi cài đặt bằng mảng tròn (circular array)?
A. Khi `front == rear`
B. Khi `(rear + 1) % MAX_SIZE == front`
C. Khi `count == 0`
D. Khi `front == 0` và `rear == MAX_SIZE – 1`
Câu 2 (UED): Cho một cây nhị phân tìm kiếm cân bằng AVL (AVL Tree). Nếu một phép thêm/xóa làm mất cân bằng tại một node, cần thực hiện phép quay nào để cân bằng lại trong trường hợp “Left-Right” (LR)?
A. Một lần quay trái (Left Rotation)
B. Một lần quay phải (Right Rotation)
C. Một lần quay trái, sau đó một lần quay phải (Left-Right Rotation)
D. Một lần quay phải, sau đó một lần quay trái (Right-Left Rotation)
Câu 3 (UFM): Phát biểu nào sau đây là đúng về danh sách liên kết đơn (Singly Linked List)?
A. Truy cập phần tử theo chỉ số (random access) có độ phức tạp $O(1)$.
B. Thêm/xóa phần tử ở đầu danh sách có độ phức tạp $O(N)$.
C. Thêm/xóa phần tử ở giữa danh sách yêu cầu duyệt qua các phần tử trước đó.
D. Không thể thực hiện tìm kiếm phần tử trong danh sách liên kết.
Câu 4 (UED & UFM): Giải thuật nào sau đây được sử dụng để tìm đường đi ngắn nhất trong đồ thị có trọng số âm (không có chu trình âm)?
A. Dijkstra’s Algorithm
B. Prim’s Algorithm
C. Kruskal’s Algorithm
D. Bellman-Ford Algorithm
…
Phần II: Tự luận (6.0 điểm cho UED, 5.0 điểm cho UFM)
Bài 1 (3.0 điểm – UED): Đồ thị và Giải thuật (Floyd-Warshall)
Cho ma trận kề trọng số của đồ thị có hướng 4 đỉnh (A, B, C, D) như sau:
A B C D
A [0, 3, ∞, 7]
B [8, 0, 2, ∞]
C [5, ∞, 0, 1]
D [2, ∞, ∞, 0]
Yêu cầu:
a. (2.0 điểm) Áp dụng giải thuật **Floyd-Warshall** để tìm đường đi ngắn nhất giữa tất cả các cặp đỉnh. Ghi lại các ma trận $D^{(k)}$ sau mỗi bước lặp $k$ (từ $k=0$ đến $k=N-1$).
b. (1.0 điểm) Từ ma trận kết quả cuối cùng, hãy chỉ ra đường đi ngắn nhất từ đỉnh `A` đến đỉnh `D` và trọng số của đường đi đó.
Bài 2 (2.0 điểm – UED & UFM): Cây tìm kiếm nhị phân (BST) và thao tác
Cho một cây BST rỗng. Thực hiện lần lượt các thao tác thêm các khóa số nguyên sau vào cây theo đúng thứ tự: `70, 40, 90, 20, 50, 80, 100, 30`.
Yêu cầu:
a. (1.0 điểm) Vẽ trạng thái của cây BST sau khi tất cả các phần tử trên được thêm vào.
b. (1.0 điểm) Viết hàm C++ `int countLeafNodes(Node* root)` để đếm số lượng node lá (node không có con) trong cây BST.
Bài 3 (1.0 điểm – UFM): Cài đặt Hàng đợi (Queue) sử dụng mảng
Yêu cầu:
a. (1.0 điểm) Viết code Java để cài đặt một lớp `Queue` sử dụng mảng tĩnh với kích thước cố định `MAX_SIZE`. Lớp này cần có các phương thức cơ bản: `enqueue()`, `dequeue()`, `isFull()`, `isEmpty()`, và `peek()`. Sử dụng cơ chế mảng tròn để tối ưu không gian.
—
ĐÁP ÁN THAM KHẢO
Phần I: Trắc nghiệm
Câu 1: B. Khi `(rear + 1) % MAX_SIZE == front`
Giải thích: Trong cài đặt Queue bằng mảng tròn, queue được xem là đầy khi chỉ số của `rear` sau khi tăng 1 (modulo MAX_SIZE) bằng với chỉ số của `front`. Điều này đảm bảo rằng có đúng một ô trống được giữ lại để phân biệt trạng thái đầy và rỗng.
Câu 2 (UED): C. Một lần quay trái, sau đó một lần quay phải (Left-Right Rotation)
Giải thích: Trường hợp mất cân bằng LR (Left-Right) xảy ra khi node bị mất cân bằng có cây con trái nặng hơn (L), và cây con trái đó lại có cây con phải nặng hơn (R). Để cân bằng lại, cần thực hiện một phép quay trái tại cây con trái, sau đó một phép quay phải tại node ban đầu.
Câu 3 (UFM): C. Thêm/xóa phần tử ở giữa danh sách yêu cầu duyệt qua các phần tử trước đó.
Giải thích:
- A sai: Truy cập ngẫu nhiên theo chỉ số trong danh sách liên kết có độ phức tạp $O(N)$ vì phải duyệt từ đầu.
- B sai: Thêm/xóa phần tử ở đầu danh sách liên kết đơn có độ phức tạp $O(1)$.
- C đúng: Để thêm/xóa một phần tử ở giữa, cần tìm đến node ngay trước vị trí cần thao tác, điều này đòi hỏi duyệt qua các phần tử.
- D sai: Có thể tìm kiếm phần tử trong danh sách liên kết bằng cách duyệt tuần tự.
Câu 4: D. Bellman-Ford Algorithm
Giải thích: Giải thuật Dijkstra chỉ hoạt động với các cạnh có trọng số không âm. Bellman-Ford là giải thuật phù hợp để tìm đường đi ngắn nhất trong đồ thị có trọng số âm, miễn là không có chu trình âm.
…
Phần II: Tự luận
Bài 1 (UED): Đồ thị và Giải thuật (Floyd-Warshall)
a. **Các ma trận $D^{(k)}$ của Floyd-Warshall:**
(Minh họa chi tiết từng bước cập nhật ma trận $D$ và $P$ (predecessor matrix) nếu có)
Ma trận $D^{(0)}$ (ma trận kề trọng số ban đầu):
A B C D
A [0, 3, ∞, 7]
B [8, 0, 2, ∞]
C [5, ∞, 0, 1]
D [2, ∞, ∞, 0]
Ma trận $D^{(1)}$ (k=A):
A B C D
A [0, 3, ∞, 7]
B [8, 0, 2, 10] (min(∞, 8+7))
C [5, 8, 0, 1] (min(∞, 5+3))
D [2, 5, ∞, 0] (min(∞, 2+3))
(Tiếp tục minh họa cho $D^{(2)}$ (k=B), $D^{(3)}$ (k=C), $D^{(4)}$ (k=D))
b. **Đường đi ngắn nhất từ A đến D:**
(Từ ma trận $D^{(N-1)}$ cuối cùng, truy vết đường đi từ $A$ đến $D$ qua ma trận $P$ (nếu có)).
Ví dụ: Nếu kết quả cuối cùng là $D(A,D) = 6$, đường đi có thể là $A \rightarrow B \rightarrow C \rightarrow D$ hoặc $A \rightarrow C \rightarrow D$. (Cần dựa vào kết quả tính toán chi tiết).
Kết quả cuối cùng cho đồ thị trên:
A B C D
A [0, 3, 5, 6]
B [7, 0, 2, 3]
C [3, 6, 0, 1]
D [2, 5, 7, 0]
Đường đi ngắn nhất từ A đến D là 6.
Đường đi cụ thể là: A → C → D (trọng số 5 + 1 = 6)
Hoặc A → B → C → D (trọng số 3 + 2 + 1 = 6)
Cả hai đường đều có trọng số 6. (Cần kiểm tra lại bằng ma trận tiền nhiệm).
Bài 2 (UED & UFM): Cây tìm kiếm nhị phân (BST) và thao tác
a. (Minh họa vẽ cây BST sau khi thêm từng phần tử)
b. **Hàm C++ `int countLeafNodes(Node* root)`:**
// C++ Code
#include <iostream>
struct Node {
int data;
Node* left;
Node* right;
Node(int val) : data(val), left(nullptr), right(nullptr) {}
};
// Hàm đếm số lượng node lá
int countLeafNodes(Node* root) {
if (root == nullptr) {
return 0; // Cây rỗng không có node lá
}
if (root->left == nullptr && root->right == nullptr) {
return 1; // Đây là node lá
}
// Đệ quy đếm node lá ở cây con trái và cây con phải
return countLeafNodes(root->left) + countLeafNodes(root->right);
}
// Hàm insert (để tạo cây test)
Node* insert(Node* root, int value) {
if (root == nullptr) {
return new Node(value);
}
if (value < root->data) {
root->left = insert(root->left, value);
} else if (value > root->data) {
root->right = insert(root->right, value);
}
return root;
}
int main() {
Node* root = nullptr;
root = insert(root, 70);
root = insert(root, 40);
root = insert(root, 90);
root = insert(root, 20);
root = insert(root, 50);
root = insert(root, 80);
root = insert(root, 100);
root = insert(root, 30);
// Cây sẽ có các node lá: 30, 80, 100
std::cout << "Number of leaf nodes: " << countLeafNodes(root) << std::endl; // Expected: 3
// Giải phóng bộ nhớ (không cần trong bài thi, nhưng nên có trong code thực tế)
// (Cần hàm xóa cây để giải phóng bộ nhớ)
return 0;
}
Bài 3 (UFM): Cài đặt Hàng đợi (Queue) sử dụng mảng
// Java Code
import java.util.NoSuchElementException;
public class MyCircularQueue {
private int[] arr;
private int front;
private int rear;
private int count;
private int capacity;
public MyCircularQueue(int size) {
capacity = size;
arr = new int[capacity];
front = -1; // -1 indicates empty queue
rear = -1; // -1 indicates empty queue
count = 0;
}
public boolean isEmpty() {
return count == 0;
}
public boolean isFull() {
return count == capacity;
}
public void enqueue(int value) {
if (isFull()) {
System.out.println("Queue is full. Cannot enqueue " + value);
return;
}
if (isEmpty()) {
front = 0; // When queue is empty, first element makes front 0
}
rear = (rear + 1) % capacity; // Move rear circularly
arr[rear] = value;
count++;
System.out.println("Enqueued: " + value);
}
public int dequeue() {
if (isEmpty()) {
System.out.println("Queue is empty. Cannot dequeue.");
throw new NoSuchElementException("Queue is empty.");
}
int dequeuedValue = arr[front];
if (front == rear) { // If only one element left
front = -1;
rear = -1;
} else {
front = (front + 1) % capacity; // Move front circularly
}
count--;
return dequeuedValue;
}
public int peek() {
if (isEmpty()) {
System.out.println("Queue is empty. No element to peek.");
throw new NoSuchElementException("Queue is empty.");
}
return arr[front];
}
public void printQueue() {
if (isEmpty()) {
System.out.println("Queue is empty.");
return;
}
System.out.print("Queue elements: ");
int i = front;
int elementsPrinted = 0;
while (elementsPrinted < count) {
System.out.print(arr[i] + " ");
i = (i + 1) % capacity;
elementsPrinted++;
}
System.out.println();
}
public static void main(String[] args) {
MyCircularQueue q = new MyCircularQueue(5); // Capacity 5
q.enqueue(10);
q.enqueue(20);
q.enqueue(30);
q.printQueue(); // Expected: 10 20 30
System.out.println("Dequeued: " + q.dequeue()); // Expected: 10
q.printQueue(); // Expected: 20 30
q.enqueue(40);
q.enqueue(50);
q.enqueue(60); // Enqueue 60, will be at arr[rear] = arr[4]
q.printQueue(); // Expected: 20 30 40 50 60
q.enqueue(70); // Queue is full. Cannot enqueue 70
q.printQueue(); // Expected: 20 30 40 50 60
System.out.println("Peek: " + q.peek()); // Expected: 20
}
}
…
—
Câu chuyện thành công – Chinh phục CTDL & GT tại UED, UFM và các trường khác
Dưới đây là 3 câu chuyện truyền cảm hứng từ các sinh viên đã xuất sắc đạt điểm cao trong môn Cấu trúc dữ liệu và Giải thuật tại UED, UFM và các trường khác, nhờ chiến lược ôn tập thông minh và tận dụng hiệu quả các tài liệu tương tự:
1. Em Bùi Văn An (UED – Khoa Công nghệ thông tin – Đạt A+) – “Thấu hiểu lý thuyết, làm chủ thuật toán nâng cao”
“An là sinh viên năm 2 Khoa CNTT, Đại học Kinh tế – Đại học Đà Nẵng. Môn CTDL & GT ở UED yêu cầu rất cao về mặt lý thuyết và khả năng phân tích các thuật toán phức tạp. Em đã dùng bộ tài liệu từ tailieuonthi.io.vn để củng cố nền tảng, đặc biệt là phần đồ thị và cây cân bằng. Em dành nhiều thời gian để giải các bài tập trong đề thi mẫu, tự tay minh họa các bước của giải thuật như Floyd-Warshall. Việc có lời giải chi tiết giúp em hiểu sâu sắc từng khái niệm. Nhờ đó, em không chỉ đạt A+ mà còn cảm thấy tự tin hơn nhiều khi tham gia các cuộc thi lập trình và thực hiện đồ án.”
2. Em Lê Trúc Mai (UFM – Khoa Công nghệ thông tin Kinh doanh – Đạt A) – “Tối ưu hóa kỹ năng code và ứng dụng thực tế”
“Mai, sinh viên năm 3 Khoa CNTT Kinh doanh, Trường Đại học Tài chính – Marketing. Em thấy môn CTDL & GT ở UFM rất chú trọng vào thực hành và ứng dụng các cấu trúc dữ liệu để giải quyết bài toán thực tế. Bộ tài liệu này cung cấp nhiều bài tập tự luận yêu cầu code và các mẫu bài tập lớn, rất phù hợp với phương pháp học của em. Em đã dùng các đề thi mẫu để luyện tập viết code nhanh, chính xác bằng Java và C++, đồng thời học cách tối ưu hóa các giải pháp. Việc có đáp án giúp em tự kiểm tra và học hỏi từ lỗi sai. Em đạt điểm A và cảm thấy rất tự tin với những kiến thức và kỹ năng lập trình đã tích lũy được.”
3. Em Nguyễn Tuấn Hùng (Đại học Ngân hàng TP.HCM – Khoa Hệ thống thông tin – Đạt B+) – “Từ loay hoay đến tự tin với cấu trúc đề”
“Hùng là sinh viên năm 2 Đại học Ngân hàng TP.HCM. Em từng khá loay hoay với môn CTDL & GT vì các bài tập thường khá phức tạp và đòi hỏi tư duy logic. Em đã sử dụng bộ tài liệu này như một cẩm nang. Em bắt đầu từ việc nắm vững các khái niệm cơ bản trong đề cương, sau đó thực hành với các bài tập trong tiểu luận mẫu và đề thi. Các đề thi mẫu, đặc biệt là phần tự luận yêu cầu code và minh họa, đã giúp em cải thiện kỹ năng lập trình và tư duy giải thuật rất nhiều. Dù chưa đạt A+, nhưng B+ là một kết quả vượt ngoài mong đợi, giúp em có động lực hơn rất nhiều cho các môn học chuyên ngành khác.”
—
Câu hỏi thường gặp (FAQ) về PDF Đề cương – Tiểu luận mẫu – Bài tập lớn – Đề thi mẫu Cấu trúc dữ liệu và Giải thuật UED & UFM
- Bộ tài liệu này có phù hợp cho sinh viên cả UED và UFM không?Có. Bộ tài liệu được biên soạn để bao quát các kiến thức cốt lõi của CTDL & GT, đồng thời có sự điều chỉnh và lựa chọn bài tập, đề thi mẫu phù hợp với phong cách giảng dạy và ra đề của cả UED (thiên về lý thuyết và phân tích sâu) và UFM (thiên về cài đặt, ứng dụng thực tế). Sinh viên có thể tập trung vào những phần phù hợp với trường mình.
- Các đề thi mẫu có đáp án chi tiết không?Có. Tất cả các đề thi mẫu (cả giữa kỳ và cuối kỳ) đều đi kèm với đáp án chi tiết cho cả phần trắc nghiệm và lời giải, minh họa từng bước, hoặc mã nguồn (nếu có) cho phần tự luận. Điều này giúp bạn không chỉ biết đáp án mà còn hiểu sâu sắc cách giải quyết vấn đề.
- Tôi có thể tải tài liệu này ở đâu?Bạn có thể truy cập trực tiếp website tailieuonthi.io.vn/on-thi-cau-truc-du-lieu-giai-thuat/. Tại đó, bạn sẽ tìm thấy thông tin chi tiết về bộ tài liệu và hướng dẫn cách tải hoặc mua.
- Tài liệu có được cập nhật cho năm học 2025 không?tailieuonthi.io.vn cam kết cập nhật tài liệu thường xuyên để đảm bảo tính thời sự và phù hợp với xu hướng ra đề thi cũng như yêu cầu học tập mới nhất cho năm 2025.
- Làm sao để tận dụng hiệu quả nhất bộ tài liệu này?Bạn nên bắt đầu bằng việc xem kỹ đề cương để nắm bắt trọng tâm kiến thức. Sau đó, kết hợp học lý thuyết với việc làm các bài tập trong tiểu luận mẫu và bài tập lớn để củng cố kỹ năng lập trình và tư duy giải thuật. Cuối cùng, sử dụng các đề thi mẫu để tự kiểm tra kiến thức dưới áp lực thời gian và học hỏi từ các lời giải chi tiết.
- Liệu việc sử dụng tài liệu này có đảm bảo tôi sẽ đạt điểm cao không?Bộ tài liệu này là một công cụ hỗ trợ ôn tập cực kỳ hiệu quả. Tuy nhiên, kết quả cuối cùng phụ thuộc vào nỗ lực, sự chăm chỉ, khả năng tiếp thu và việc thực hành thường xuyên của mỗi cá nhân. Việc ôn tập kỹ lưỡng, thực hành đều đặn và hiểu sâu kiến thức là yếu tố then chốt để đạt điểm cao.

