1. Độ phức tạp không gian của thuật toán sắp xếp trộn (Merge Sort) là gì?
A. O(1)
B. O(log n)
C. O(n)
D. O(n log n)
2. Cấu trúc dữ liệu nào sau đây phù hợp nhất để biểu diễn mối quan hệ phân cấp?
A. Mảng (Array)
B. Hàng đợi (Queue)
C. Cây (Tree)
D. Danh sách liên kết (Linked List)
3. Cấu trúc dữ liệu nào sau đây hoạt động theo nguyên tắc LIFO (Last In, First Out)?
A. Hàng đợi (Queue)
B. Danh sách liên kết (Linked List)
C. Cây (Tree)
D. Ngăn xếp (Stack)
4. Cấu trúc dữ liệu nào sau đây cho phép truy cập ngẫu nhiên đến các phần tử?
A. Hàng đợi (Queue)
B. Ngăn xếp (Stack)
C. Mảng (Array)
D. Danh sách liên kết (Linked List)
5. Độ phức tạp thời gian tốt nhất của thuật toán sắp xếp chèn (Insertion Sort) là gì?
A. O(n^2)
B. O(n log n)
C. O(n)
D. O(log n)
6. Cấu trúc dữ liệu nào sau đây thường được sử dụng để kiểm tra tính hợp lệ của dấu ngoặc trong một biểu thức?
A. Hàng đợi (Queue)
B. Ngăn xếp (Stack)
C. Cây (Tree)
D. Mảng (Array)
7. Trong cây nhị phân tìm kiếm, các nút bên trái của một nút có giá trị như thế nào so với nút đó?
A. Lớn hơn
B. Nhỏ hơn
C. Bằng
D. Lớn hơn hoặc bằng
8. Trong cấu trúc dữ liệu hàng đợi, phần tử nào được loại bỏ đầu tiên?
A. Phần tử được thêm vào cuối cùng
B. Phần tử được thêm vào đầu tiên
C. Phần tử có độ ưu tiên cao nhất
D. Phần tử ngẫu nhiên
9. Khi nào nên sử dụng thuật toán tìm kiếm nhị phân thay vì tìm kiếm tuyến tính?
A. Khi dữ liệu chưa được sắp xếp
B. Khi dữ liệu đã được sắp xếp và có thể truy cập ngẫu nhiên
C. Khi cần tìm kiếm phần tử đầu tiên
D. Khi cần tìm kiếm phần tử cuối cùng
10. Thuật toán sắp xếp nào sau đây có độ phức tạp thời gian trung bình là O(n log n)?
A. Sắp xếp nổi bọt (Bubble Sort)
B. Sắp xếp chèn (Insertion Sort)
C. Sắp xếp trộn (Merge Sort)
D. Sắp xếp chọn (Selection Sort)
11. Hoạt động nào sau đây không phải là hoạt động cơ bản trên ngăn xếp?
A. Push
B. Pop
C. Peek
D. Search
12. Ưu điểm của việc sử dụng bảng băm (hash table) là gì?
A. Tìm kiếm, chèn và xóa phần tử với độ phức tạp trung bình O(1)
B. Sắp xếp dữ liệu nhanh chóng
C. Duyệt dữ liệu theo thứ tự
D. Lưu trữ dữ liệu tuần tự
13. Ưu điểm chính của việc sử dụng danh sách liên kết so với mảng là gì?
A. Truy cập ngẫu nhiên nhanh hơn
B. Sử dụng bộ nhớ hiệu quả hơn khi kích thước không xác định trước
C. Tìm kiếm phần tử nhanh hơn
D. Dễ dàng sắp xếp hơn
14. Thuật toán nào sau đây thường được sử dụng để tìm đường đi ngắn nhất giữa hai đỉnh trong một đồ thị?
A. Sắp xếp nổi bọt (Bubble Sort)
B. Tìm kiếm nhị phân (Binary Search)
C. Thuật toán Dijkstra
D. Sắp xếp chèn (Insertion Sort)
15. Trong một cây tìm kiếm nhị phân cân bằng, chiều cao của cây có mối quan hệ như thế nào với số lượng nút (n)?
A. Tuyến tính (O(n))
B. Logarithmic (O(log n))
C. Bậc hai (O(n^2))
D. Hằng số (O(1))
16. Cấu trúc dữ liệu nào sau đây thường được sử dụng để triển khai hàng đợi ưu tiên?
A. Mảng (Array)
B. Danh sách liên kết (Linked List)
C. Cây nhị phân tìm kiếm (Binary Search Tree)
D. Heap
17. Trong cấu trúc dữ liệu đồ thị, điều gì đại diện cho một đối tượng (thực thể)?
A. Cạnh (Edge)
B. Đỉnh (Vertex)
C. Đường đi (Path)
D. Chu trình (Cycle)
18. Độ phức tạp thời gian trung bình của thuật toán sắp xếp nổi bọt (Bubble Sort) là gì?
A. O(n)
B. O(n log n)
C. O(n^2)
D. O(log n)
19. Khi nào nên sử dụng thuật toán sắp xếp nhanh (Quick Sort) thay vì sắp xếp trộn (Merge Sort)?
A. Khi cần đảm bảo độ phức tạp thời gian O(n log n) trong mọi trường hợp
B. Khi không gian bộ nhớ là một yếu tố hạn chế
C. Khi dữ liệu đã gần được sắp xếp
D. Khi cần sắp xếp các danh sách liên kết
20. Độ phức tạp thời gian của thao tác chèn vào một danh sách liên kết đơn đã sắp xếp là gì?
A. O(1)
B. O(log n)
C. O(n)
D. O(n^2)
21. Cấu trúc dữ liệu nào sau đây phù hợp nhất để triển khai chức năng ‘undo’ trong một trình soạn thảo văn bản?
A. Hàng đợi (Queue)
B. Ngăn xếp (Stack)
C. Mảng (Array)
D. Danh sách liên kết (Linked List)
22. Cấu trúc dữ liệu nào sau đây có thể được sử dụng để triển khai bộ nhớ cache?
A. Hàng đợi (Queue)
B. Ngăn xếp (Stack)
C. Bảng băm (Hash Table)
D. Danh sách liên kết (Linked List)
23. Trong cấu trúc dữ liệu đồ thị, điều gì thể hiện mối quan hệ giữa hai đỉnh?
A. Nút (Node)
B. Cạnh (Edge)
C. Cây (Tree)
D. Danh sách (List)
24. Khi nào nên sử dụng danh sách liên kết đơn thay vì danh sách liên kết đôi?
A. Khi cần duyệt danh sách theo cả hai hướng
B. Khi cần chèn hoặc xóa nút ở giữa danh sách một cách hiệu quả
C. Khi không gian bộ nhớ là một yếu tố hạn chế và chỉ cần duyệt theo một hướng
D. Khi cần truy cập ngẫu nhiên đến các phần tử
25. Thuật toán nào sau đây thường được sử dụng để tìm kiếm đường đi trong một mê cung?
A. Sắp xếp nổi bọt (Bubble Sort)
B. Tìm kiếm nhị phân (Binary Search)
C. Tìm kiếm theo chiều sâu (Depth-First Search)
D. Sắp xếp chèn (Insertion Sort)
26. Trong cây nhị phân đầy đủ, số lượng nút lá có mối quan hệ như thế nào với tổng số nút?
A. Bằng một nửa tổng số nút
B. Lớn hơn một so với một nửa tổng số nút
C. Nhỏ hơn một so với một nửa tổng số nút
D. Bằng tổng số nút
27. Thuật toán nào sau đây có thể được sử dụng để tìm kiếm một phần tử trong một cây nhị phân tìm kiếm?
A. Tìm kiếm tuyến tính (Linear Search)
B. Tìm kiếm nhị phân (Binary Search)
C. Tìm kiếm theo chiều rộng (Breadth-First Search)
D. Tìm kiếm theo chiều sâu (Depth-First Search)
28. Khi nào việc sử dụng đệ quy (recursion) có thể không phải là lựa chọn tốt nhất?
A. Khi vấn đề có thể được giải quyết một cách đơn giản bằng vòng lặp
B. Khi cần chia nhỏ vấn đề thành các bài toán con tương tự
C. Khi cần duyệt một cây hoặc đồ thị
D. Khi cần thực hiện các phép toán trên ngăn xếp
29. Thuật toán sắp xếp nào sau đây hoạt động bằng cách chia danh sách thành các danh sách con, sắp xếp các danh sách con, và sau đó trộn chúng lại?
A. Sắp xếp nổi bọt (Bubble Sort)
B. Sắp xếp chèn (Insertion Sort)
C. Sắp xếp chọn (Selection Sort)
D. Sắp xếp trộn (Merge Sort)
30. Độ phức tạp thời gian của thuật toán tìm kiếm tuyến tính trong trường hợp xấu nhất là gì?
A. O(log n)
B. O(n^2)
C. O(1)
D. O(n)
31. Độ phức tạp thời gian để tìm kiếm một phần tử trong mảng chưa sắp xếp bằng thuật toán tìm kiếm tuyến tính (Linear Search) là bao nhiêu?
A. O(n).
B. O(log n).
C. O(n log n).
D. O(n^2).
32. Độ phức tạp thời gian của thuật toán được dùng để làm gì?
A. Đánh giá thời gian chạy của thuật toán dựa trên kích thước đầu vào.
B. Đo lường dung lượng bộ nhớ mà thuật toán sử dụng.
C. Xác định độ chính xác của thuật toán.
D. Kiểm tra tính dễ đọc của mã nguồn thuật toán.
33. Thuật toán sắp xếp nào sau đây có độ phức tạp thời gian tốt nhất là O(n)?
A. Insertion Sort (Sắp xếp chèn) khi mảng đã gần như được sắp xếp.
B. Quick Sort (Sắp xếp nhanh) trong mọi trường hợp.
C. Selection Sort (Sắp xếp chọn) trong mọi trường hợp.
D. Merge Sort (Sắp xếp trộn) trong mọi trường hợp.
34. Cho đoạn code sau sử dụng C++: `std::vector vec = {10, 20, 30}; vec.push_back(40);`. Kích thước của `vec` sau khi thực hiện đoạn code trên là bao nhiêu?
A. 4.
B. 2.
C. 3.
D. Không xác định.
35. Trong C++, hàm nào được sử dụng để giải phóng bộ nhớ đã cấp phát động?
A. delete.
B. free().
C. deallocate().
D. destroy().
36. Đâu là ứng dụng thực tế của cấu trúc dữ liệu Heap?
A. Triển khai hàng đợi ưu tiên (priority queue).
B. Quản lý lịch sử duyệt web.
C. Tìm đường đi ngắn nhất giữa hai thành phố.
D. Đảo ngược một chuỗi ký tự.
37. Nhược điểm của việc sử dụng danh sách liên kết (Linked List) so với mảng (Array) là gì?
A. Truy cập phần tử chậm hơn.
B. Khó chèn và xóa các phần tử.
C. Sử dụng ít bộ nhớ hơn.
D. Khó sắp xếp các phần tử.
38. Cho đoạn code sau: `int arr[5] = {1, 2, 3, 4, 5}; int *ptr = arr;`. Giá trị của `*(ptr + 2)` là bao nhiêu?
39. Đâu là phát biểu đúng về đồ thị (Graph)?
A. Đồ thị là một tập hợp các đỉnh (vertices) và các cạnh (edges) kết nối các đỉnh này.
B. Đồ thị chỉ có thể biểu diễn các mối quan hệ tuyến tính.
C. Đồ thị luôn có một đỉnh gốc.
D. Đồ thị không thể chứa các chu trình.
40. Đâu là phát biểu đúng về cấu trúc dữ liệu?
A. Cấu trúc dữ liệu là cách tổ chức và lưu trữ dữ liệu sao cho có thể sử dụng hiệu quả.
B. Cấu trúc dữ liệu chỉ liên quan đến việc lưu trữ dữ liệu tuần tự.
C. Cấu trúc dữ liệu chỉ áp dụng cho các ngôn ngữ lập trình bậc cao.
D. Cấu trúc dữ liệu không ảnh hưởng đến hiệu suất của thuật toán.
41. Trong cấu trúc dữ liệu đồ thị, thuật toán nào sau đây thường được sử dụng để duyệt theo chiều sâu?
A. Depth-First Search (DFS).
B. Breadth-First Search (BFS).
C. Binary Search.
D. Linear Search.
42. Thuật toán sắp xếp nào sau đây có độ phức tạp thời gian trung bình là O(n log n)?
A. Merge Sort (Sắp xếp trộn).
B. Bubble Sort (Sắp xếp nổi bọt).
C. Insertion Sort (Sắp xếp chèn).
D. Selection Sort (Sắp xếp chọn).
43. Ưu điểm chính của việc sử dụng hash table (bảng băm) là gì?
A. Tìm kiếm, chèn và xóa các phần tử trong thời gian trung bình là O(1).
B. Sắp xếp các phần tử trong thời gian tuyến tính.
C. Lưu trữ dữ liệu theo thứ tự đến trước phục vụ trước.
D. Lưu trữ dữ liệu theo thứ tự đến sau phục vụ trước.
44. Cây (Tree) là gì?
A. Một cấu trúc dữ liệu phân cấp bao gồm các nút và các cạnh.
B. Một cấu trúc dữ liệu tuyến tính trong đó mỗi phần tử trỏ đến phần tử tiếp theo.
C. Một cấu trúc dữ liệu lưu trữ các phần tử theo thứ tự đến trước phục vụ trước.
D. Một cấu trúc dữ liệu lưu trữ các phần tử theo thứ tự đến sau phục vụ trước.
45. Trong cấu trúc dữ liệu đồ thị, thuật toán nào sau đây thường được sử dụng để duyệt theo chiều rộng?
A. Breadth-First Search (BFS).
B. Depth-First Search (DFS).
C. Binary Search.
D. Linear Search.
46. Cấu trúc dữ liệu nào sau đây hoạt động theo nguyên tắc FIFO (First In, First Out)?
A. Queue (Hàng đợi).
B. Stack (Ngăn xếp).
C. Linked List (Danh sách liên kết).
D. Tree (Cây).
47. Sự khác biệt chính giữa mảng (Array) và danh sách liên kết (Linked List) là gì?
A. Mảng có kích thước cố định, trong khi danh sách liên kết có thể thay đổi kích thước động.
B. Mảng chỉ có thể lưu trữ các số nguyên, trong khi danh sách liên kết có thể lưu trữ bất kỳ kiểu dữ liệu nào.
C. Mảng cho phép truy cập ngẫu nhiên, trong khi danh sách liên kết chỉ cho phép truy cập tuần tự.
D. Mảng sử dụng nhiều bộ nhớ hơn danh sách liên kết.
48. Thuật toán là gì?
A. Một tập hợp các hướng dẫn rõ ràng để giải quyết một vấn đề.
B. Một ngôn ngữ lập trình cụ thể.
C. Một phần mềm dùng để quản lý dữ liệu.
D. Một loại phần cứng máy tính.
49. Đâu là ứng dụng thực tế của cấu trúc dữ liệu Queue?
A. Xử lý các yêu cầu in trong một máy in.
B. Đảo ngược một chuỗi ký tự.
C. Tính toán biểu thức số học.
D. Tìm kiếm một phần tử trong một mảng đã sắp xếp.
50. Ứng dụng phổ biến của cây nhị phân tìm kiếm (Binary Search Tree) là gì?
A. Tìm kiếm, chèn và xóa các phần tử một cách hiệu quả.
B. Sắp xếp các phần tử trong thời gian tuyến tính.
C. Lưu trữ dữ liệu theo thứ tự đến trước phục vụ trước.
D. Lưu trữ dữ liệu theo thứ tự đến sau phục vụ trước.
51. Đâu là ứng dụng thực tế của cấu trúc dữ liệu Stack?
A. Quản lý lịch sử duyệt web.
B. In tài liệu theo thứ tự ưu tiên.
C. Tìm đường đi ngắn nhất giữa hai thành phố.
D. Lưu trữ thông tin về các sản phẩm trong một cửa hàng.
52. Hash table (Bảng băm) là gì?
A. Một cấu trúc dữ liệu sử dụng hàm băm để ánh xạ các khóa tới các vị trí trong một mảng.
B. Một cấu trúc dữ liệu lưu trữ các phần tử theo thứ tự đến trước phục vụ trước.
C. Một cấu trúc dữ liệu lưu trữ các phần tử theo thứ tự đến sau phục vụ trước.
D. Một cấu trúc dữ liệu phân cấp bao gồm các nút và các cạnh.
53. Cấu trúc dữ liệu nào sau đây hoạt động theo nguyên tắc LIFO (Last In, First Out)?
A. Stack (Ngăn xếp).
B. Queue (Hàng đợi).
C. Linked List (Danh sách liên kết).
D. Tree (Cây).
54. Khi nào nên sử dụng cấu trúc dữ liệu Heap?
A. Khi cần tìm phần tử lớn nhất hoặc nhỏ nhất một cách nhanh chóng.
B. Khi cần sắp xếp một mảng trong thời gian tuyến tính.
C. Khi cần lưu trữ dữ liệu theo thứ tự đến trước phục vụ trước.
D. Khi cần lưu trữ dữ liệu theo thứ tự đến sau phục vụ trước.
55. Trong C++, hàm nào được sử dụng để cấp phát bộ nhớ động?
A. new.
B. malloc().
C. allocate().
D. create().
56. Độ phức tạp thời gian để tìm kiếm một phần tử trong mảng đã sắp xếp bằng thuật toán tìm kiếm nhị phân (Binary Search) là bao nhiêu?
A. O(log n).
B. O(n).
C. O(n log n).
D. O(n^2).
57. Sự khác biệt chính giữa Stack và Queue là gì?
A. Stack hoạt động theo nguyên tắc LIFO, trong khi Queue hoạt động theo nguyên tắc FIFO.
B. Stack có kích thước cố định, trong khi Queue có thể thay đổi kích thước động.
C. Stack chỉ có thể lưu trữ các số nguyên, trong khi Queue có thể lưu trữ bất kỳ kiểu dữ liệu nào.
D. Stack cho phép truy cập ngẫu nhiên, trong khi Queue chỉ cho phép truy cập tuần tự.
58. Ưu điểm chính của việc sử dụng cấu trúc dữ liệu phù hợp là gì?
A. Tăng hiệu suất của thuật toán và giảm tài nguyên sử dụng.
B. Làm cho mã nguồn dễ đọc hơn.
C. Giảm kích thước của tệp thực thi.
D. Tăng tính bảo mật của dữ liệu.
59. Ưu điểm của việc sử dụng danh sách liên kết (Linked List) so với mảng (Array) là gì?
A. Dễ dàng chèn và xóa các phần tử ở giữa danh sách.
B. Truy cập phần tử nhanh hơn.
C. Sử dụng ít bộ nhớ hơn.
D. Dễ dàng sắp xếp các phần tử.
60. Thuật toán nào sau đây được sử dụng để tìm đường đi ngắn nhất giữa hai đỉnh trong một đồ thị?
A. Dijkstra’s algorithm.
B. Bubble Sort.
C. Linear Search.
D. Binary Search.
61. Trong các cấu trúc dữ liệu sau, cấu trúc nào là tuyến tính?
A. Cây (Tree)
B. Đồ thị (Graph)
C. Mảng (Array)
D. Heap
62. Sự khác biệt chính giữa danh sách liên kết đơn (singly linked list) và danh sách liên kết đôi (doubly linked list) là gì?
A. Danh sách liên kết đơn có thể truy cập phần tử ngẫu nhiên, danh sách liên kết đôi thì không.
B. Danh sách liên kết đôi có thể duyệt theo cả hai hướng, danh sách liên kết đơn chỉ có thể duyệt theo một hướng.
C. Danh sách liên kết đơn sử dụng ít bộ nhớ hơn danh sách liên kết đôi.
D. Danh sách liên kết đôi nhanh hơn trong việc chèn và xóa phần tử.
63. Thuật toán tìm kiếm nhị phân (binary search) hoạt động hiệu quả nhất trên loại dữ liệu nào?
A. Dữ liệu chưa được sắp xếp.
B. Dữ liệu đã được sắp xếp.
C. Dữ liệu có kích thước nhỏ.
D. Dữ liệu là số nguyên.
64. Độ phức tạp thời gian nào sau đây thường được xem là hiệu quả nhất cho một thuật toán?
A. O(n^2)
B. O(log n)
C. O(2^n)
D. O(n!)
65. Khi nào nên sử dụng thuật toán tìm kiếm theo chiều sâu (depth-first search – DFS)?
A. Khi cần tìm đường đi ngắn nhất trong một đồ thị.
B. Khi cần duyệt qua tất cả các nút của một đồ thị theo thứ tự gần nút nguồn nhất.
C. Khi cần kiểm tra xem một đồ thị có chứa chu trình hay không.
D. Khi cần tìm kiếm một phần tử cụ thể trong một mảng đã được sắp xếp.
66. Cấu trúc dữ liệu nào sau đây phù hợp nhất để biểu diễn mối quan hệ phân cấp?
A. Mảng (Array)
B. Danh sách liên kết (Linked List)
C. Cây (Tree)
D. Hàng đợi (Queue)
67. Ưu điểm của việc sử dụng danh sách liên kết so với mảng là gì?
A. Truy cập phần tử nhanh hơn.
B. Sử dụng bộ nhớ hiệu quả hơn khi kích thước dữ liệu thay đổi.
C. Dễ dàng sắp xếp dữ liệu hơn.
D. Tìm kiếm phần tử nhanh hơn.
68. Phát biểu nào sau đây đúng về cây tìm kiếm nhị phân (binary search tree – BST)?
A. Tất cả các nút bên trái của một nút đều lớn hơn nút đó.
B. Tất cả các nút bên phải của một nút đều nhỏ hơn nút đó.
C. Tất cả các nút bên trái của một nút đều nhỏ hơn nút đó.
D. Cây tìm kiếm nhị phân luôn là cây cân bằng.
69. Trong các cấu trúc dữ liệu sau, cấu trúc nào cho phép chèn và xóa phần tử ở cả hai đầu với độ phức tạp O(1)?
A. Mảng (Array)
B. Danh sách liên kết đơn (Singly Linked List)
C. Hàng đợi (Queue)
D. Deque (Double-ended Queue)
70. Cấu trúc dữ liệu nào sau đây thường được sử dụng để triển khai các thuật toán tìm đường đi ngắn nhất trong đồ thị?
A. Mảng (Array)
B. Hàng đợi (Queue)
C. Heap (ví dụ: Binary Heap)
D. Ngăn xếp (Stack)
71. Trong thuật toán Dijkstra, cấu trúc dữ liệu nào thường được sử dụng để lưu trữ khoảng cách từ nút nguồn đến các nút khác?
A. Mảng (Array)
B. Danh sách liên kết (Linked List)
C. Hàng đợi (Queue)
D. Ngăn xếp (Stack)
72. Khi nào nên sử dụng thuật toán tìm kiếm theo chiều rộng (breadth-first search – BFS)?
A. Khi cần tìm đường đi ngắn nhất trong một đồ thị không trọng số.
B. Khi cần tìm đường đi ngắn nhất trong một đồ thị có trọng số.
C. Khi cần tìm kiếm một phần tử cụ thể trong một cây đã được sắp xếp.
D. Khi cần duyệt qua tất cả các nút của một đồ thị theo thứ tự độ sâu.
73. Khi nào nên sử dụng cấu trúc dữ liệu ngăn xếp (stack)?
A. Khi cần truy cập ngẫu nhiên các phần tử.
B. Khi cần lưu trữ dữ liệu theo thứ tự đến trước phục vụ trước (FIFO).
C. Khi cần lưu trữ dữ liệu theo thứ tự đến sau phục vụ trước (LIFO).
D. Khi cần tìm kiếm phần tử nhanh chóng.
74. Trong các thuật toán sắp xếp sau, thuật toán nào thường được sử dụng để sắp xếp các đối tượng lớn vì nó có thể được thực hiện tại chỗ (in-place)?
A. Merge Sort
B. Quick Sort
C. Radix Sort
D. Counting Sort
75. Trong ngữ cảnh của cấu trúc dữ liệu và giải thuật, ‘độ phức tạp’ (complexity) đề cập đến điều gì?
A. Mức độ khó hiểu của code.
B. Lượng tài nguyên (thời gian, bộ nhớ) cần thiết để thực thi một thuật toán.
C. Số lượng dòng code trong một chương trình.
D. Số lượng lỗi (bugs) trong một chương trình.
76. Cấu trúc dữ liệu nào sau đây thường được sử dụng để triển khai hàng đợi (queue)?
A. Mảng (Array)
B. Ngăn xếp (Stack)
C. Danh sách liên kết (Linked List)
D. Cả mảng và danh sách liên kết.
77. Ưu điểm chính của việc sử dụng cấu trúc dữ liệu là gì?
A. Giảm dung lượng bộ nhớ sử dụng.
B. Tăng tốc độ truy cập và xử lý dữ liệu.
C. Làm cho code dễ đọc hơn.
D. Cả ba đáp án trên.
78. Khi nào nên sử dụng thuật toán sắp xếp chèn (insertion sort)?
A. Khi cần sắp xếp một lượng lớn dữ liệu.
B. Khi dữ liệu gần như đã được sắp xếp.
C. Khi cần sắp xếp dữ liệu ngẫu nhiên.
D. Khi cần sắp xếp dữ liệu có kích thước lớn và không đủ bộ nhớ để sử dụng các thuật toán sắp xếp khác.
79. Trong phân tích thuật toán, ký hiệu ‘Big O’ dùng để biểu diễn điều gì?
A. Thời gian chạy trung bình của thuật toán.
B. Thời gian chạy tốt nhất của thuật toán.
C. Thời gian chạy xấu nhất của thuật toán.
D. Thời gian chạy thực tế của thuật toán.
80. Trong các cấu trúc dữ liệu sau, cấu trúc nào cho phép truy cập ngẫu nhiên (random access) các phần tử với độ phức tạp O(1)?
A. Danh sách liên kết (Linked List)
B. Hàng đợi (Queue)
C. Mảng (Array)
D. Ngăn xếp (Stack)
81. Trong cấu trúc dữ liệu cây, thuật ngữ ‘lá’ (leaf) đề cập đến điều gì?
A. Nút gốc của cây.
B. Nút có nhiều con nhất.
C. Nút không có con.
D. Nút nằm ở giữa cây.
82. Trong cấu trúc dữ liệu, phát biểu nào sau đây mô tả đúng nhất về khái niệm ‘ADT’ (Abstract Data Type)?
A. ADT chỉ định cách dữ liệu được lưu trữ trong bộ nhớ.
B. ADT là một kiểu dữ liệu được định nghĩa bởi các thao tác có thể thực hiện trên nó, không quan tâm đến việc triển khai cụ thể.
C. ADT là một kiểu dữ liệu cơ bản như integer hoặc string.
D. ADT là một thư viện chứa các hàm toán học.
83. Cấu trúc dữ liệu nào sau đây thường được sử dụng để triển khai thuật toán Huffman coding?
A. Mảng (Array)
B. Danh sách liên kết (Linked List)
C. Cây (Tree)
D. Heap (ví dụ: Binary Heap)
84. Khi nào nên sử dụng bảng băm (hash table)?
A. Khi cần truy cập các phần tử theo thứ tự.
B. Khi cần tìm kiếm, chèn và xóa phần tử với độ phức tạp trung bình là O(1).
C. Khi cần sắp xếp dữ liệu.
D. Khi cần lưu trữ dữ liệu theo thứ tự đến sau phục vụ trước (LIFO).
85. Trong các thuật toán sắp xếp sau, thuật toán nào có độ phức tạp trung bình là O(n log n)?
A. Bubble Sort
B. Insertion Sort
C. Merge Sort
D. Selection Sort
86. Nhược điểm chính của việc sử dụng danh sách liên kết so với mảng là gì?
A. Khó khăn hơn trong việc chèn và xóa phần tử.
B. Sử dụng nhiều bộ nhớ hơn cho mỗi phần tử.
C. Không thể truy cập ngẫu nhiên các phần tử.
D. Khó khăn hơn trong việc sắp xếp dữ liệu.
87. Trong các cấu trúc dữ liệu sau, cấu trúc nào thường được sử dụng để triển khai bộ nhớ cache?
A. Mảng (Array)
B. Danh sách liên kết (Linked List)
C. Bảng băm (Hash Table)
D. Cây (Tree)
88. Khi nào việc sử dụng đệ quy (recursion) có thể không phải là lựa chọn tốt nhất?
A. Khi cần giải quyết một vấn đề có cấu trúc đệ quy tự nhiên.
B. Khi cần viết code ngắn gọn và dễ hiểu.
C. Khi độ sâu đệ quy quá lớn, có thể gây tràn bộ nhớ stack.
D. Khi cần tối ưu hóa hiệu suất.
89. Thao tác nào sau đây không phải là một thao tác cơ bản thường được thực hiện trên cấu trúc dữ liệu?
A. Tìm kiếm (Searching)
B. Sắp xếp (Sorting)
C. Sao lưu (Backup)
D. Chèn (Insertion)
90. Độ phức tạp không gian (space complexity) của một thuật toán thể hiện điều gì?
A. Thời gian chạy của thuật toán.
B. Lượng bộ nhớ tối đa mà thuật toán cần để thực thi.
C. Số lượng dòng code trong thuật toán.
D. Độ phức tạp trong việc hiểu thuật toán.
91. Phương pháp nào sau đây được sử dụng để giải quyết xung đột trong bảng băm (Hash Table)?
A. Sắp xếp chèn (Insertion Sort)
B. Tìm kiếm nhị phân (Binary Search)
C. Chuỗi liên kết (Chaining)
D. Đệ quy (Recursion)
92. Thuật toán nào sau đây có thể được sử dụng để tìm đường đi ngắn nhất giữa hai nút trong một đồ thị có trọng số không âm?
A. Breadth-First Search (BFS)
B. Depth-First Search (DFS)
C. Dijkstra’s Algorithm
D. Binary Search
93. Độ phức tạp không gian của thuật toán sắp xếp trộn (Merge Sort) là bao nhiêu?
A. O(1)
B. O(log n)
C. O(n)
D. O(n log n)
94. Một ứng dụng thực tế của cấu trúc dữ liệu đồ thị (Graph) là gì?
A. Quản lý danh sách các bài hát trong một trình phát nhạc.
B. Biểu diễn mạng lưới giao thông đường bộ.
C. Lưu trữ thông tin về các nhân viên trong một công ty theo thứ bậc.
D. Kiểm tra tính hợp lệ của biểu thức toán học.
95. Cấu trúc dữ liệu nào sau đây hoạt động theo nguyên tắc LIFO (Last In, First Out)?
A. Queue (Hàng đợi)
B. Linked List (Danh sách liên kết)
C. Stack (Ngăn xếp)
D. Tree (Cây)
96. Trong cây nhị phân (Binary Tree), một nút được coi là nút lá (leaf node) khi nào?
A. Khi nút đó là nút gốc.
B. Khi nút đó có cả cây con bên trái và cây con bên phải.
C. Khi nút đó không có cây con nào.
D. Khi nút đó chỉ có một cây con.
97. Độ phức tạp thời gian của thuật toán tìm kiếm tuyến tính (Linear Search) trong trường hợp xấu nhất là bao nhiêu?
A. O(log n)
B. O(n^2)
C. O(n)
D. O(1)
98. Thuật toán sắp xếp nào sau đây hoạt động bằng cách chia mảng thành các mảng con, sắp xếp các mảng con này và sau đó trộn chúng lại?
A. Bubble Sort (Sắp xếp nổi bọt)
B. Insertion Sort (Sắp xếp chèn)
C. Merge Sort (Sắp xếp trộn)
D. Selection Sort (Sắp xếp chọn)
99. Thuật toán sắp xếp nào sau đây có độ phức tạp thời gian trung bình là O(n log n)?
A. Bubble Sort (Sắp xếp nổi bọt)
B. Insertion Sort (Sắp xếp chèn)
C. Selection Sort (Sắp xếp chọn)
D. Merge Sort (Sắp xếp trộn)
100. Phương pháp nào sau đây được sử dụng để duyệt cây theo thứ tự mà nút gốc được thăm trước, sau đó là cây con bên trái và cuối cùng là cây con bên phải?
A. Inorder Traversal (Duyệt trung thứ tự)
B. Postorder Traversal (Duyệt hậu thứ tự)
C. Preorder Traversal (Duyệt tiền thứ tự)
D. Breadth-First Traversal (Duyệt theo chiều rộng)
101. Trong thuật toán tìm kiếm nhị phân (Binary Search), điều kiện tiên quyết là gì?
A. Dữ liệu phải được sắp xếp.
B. Dữ liệu phải được lưu trữ trong một danh sách liên kết.
C. Dữ liệu phải là số nguyên.
D. Dữ liệu phải là duy nhất.
102. Cấu trúc dữ liệu nào sau đây thích hợp nhất để kiểm tra xem một biểu thức toán học có cân bằng dấu ngoặc hay không?
A. Queue (Hàng đợi)
B. Linked List (Danh sách liên kết)
C. Stack (Ngăn xếp)
D. Tree (Cây)
103. Độ phức tạp thời gian trung bình của thao tác chèn (insertion) trong bảng băm (Hash Table) là bao nhiêu khi sử dụng phương pháp chuỗi liên kết (chaining)?
A. O(n)
B. O(log n)
C. O(1)
D. O(n log n)
104. Khi nào nên sử dụng thuật toán sắp xếp chọn (Selection Sort) thay vì các thuật toán sắp xếp khác?
A. Khi dữ liệu đã gần được sắp xếp.
B. Khi cần độ ổn định cao.
C. Khi số lượng phần tử cần sắp xếp nhỏ và việc đơn giản được ưu tiên.
D. Khi cần hiệu suất tốt nhất.
105. Khi nào nên sử dụng cấu trúc dữ liệu đồ thị (Graph) thay vì cây (Tree)?
A. Khi cần biểu diễn dữ liệu có cấu trúc phân cấp rõ ràng.
B. Khi cần tìm kiếm phần tử nhanh chóng.
C. Khi mối quan hệ giữa các phần tử là phức tạp và có thể có chu trình.
D. Khi cần lưu trữ dữ liệu theo thứ tự tuyến tính.
106. Khi nào nên sử dụng danh sách liên kết đôi (Doubly Linked List) thay vì danh sách liên kết đơn (Singly Linked List)?
A. Khi cần tiết kiệm bộ nhớ.
B. Khi cần duyệt danh sách theo cả hai chiều.
C. Khi cần chèn và xóa phần tử ở đầu danh sách nhanh chóng.
D. Khi cần tìm kiếm phần tử nhanh chóng.
107. Trong cấu trúc dữ liệu cây, độ cao của một nút được định nghĩa là gì?
A. Số lượng nút trên đường đi dài nhất từ nút đó đến nút gốc.
B. Số lượng nút trên đường đi ngắn nhất từ nút đó đến nút gốc.
C. Số lượng nút trên đường đi dài nhất từ nút đó đến một nút lá.
D. Số lượng nút trên đường đi ngắn nhất từ nút đó đến một nút lá.
108. Khi nào thì việc sử dụng đệ quy (recursion) trong giải thuật nên được cân nhắc kỹ lưỡng?
A. Khi cần viết code ngắn gọn và dễ hiểu.
B. Khi cần hiệu suất cao nhất.
C. Khi độ sâu đệ quy có thể rất lớn, gây ra tràn stack.
D. Khi giải thuật không thể được biểu diễn bằng vòng lặp.
109. Trong thuật toán tìm kiếm theo chiều rộng (Breadth-First Search), cấu trúc dữ liệu nào sau đây được sử dụng?
A. Stack (Ngăn xếp)
B. Queue (Hàng đợi)
C. Tree (Cây)
D. Graph (Đồ thị)
110. Trong cây nhị phân tìm kiếm (Binary Search Tree), thao tác nào sau đây có độ phức tạp thời gian trung bình là O(log n)?
A. Duyệt cây theo thứ tự trước (Preorder Traversal)
B. Duyệt cây theo thứ tự sau (Postorder Traversal)
C. Tìm kiếm một phần tử
D. Duyệt cây theo chiều rộng (Breadth-First Traversal)
111. Ưu điểm chính của việc sử dụng danh sách liên kết (Linked List) so với mảng (Array) là gì?
A. Truy cập ngẫu nhiên nhanh hơn
B. Sử dụng bộ nhớ hiệu quả hơn khi kích thước không xác định trước
C. Tìm kiếm phần tử nhanh hơn
D. Dễ dàng triển khai hơn
112. Ưu điểm của việc sử dụng bảng băm (Hash Table) là gì?
A. Duyệt các phần tử theo thứ tự đã sắp xếp.
B. Truy cập phần tử nhanh chóng (thường là O(1)).
C. Sử dụng bộ nhớ hiệu quả hơn so với mảng.
D. Dễ dàng triển khai hơn so với danh sách liên kết.
113. Ưu điểm chính của việc sử dụng cây (Tree) so với danh sách liên kết (Linked List) là gì khi tìm kiếm?
A. Cây dễ triển khai hơn.
B. Cây yêu cầu ít bộ nhớ hơn.
C. Cây cho phép tìm kiếm nhanh hơn, đặc biệt là cây tìm kiếm nhị phân.
D. Cây hỗ trợ chèn và xóa phần tử nhanh hơn.
114. Một thuật toán được gọi là ổn định (stable) khi sắp xếp một mảng các phần tử có khóa trùng nhau, nếu điều gì xảy ra?
A. Các phần tử có khóa trùng nhau được giữ nguyên vị trí tương đối của chúng trong mảng đã sắp xếp.
B. Các phần tử có khóa trùng nhau được di chuyển đến đầu mảng.
C. Các phần tử có khóa trùng nhau được di chuyển đến cuối mảng.
D. Thứ tự của các phần tử có khóa trùng nhau không được xác định.
115. Độ phức tạp thời gian tốt nhất của thuật toán sắp xếp chèn (Insertion Sort) là bao nhiêu?
A. O(n^2)
B. O(n log n)
C. O(n)
D. O(log n)
116. Cấu trúc dữ liệu nào sau đây cho phép truy cập ngẫu nhiên (random access) đến các phần tử với độ phức tạp thời gian O(1)?
A. Linked List (Danh sách liên kết)
B. Stack (Ngăn xếp)
C. Queue (Hàng đợi)
D. Array (Mảng)
117. Độ phức tạp thời gian trong trường hợp xấu nhất của thuật toán tìm kiếm nhị phân (Binary Search) là gì?
A. O(1)
B. O(n)
C. O(log n)
D. O(n log n)
118. Cấu trúc dữ liệu nào sau đây thường được sử dụng để triển khai hàng đợi (Queue)?
A. Stack (Ngăn xếp)
B. Linked List (Danh sách liên kết)
C. Tree (Cây)
D. Graph (Đồ thị)
119. Điểm khác biệt chính giữa Stack và Queue là gì?
A. Stack sử dụng bộ nhớ nhiều hơn Queue.
B. Stack hoạt động theo nguyên tắc LIFO (Last In, First Out), còn Queue hoạt động theo nguyên tắc FIFO (First In, First Out).
C. Stack chỉ có thể chứa số nguyên, còn Queue có thể chứa mọi kiểu dữ liệu.
D. Stack nhanh hơn Queue.
120. Một ứng dụng thực tế của cấu trúc dữ liệu hàng đợi (Queue) là gì?
A. Quản lý lịch sử duyệt web.
B. In tài liệu trên máy in.
C. Kiểm tra tính cân bằng của dấu ngoặc.
D. Tìm kiếm đường đi ngắn nhất trong một đồ thị.
121. Ưu điểm chính của việc sử dụng cấu trúc dữ liệu là gì?
A. Làm cho code dài hơn.
B. Tăng mức sử dụng bộ nhớ.
C. Cho phép tổ chức và quản lý dữ liệu hiệu quả hơn.
D. Giảm tính bảo mật của dữ liệu.
122. Khi nào nên sử dụng danh sách liên kết thay vì mảng?
A. Khi cần truy cập ngẫu nhiên các phần tử.
B. Khi biết kích thước của danh sách trước.
C. Khi cần chèn và xóa các phần tử thường xuyên ở giữa danh sách.
D. Khi cần sử dụng ít bộ nhớ hơn.
123. Ký hiệu Big O được sử dụng để biểu diễn điều gì?
A. Độ phức tạp trung bình của thuật toán.
B. Độ phức tạp tốt nhất của thuật toán.
C. Độ phức tạp xấu nhất của thuật toán.
D. Độ phức tạp chính xác của thuật toán.
124. Ký hiệu nào biểu thị độ phức tạp thời gian không đổi?
A. O(n)
B. O(log n)
C. O(1)
D. O(n log n)
125. Độ phức tạp thời gian của thuật toán được định nghĩa như thế nào?
A. Lượng bộ nhớ mà thuật toán sử dụng.
B. Thời gian cần thiết để thuật toán chạy, biểu diễn theo kích thước đầu vào.
C. Số dòng code trong thuật toán.
D. Độ khó của việc hiểu code của thuật toán.
126. Ưu điểm chính của việc sử dụng bảng băm (Hash Table) là gì?
A. Truy cập các phần tử theo thứ tự.
B. Truy cập ngẫu nhiên các phần tử với độ phức tạp O(1) trung bình.
C. Sắp xếp các phần tử.
D. Lưu trữ một lượng lớn dữ liệu với mức sử dụng bộ nhớ tối thiểu.
127. Thuật toán là gì?
A. Một loại phần cứng máy tính.
B. Một tập hợp các hướng dẫn rõ ràng để giải quyết một vấn đề cụ thể.
C. Một ngôn ngữ lập trình.
D. Một hệ điều hành.
128. Ứng dụng nào sau đây phù hợp với cấu trúc dữ liệu hàng đợi (Queue)?
A. Đánh giá biểu thức hậu tố.
B. Quản lý hàng đợi in.
C. Duyệt cây theo chiều sâu.
D. Tìm kiếm nhị phân.
129. Điều gì xảy ra khi có sự va chạm (collision) trong bảng băm (Hash Table)?
A. Phần tử mới ghi đè lên phần tử cũ.
B. Một ngoại lệ được ném ra.
C. Các kỹ thuật giải quyết va chạm như xâu chuỗi riêng biệt (separate chaining) hoặc thăm dò tuyến tính (linear probing) được sử dụng.
D. Bảng băm tự động tăng kích thước.
130. Ký hiệu nào biểu thị độ phức tạp thời gian tuyến tính?
A. O(1)
B. O(log n)
C. O(n)
D. O(n^2)
131. Độ phức tạp không gian của thuật toán được định nghĩa như thế nào?
A. Thời gian cần thiết để thuật toán chạy.
B. Lượng bộ nhớ mà thuật toán cần để thực thi, biểu diễn theo kích thước đầu vào.
C. Số lượng phép toán mà thuật toán thực hiện.
D. Số lượng biến được sử dụng trong thuật toán.
132. Nhược điểm chính của việc sử dụng cấu trúc dữ liệu là gì?
A. Đòi hỏi ít bộ nhớ hơn.
B. Có thể phức tạp để triển khai và gỡ lỗi.
C. Làm cho code dễ đọc hơn.
D. Giảm thời gian thực hiện.
133. Hàm băm (Hash Function) tốt cần có những đặc điểm gì?
A. Luôn tạo ra cùng một giá trị băm cho các khóa khác nhau.
B. Phân phối các khóa đồng đều trên bảng băm để giảm thiểu va chạm.
C. Tạo ra các giá trị băm rất lớn.
D. Phức tạp để tính toán.
134. Khi nào nên sử dụng mảng thay vì danh sách liên kết?
A. Khi cần chèn và xóa các phần tử thường xuyên ở giữa danh sách.
B. Khi cần truy cập ngẫu nhiên các phần tử.
C. Khi không biết kích thước của danh sách trước.
D. Khi cần sử dụng nhiều bộ nhớ hơn.
135. Thuật toán duyệt đồ thị theo chiều sâu (Depth-First Search – DFS) hoạt động như thế nào?
A. Duyệt các nút lân cận trước khi duyệt các nút ở mức sâu hơn.
B. Duyệt các nút theo thứ tự ngẫu nhiên.
C. Duyệt các nút theo chiều sâu trước khi duyệt các nút lân cận.
D. Chỉ duyệt các nút có cạnh đến nút bắt đầu.
136. Thuật toán duyệt đồ thị theo chiều rộng (Breadth-First Search – BFS) hoạt động như thế nào?
A. Duyệt các nút theo chiều sâu trước khi duyệt các nút lân cận.
B. Duyệt các nút lân cận trước khi duyệt các nút ở mức sâu hơn.
C. Duyệt các nút theo thứ tự ngẫu nhiên.
D. Chỉ duyệt các nút có cạnh đến nút bắt đầu.
137. Đồ thị (Graph) là gì?
A. Một cấu trúc dữ liệu tuyến tính.
B. Một tập hợp các nút (đỉnh) và các cạnh kết nối các nút này.
C. Một loại cây.
D. Một cấu trúc dữ liệu chỉ có một nút.
138. Đâu là đặc điểm của cây nhị phân tìm kiếm (Binary Search Tree – BST)?
A. Mỗi nút có thể có nhiều hơn hai con.
B. Giá trị của nút con bên trái lớn hơn giá trị của nút cha.
C. Giá trị của nút con bên phải nhỏ hơn giá trị của nút cha.
D. Giá trị của tất cả các nút con bên trái nhỏ hơn giá trị của nút cha và giá trị của tất cả các nút con bên phải lớn hơn giá trị của nút cha.
139. Độ phức tạp thời gian để tìm kiếm một phần tử trong cây nhị phân tìm kiếm cân bằng (Balanced Binary Search Tree) là gì?
A. O(n)
B. O(1)
C. O(log n)
D. O(n^2)
140. Hàng đợi (Queue) hoạt động theo nguyên tắc nào?
A. LIFO (Last In, First Out)
B. FIFO (First In, First Out)
C. Random Access
D. Priority Queue
141. Đâu là phát biểu đúng về cấu trúc dữ liệu?
A. Cấu trúc dữ liệu chỉ là cách tổ chức dữ liệu trong bộ nhớ ngoài.
B. Cấu trúc dữ liệu là một phương pháp để lưu trữ và tổ chức dữ liệu một cách hiệu quả để dễ dàng truy cập và sửa đổi.
C. Cấu trúc dữ liệu chỉ liên quan đến việc lưu trữ dữ liệu tuần tự.
D. Cấu trúc dữ liệu không ảnh hưởng đến hiệu suất của thuật toán.
142. Ứng dụng nào sau đây phù hợp với thuật toán duyệt đồ thị theo chiều rộng (BFS)?
A. Tìm đường đi giữa hai nút trong một đồ thị.
B. Tìm thành phần liên thông trong một đồ thị.
C. Tìm đường đi ngắn nhất không trọng số trong một đồ thị.
D. Sắp xếp các nút của một đồ thị theo thứ tự tô pô.
143. Đâu là ví dụ về cấu trúc dữ liệu tuyến tính?
A. Cây (Tree)
B. Đồ thị (Graph)
C. Mảng (Array)
D. Bảng băm (Hash Table)
144. Ứng dụng nào sau đây phù hợp với cấu trúc dữ liệu ngăn xếp (Stack)?
A. Quản lý hàng đợi in.
B. Duyệt đồ thị theo chiều rộng.
C. Đảo ngược một chuỗi.
D. Tìm đường đi ngắn nhất trong một đồ thị.
145. Đâu là ví dụ về cấu trúc dữ liệu phi tuyến tính?
A. Hàng đợi (Queue)
B. Ngăn xếp (Stack)
C. Danh sách liên kết (Linked List)
D. Cây (Tree)
146. Ký hiệu nào biểu thị độ phức tạp thời gian logarit?
A. O(n)
B. O(log n)
C. O(n^2)
D. O(2^n)
147. Bảng băm (Hash Table) là gì?
A. Một cấu trúc dữ liệu tuyến tính lưu trữ các phần tử theo thứ tự.
B. Một cấu trúc dữ liệu sử dụng hàm băm để ánh xạ các khóa đến các vị trí trong một mảng.
C. Một cấu trúc dữ liệu dựa trên cây.
D. Một cấu trúc dữ liệu dựa trên đồ thị.
148. Cây (Tree) là gì?
A. Một cấu trúc dữ liệu tuyến tính.
B. Một cấu trúc dữ liệu phân cấp bao gồm các nút và các cạnh.
C. Một loại đồ thị không có chu trình.
D. Một cấu trúc dữ liệu chỉ có một nút.
149. Sự khác biệt giữa đồ thị có hướng (Directed Graph) và đồ thị vô hướng (Undirected Graph) là gì?
A. Đồ thị có hướng có trọng số trên các cạnh, trong khi đồ thị vô hướng thì không.
B. Các cạnh trong đồ thị có hướng có hướng, trong khi các cạnh trong đồ thị vô hướng thì không.
C. Đồ thị có hướng không thể có chu trình, trong khi đồ thị vô hướng thì có thể.
D. Đồ thị vô hướng có thể có nhiều hơn một cạnh giữa hai đỉnh, trong khi đồ thị có hướng thì không.
150. Ngăn xếp (Stack) hoạt động theo nguyên tắc nào?
A. FIFO (First In, First Out)
B. LIFO (Last In, First Out)
C. Random Access
D. Priority Queue