1. Đâu là đặc điểm quan trọng nhất của một cấu trúc dữ liệu tốt?
A. Sử dụng nhiều bộ nhớ nhất có thể.
B. Dễ dàng cài đặt và sử dụng.
C. Tối ưu hóa việc sử dụng không gian bộ nhớ và thời gian thực hiện các thao tác.
D. Chỉ hỗ trợ một kiểu dữ liệu duy nhất.
2. 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 đến các phần tử.
B. Khi cần thực hiện các thao tác theo thứ tự LIFO (Last-In-First-Out).
C. Khi cần tìm kiếm phần tử nhanh chóng.
D. Khi cần lưu trữ dữ liệu theo thứ tự ưu tiên.
3. Đâu là hạn chế của việc sử dụng mảng (array) trong lập trình?
A. Không thể lưu trữ các kiểu dữ liệu khác nhau.
B. Kích thước phải được xác định trước và không thể thay đổi trong quá trình chạy.
C. Truy cập các phần tử rất chậm.
D. Không thể sắp xếp các phần tử.
4. Trong các ký hiệu sau, ký hiệu nào biểu thị tốc độ tăng trưởng chậm nhất?
A. O(n)
B. O(log n)
C. O(n^2)
D. O(2^n)
5. Mục đích của việc sử dụng Abstract Data Type (ADT) là gì?
A. Để tăng tốc độ thực thi của chương trình.
B. Để ẩn các chi tiết cài đặt của cấu trúc dữ liệu và chỉ cung cấp giao diện người dùng.
C. Để giảm kích thước bộ nhớ sử dụng.
D. Để làm cho code khó hiểu hơn.
6. Tại sao việc lựa chọn cấu trúc dữ liệu phù hợp lại quan trọng trong thiết kế thuật toán?
A. Nó chỉ ảnh hưởng đến tính thẩm mỹ của code.
B. Nó có thể ảnh hưởng lớn đến hiệu quả của thuật toán về thời gian và không gian.
C. Nó giúp code ngắn gọn hơn.
D. Nó giúp thuật toán dễ debug hơn.
7. O(1) biểu diễn độ phức tạp thời gian như thế nào?
A. Độ phức tạp tuyến tính.
B. Độ phức tạp logarit.
C. Độ phức tạp hằng số.
D. Độ phức tạp bậc hai.
8. Trong các cấu trúc dữ liệu sau, cấu trúc nào thường được sử dụng để cài đặt thuật toán Dijkstra tìm đường đi ngắn nhất?
A. Mảng (array).
B. Danh sách liên kết (linked list).
C. Hàng đợi ưu tiên (priority queue).
D. Ngăn xếp (stack).
9. Khi nào nên sử dụng thuật toán tìm kiếm nhị phân (binary search) thay vì tìm kiếm tuyến tính (linear search)?
A. Khi dữ liệu chưa được sắp xếp.
B. Khi kích thước dữ liệu nhỏ.
C. Khi dữ liệu đã được sắp xếp và cần tìm kiếm nhanh chóng.
D. Khi cần tìm kiếm phần tử đầu tiên.
10. Độ phức tạp thời gian của thuật toán được dùng để đánh giá điều gì?
A. Lượng bộ nhớ mà thuật toán sử dụng.
B. Thời gian chạy của thuật toán tăng lên như thế nào khi kích thước đầu vào tăng lên.
C. Sự phức tạp của mã nguồn thuật toán.
D. Số lượng dòng code trong thuật toán.
11. Sự khác biệt chính giữa cấu trúc dữ liệu tĩnh và cấu trúc dữ liệu động là gì?
A. Cấu trúc tĩnh nhanh hơn cấu trúc động.
B. Cấu trúc động sử dụng nhiều bộ nhớ hơn cấu trúc tĩnh.
C. Kích thước của cấu trúc tĩnh được cố định tại thời điểm biên dịch, trong khi kích thước của cấu trúc động có thể thay đổi trong quá trình chạy.
D. Cấu trúc tĩnh chỉ có thể chứa số, cấu trúc động có thể chứa mọi kiểu dữ liệu.
12. Đâu là ư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)?
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. Sắp xếp phần tử dễ dàng hơn.
13. Khi nào thì thuật toán tìm kiếm tuyến tính (linear search) là lựa chọn phù hợp?
A. Khi dữ liệu đã được sắp xếp.
B. Khi cần tìm kiếm phần tử lớn nhất.
C. Khi kích thước dữ liệu nhỏ và không cần tối ưu hóa thời gian tìm kiếm.
D. Khi cần tìm kiếm phần tử nhỏ nhất.
14. Trong các cấu trúc dữ liệu sau, cấu trúc nào cho phép truy cập phần tử ở giữa một cách hiệu quả nhất?
A. Danh sách liên kết đơn (singly linked list).
B. Mảng (array).
C. Hàng đợi (queue).
D. Ngăn xếp (stack).
15. Phát biểu nào sau đây mô tả đúng nhất về vai trò của cấu trúc dữ liệu trong lập trình?
A. Cấu trúc dữ liệu chỉ dùng để lưu trữ dữ liệu.
B. Cấu trúc dữ liệu giúp tổ chức, quản lý và lưu trữ dữ liệu một cách hiệu quả, ảnh hưởng đến hiệu suất của thuật toán.
C. Cấu trúc dữ liệu chỉ cần thiết cho các dự án lớn.
D. Cấu trúc dữ liệu làm cho code trở nên phức tạp hơn.
16. Trong các cấu trúc dữ liệu sau, cấu trúc nào thường được sử dụng để cài đặt hàng đợi (queue)?
A. Cây nhị phân (binary tree).
B. Ngăn xếp (stack).
C. Mảng (array) hoặc danh sách liên kết (linked list).
D. Đồ thị (graph).
17. Đâu là một ứng dụng thực tế của thuật toán sắp xếp?
A. Tính toán số Pi.
B. Tìm kiếm trên Internet.
C. Sắp xếp kết quả tìm kiếm trên một trang web thương mại điện tử.
D. Nén dữ liệu.
18. Đâu là phát biểu đúng về thuật toán?
A. Thuật toán là một chương trình máy tính hoàn chỉnh.
B. Thuật toán là một phương pháp giải quyết vấn đề được diễn tả bằng ngôn ngữ tự nhiên.
C. Thuật toán là một tập hợp hữu hạn các bước rõ ràng, có thứ tự để giải quyết một vấn đề cụ thể.
D. Thuật toán chỉ áp dụng cho các bài toán số học.
19. Trong các độ phức tạp sau, độ phức tạp nào là tốt nhất cho một thuật toán tìm kiếm?
A. O(n)
B. O(n^2)
C. O(log n)
D. O(2^n)
20. Trong phân tích thuật toán, trường hợp xấu nhất (worst-case) thường được quan tâm nhất vì sao?
A. Nó xảy ra thường xuyên nhất.
B. Nó cung cấp một giới hạn trên cho thời gian thực hiện của thuật toán.
C. Nó dễ phân tích hơn các trường hợp khác.
D. Nó luôn cho kết quả chính xác nhất.
21. Ưu điểm chính của việc sử dụng cấu trúc dữ liệu là gì?
A. Giảm thiểu việc sử dụng bộ nhớ.
B. Tổ chức và quản lý dữ liệu hiệu quả, giúp tăng tốc độ truy cập và xử lý.
C. Làm cho code dễ đọc hơn.
D. Tăng tính bảo mật cho dữ liệu.
22. Tại sao cần phải quan tâm đến độ phức tạp không gian của thuật toán?
A. Vì nó ảnh hưởng đến thời gian chạy của thuật toán.
B. Vì bộ nhớ máy tính là vô hạn.
C. Vì nó ảnh hưởng đến lượng bộ nhớ cần thiết để chạy thuật toán, đặc biệt quan trọng với dữ liệu lớn.
D. Vì nó ảnh hưởng đến tính dễ đọc của code.
23. Ưu điểm của việc sử dụng mã giả (pseudocode) để mô tả thuật toán là gì?
A. Nó có thể chạy trực tiếp trên máy tính.
B. Nó dễ đọc và hiểu hơn so với code lập trình, tập trung vào logic hơn là cú pháp.
C. Nó nhanh hơn khi viết so với code lập trình.
D. Nó có thể tự động chuyển đổi thành code lập trình.
24. Phương pháp nào sau đây thường được sử dụng để đánh giá hiệu quả của một thuật toán?
A. Đếm số dòng code.
B. Đo thời gian chạy thực tế trên một bộ dữ liệu cụ thể.
C. Phân tích độ phức tạp thời gian và không gian.
D. Đánh giá dựa trên ý kiến chủ quan của người lập trình.
25. Đâ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).
26. Thuật toán có thể được biểu diễn bằng những cách nào?
A. Chỉ bằng mã giả (pseudocode).
B. Chỉ bằng lưu đồ (flowchart).
C. Bằng ngôn ngữ tự nhiên, mã giả, lưu đồ, hoặc ngôn ngữ lập trình.
D. Chỉ bằng ngôn ngữ lập trình.
27. 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.
28. Đâu là nhược điểm chính của thuật toán Bubble Sort?
A. Độ phức tạp cao, đặc biệt với dữ liệu lớn.
B. Khó cài đặt.
C. Chỉ hoạt động với dữ liệu số.
D. Yêu cầu nhiều bộ nhớ.
29. Phân tích ‘Big O’ được sử dụng để làm gì?
A. Để đo thời gian thực thi chính xác của một thuật toán.
B. Để mô tả hiệu suất của một thuật toán khi kích thước đầu vào tăng lên.
C. Để tìm lỗi trong code.
D. Để tối ưu hóa code cho trình biên dịch.
30. Đâu là ứng dụng phổ biến của cấu trúc dữ liệu cây (tree)?
A. Quản lý bộ nhớ.
B. Biểu diễn các mối quan hệ phân cấp, ví dụ như cấu trúc thư mục trong hệ điều hành.
C. Sắp xếp dữ liệu.
D. Tìm kiếm tuyến tính.
31. Đâu là một ứng dụng phổ biến của cây nhị phân tìm kiếm (binary search tree)?
A. Lưu trữ dữ liệu theo thứ tự đến.
B. Tìm kiếm, chèn và xóa dữ liệu hiệu quả.
C. Triển khai hàng đợi (queue).
D. Triển khai ngăn xếp (stack).
32. Đâu là một ví dụ về cấu trúc dữ liệu phi tuyến tính?
A. Mảng (array).
B. Danh sách liên kết (linked list).
C. Cây (tree).
D. Hàng đợi (queue).
33. Đâu là mục tiêu chính của việc nghiên cứu cấu trúc dữ liệu và giải thuật?
A. Để viết code nhanh hơn.
B. Để sử dụng được nhiều thư viện hơn.
C. Để giải quyết vấn đề một cách hiệu quả về mặt thời gian và không gian.
D. Để làm cho code dễ đọc hơn.
34. Giải thuật nào sau đây là một ví dụ của giải thuật tham lam (greedy algorithm)?
A. Sắp xếp trộn (merge sort).
B. Tìm kiếm nhị phân (binary search).
C. Giải thuật Prim (tìm cây khung nhỏ nhất).
D. Sắp xếp nhanh (quick sort).
35. Hashing là gì?
A. Một kỹ thuật sắp xếp dữ liệu.
B. Một phương pháp nén dữ liệu.
C. Một kỹ thuật chuyển đổi dữ liệu thành một giá trị duy nhất.
D. Một cách để mã hóa dữ liệu.
36. Đâu là một ứng dụng của giải thuật tìm kiếm theo chiều rộng (breadth-first search)?
A. Tìm đường đi ngắn nhất trong một đồ thị không trọng số.
B. Tìm cây khung nhỏ nhất.
C. Sắp xếp dữ liệu.
D. Tìm kiếm trong một cây nhị phân tìm kiếm.
37. Cấu trúc dữ liệu nào sau đây là một dạng cây đặc biệt, trong đó giá trị của mỗi nút cha lớn hơn hoặc bằng giá trị của tất cả các nút con của nó?
A. Cây nhị phân tìm kiếm (binary search tree).
B. Heap.
C. Danh sách liên kết (linked list).
D. Đồ thị (graph).
38. 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. Cây (tree).
C. Đồ thị (graph).
D. Ngăn xếp (stack).
39. Trong cấu trúc dữ liệu cây, nút gốc (root) là gì?
A. Nút không có nút con.
B. Nút có nhiều nút con nhất.
C. Nút không có nút cha.
D. Nút nằm ở mức thấp nhất của cây.
40. Phương pháp tiếp cận ‘chia để trị’ (divide and conquer) thường được sử dụng trong giải thuật nào?
A. Sắp xếp nổi bọt (bubble sort).
B. Tìm kiếm tuyến tính (linear search).
C. Sắp xếp trộn (merge sort).
D. Sắp xếp chèn (insertion sort).
41. Đâu là ưu điểm chính của việc sử dụng danh sách liên kết so với mảng?
A. Truy cập phần tử nhanh hơn.
B. Sử dụng bộ nhớ hiệu quả hơn khi biết trước kích thước.
C. Dễ dàng chèn và xóa phần tử ở giữa.
D. Tìm kiếm phần tử nhanh hơn.
42. Đâu là sự khác biệt giữa ngăn xếp (stack) và hàng đợi (queue)?
A. Ngăn xếp sử dụng bộ nhớ nhiều hơn hàng đợi.
B. Ngăn xếp hoạt động theo nguyên tắc LIFO, hàng đợi hoạt động theo nguyên tắc FIFO.
C. Hàng đợi nhanh hơn ngăn xếp.
D. Ngăn xếp dễ dàng hơn để triển khai.
43. Giải thuật nào sau đây thường được sử dụng để nén dữ liệu?
A. Sắp xếp nổi bọt (bubble sort).
B. Giải thuật Huffman.
C. Tìm kiếm nhị phân (binary search).
D. Sắp xếp chèn (insertion sort).
44. Độ phức tạp thời gian O(log n) thường liên quan đến giải thuật nào?
A. Tìm kiếm tuyến tính (linear search).
B. Sắp xếp nổi bọt (bubble sort).
C. Tìm kiếm nhị phân (binary search).
D. Sắp xếp chèn (insertion sort).
45. Giải thuật sắp xếp nào sau đây có độ phức tạp thời gian O(n^2) trong trường hợp xấu nhất?
A. Sắp xếp trộn (merge sort).
B. Sắp xếp nhanh (quick sort).
C. Sắp xếp vun đống (heap sort).
D. Sắp xếp shell (shell sort).
46. Trong cấu trúc dữ liệu đồ thị, điều gì được gọi là ‘chu trình’ (cycle)?
A. Một đường đi không chứa bất kỳ cạnh nào.
B. Một đường đi bắt đầu và kết thúc ở cùng một đỉnh.
C. Một đường đi đi qua tất cả các đỉnh của đồ thị.
D. Một đường đi ngắn nhất giữa hai đỉnh.
47. Giải thuật nào sau đây có độ phức tạp thời gian tốt nhất trong trường hợp tốt nhất?
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 nhanh (quick sort).
48. Giải thuật nào sau đây thường được sử dụng để tìm đường đi ngắn nhất giữa hai nút trong một đồ thị?
A. Sắp xếp nổi bọt (bubble sort).
B. Tìm kiếm tuyến tính (linear search).
C. Giải thuật Dijkstra.
D. Sắp xếp chèn (insertion sort).
49. 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. Ngăn xếp (stack).
C. Danh sách liên kết (linked list).
D. Cây (tree).
50. Ưu điểm chính 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ự.
B. Tìm kiếm, chèn và xóa phần tử với độ phức tạp thời gian trung bình là O(1).
C. Sắp xếp các phần tử theo thứ tự.
D. Lưu trữ dữ liệu một cách tuần tự.
51. Trong cấu trúc dữ liệu đồ thị, điều gì được gọi là ‘đỉnh’ (vertex)?
A. Một đường nối giữa hai nút.
B. Một điểm nút trong đồ thị.
C. Một đường đi ngắn nhất trong đồ thị.
D. Một chu trình trong đồ thị.
52. Giải thuật nào sau đây thường được sử dụng để tìm kiếm một phần tử trong một mảng đã được sắp xếp?
A. Tìm kiếm tuyến tính (linear search).
B. Tìm kiếm nhị phân (binary search).
C. Sắp xếp nổi bọt (bubble sort).
D. Sắp xếp chèn (insertion sort).
53. Trong cấu trúc dữ liệu cây, nút lá (leaf node) là gì?
A. Nút gốc của cây.
B. Nút không có nút con.
C. Nút có hai nút con.
D. Nút nằm ở mức cao nhất của cây.
54. Điều gì xảy ra khi bạn cố gắng lấy một phần tử từ một ngăn xếp (stack) rỗng?
A. Ngăn xếp sẽ tự động tăng kích thước.
B. Một ngoại lệ (exception) hoặc lỗi sẽ được ném ra (stack underflow).
C. Giá trị mặc định (ví dụ: 0 hoặc null) sẽ được trả về.
D. Chương trình sẽ bị treo.
55. Đâu là một ứng dụng của ngăn xếp (stack) trong thực tế?
A. Quản lý bộ nhớ.
B. Xử lý các прерывания (interrupts) trong hệ điều hành.
C. Đánh giá biểu thức số học (ví dụ: chuyển đổi infix sang postfix).
D. Tất cả các đáp án trên.
56. Đâu là một ứng dụng của hàng đợi (queue) trong thực tế?
A. Quản lý các cuộc gọi đến trong một tổng đài.
B. Đảo ngược một chuỗi.
C. Tìm kiếm một phần tử trong một mảng.
D. Sắp xếp một danh sách các số.
57. Độ phức tạp không gian của một giải thuật là gì?
A. Thời gian cần thiết để giải thuật chạy.
B. Lượng bộ nhớ cần thiết để giải thuật chạy.
C. Số lượng dòng code trong giải thuật.
D. Độ khó của việc hiểu giải thuật.
58. Sự khác biệt chính giữa mảng và danh sách liên kết là gì?
A. Mảng có kích thước cố định, danh sách liên kết có kích thước động.
B. Mảng chỉ có thể lưu trữ số, danh sách liên kết có thể lưu trữ mọi kiểu dữ liệu.
C. Mảng nhanh hơn danh sách liên kết.
D. Danh sách liên kết dễ dàng hơn để duyệt.
59. Giải thuật sắp xếp nào sau đây có độ phức tạp thời gian trung bình tốt nhất?
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).
60. Đâu là nhược điểm chính của việc sử dụng đệ quy?
A. Khó hiểu code hơn.
B. Có thể dẫn đến tràn bộ nhớ ngăn xếp (stack overflow).
C. Chỉ hoạt động với một số ngôn ngữ lập trình.
D. Chạy chậm hơn so với vòng lặp.
61. Cấu trúc dữ liệu nào 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. Array (Mảng)
D. Cả Linked List và Array
62. Độ phức tạp thời gian (Time Complexity) thường được biểu diễn bằng ký hiệu nào?
A. Ω (Omega)
B. Θ (Theta)
C. O (Big O)
D. Δ (Delta)
63. Độ phức tạp không gian (Space Complexity) là gì?
A. Thời gian cần thiết để thuật toán hoàn thành
B. Lượng bộ nhớ cần thiết để thuật toán hoạt động
C. Số lượng dòng code trong thuật toán
D. Độ khó của việc hiểu thuật toán
64. Độ phức tạp thời gian tốt nhất của thuật toán Bubble Sort là:
A. O(n)
B. O(n log n)
C. O(n^2)
D. O(log n)
65. Trong cây nhị phân tìm kiếm (Binary Search Tree), 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
66. Thuật toán nào sau đây là thuật toán chia để trị (Divide and Conquer)?
A. Insertion Sort
B. Bubble Sort
C. Merge Sort
D. Selection Sort
67. 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 nút trong một đồ thị có trọng số không âm?
A. Thuật toán Prim
B. Thuật toán Kruskal
C. Thuật toán Dijkstra
D. Thuật toán Ford-Fulkerson
68. Cấu trúc dữ liệu nào được sử dụng để triển khai thuật toán tìm kiếm theo chiều rộng (Breadth-First Search)?
A. Stack
B. Queue
C. Tree
D. Graph
69. Thuật toán sắp xếp nào có độ phức tạp thời gian trung bình và xấu nhất đều là O(n^2)?
A. Merge Sort (Sắp xếp trộn)
B. Quick Sort (Sắp xếp nhanh)
C. Insertion Sort (Sắp xếp chèn)
D. Heap Sort (Sắp xếp vun đống)
70. Đâu là một ví dụ về ứng dụng của cấu trúc dữ liệu đồ thị (Graph)?
A. Quản lý danh sách các việc cần làm
B. Biểu diễn mạng xã hội
C. Lưu trữ lịch sử duyệt web
D. Tính toán biểu thức số học
71. Thuật toán tìm kiếm nào có độ phức tạp thời gian O(1) trong trường hợp tốt nhất?
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)
72. Kiểu dữ liệu trừu tượng (Abstract Data Type – ADT) là gì?
A. Một cách cụ thể để triển khai một cấu trúc dữ liệu
B. Một mô hình toán học với các thao tác được định nghĩa trên mô hình đó
C. Một ngôn ngữ lập trình cụ thể
D. Một thuật toán sắp xếp
73. Cấu trúc dữ liệu nào thường được sử dụng để biểu diễn mối quan hệ ‘cha-con’ trong hệ thống phân cấp?
A. Stack (Ngăn xếp)
B. Queue (Hàng đợi)
C. Tree (Cây)
D. Linked List (Danh sách liên kết)
74. Đâu là một ứng dụng phổ biến của Stack (Ngăn xếp)?
A. Quản lý các tiến trình trong hệ điều hành
B. Đánh giá biểu thức toán học (ví dụ: chuyển đổi infix sang postfix)
C. Tìm kiếm đường đi ngắn nhất trong đồ thị
D. Lưu trữ dữ liệu theo thứ tự đến trước, phục vụ trước
75. Trong cấu trúc dữ liệu cây (Tree), nút nào không có nút con được gọi là gì?
A. Root (Gốc)
B. Parent (Cha)
C. Child (Con)
D. Leaf (Lá)
76. Trong một cây AVL, điều gì được đảm bảo?
A. Tất cả các nút đều có giá trị bằng nhau
B. Cây luôn hoàn chỉnh
C. Chênh lệch chiều cao giữa cây con trái và cây con phải của mọi nút không vượt quá 1
D. Tất cả các nút lá đều nằm ở cùng một mức
77. Thuật toán sắp xếp nào hoạt động dựa trên việc chia mảng thành các nửa nhỏ hơn, sắp xếp từng nửa và sau đó trộn chúng lại?
A. Insertion Sort (Sắp xếp chèn)
B. Merge Sort (Sắp xếp trộn)
C. Selection Sort (Sắp xếp chọn)
D. Bubble Sort (Sắp xếp nổi bọt)
78. Thuật toán tìm kiếm nào có độ phức tạp thời gian trung bình là O(log n)?
A. Linear Search (Tìm kiếm tuyến tính)
B. Binary Search (Tìm kiếm nhị phân)
C. Bubble Sort (Sắp xếp nổi bọt)
D. Selection Sort (Sắp xếp chọn)
79. Đâu là một cách tiếp cận để giải quyết xung đột (collision) trong bảng băm (hash table)?
A. Sử dụng một stack
B. Sử dụng một queue
C. Chaining (liên kết các phần tử có cùng chỉ số băm vào một danh sách liên kết)
D. Sắp xếp lại các phần tử trong bảng
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) đến các phần tử?
A. Linked List (Danh sách liên kết)
B. Queue (Hàng đợi)
C. Stack (Ngăn xếp)
D. Array (Mảng)
81. Đâu là một ứng dụng phổ biến của Queue (Hàng đợi)?
A. Quản lý cuộc gọi đến tổng đài
B. Tìm kiếm đường đi trong mê cung
C. Đảo ngược một chuỗi
D. Tính giai thừa của một số
82. Trong thuật toán tìm kiếm nhị phân, điều kiện tiên quyết để thuật toán hoạt động đúng là gì?
A. Dữ liệu phải được sắp xếp
B. Dữ liệu phải là số nguyên
C. Dữ liệu phải là duy nhất
D. Dữ liệu phải có kích thước nhỏ
83. Cấu trúc dữ liệu nào tuân theo nguyên tắc FIFO (First-In, First-Out)?
A. Stack (Ngăn xếp)
B. Queue (Hàng đợi)
C. Tree (Cây)
D. Graph (Đồ thị)
84. Cấu trúc dữ liệu nào hoạt động theo nguyên tắc LIFO (Last-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)
85. Đâu là đặc điểm KHÔNG phải của một thuật toán?
A. Tính đúng đắn (Correctness)
B. Tính hữu hạn (Finiteness)
C. Tính nhập nhằng (Ambiguity)
D. Tính hiệu quả (Efficiency)
86. Đ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, còn Queue hoạt động theo nguyên tắc FIFO
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
87. Trong cấu trúc dữ liệu Heap (Vun đống), phần tử lớn nhất (hoặc nhỏ nhất) luôn nằm ở đâu?
A. Cuối hàng đợi
B. Nút lá
C. Nút gốc
D. Vị trí ngẫu nhiên
88. Ưu điểm chính của việc sử dụng cấu trúc dữ liệu Linked List (Danh sách liên kết) so với Array (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. Sắp xếp phần tử nhanh hơn
89. Trong cấu trúc dữ liệu đồ thị (Graph), một đường đi đi qua tất cả các đỉnh chỉ một lần được gọi là gì?
A. Chu trình Euler (Eulerian cycle)
B. Chu trình Hamilton (Hamiltonian cycle)
C. Cây khung (Spanning tree)
D. Đường đi ngắn nhất (Shortest path)
90. Độ phức tạp thời gian trung bình của thuật toán Quick Sort (Sắp xếp nhanh) là:
A. O(n)
B. O(n log n)
C. O(n^2)
D. O(log n)
91. Đâu là đặc điểm KHÔNG phải của một thuật toán?
A. Tính xác định (Determinacy)
B. Tính hữu hạn (Finiteness)
C. Tính nhập nhằng (Ambiguity)
D. Tính hiệu quả (Effectiveness)
92. Khái niệm nào sau đây mô tả việc một hàm gọi lại chính nó?
A. Đệ quy (Recursion)
B. Lặp (Iteration)
C. Phân chia và chinh phục (Divide and Conquer)
D. Tham lam (Greedy)
93. Trong thuật ngữ cấu trúc dữ liệu, ‘ tràn ngăn xếp ‘ (Stack Overflow) xảy ra khi nào?
A. Khi cố gắng truy cập một phần tử ngoài phạm vi của mảng
B. Khi cố gắng thêm một phần tử vào một ngăn xếp đã đầy
C. Khi cố gắng xóa một phần tử khỏi một ngăn xếp trống
D. Khi một hàm đệ quy gọi chính nó vô hạn lần
94. Khi nào nên sử dụng thuật toán tìm kiếm tuyến tính (Linear Search) thay vì tìm kiếm nhị phân (Binary Search)?
A. Khi dữ liệu đã được sắp xếp
B. Khi dữ liệu có kích thước lớn
C. Khi dữ liệu chưa được sắp xếp
D. Khi cần tìm kiếm phần tử nhỏ nhất
95. Trong thuật toán tìm kiếm nhị phân (Binary Search), dữ liệu đầu vào cần phải như thế nào?
A. Đã được sắp xếp (Sorted)
B. Chưa được sắp xếp (Unsorted)
C. Có kích thước nhỏ
D. Có kích thước lớn
96. Cấu trúc dữ liệu nào sau đây thường được sử dụng để triển khai thuật toán Dijkstra tìm đường đi ngắn nhất?
A. Stack
B. Queue
C. Priority Queue (Heap)
D. Linked List
97. Thuật toán nào sau đây có độ phức tạp thời gian tốt nhất trong trường hợp tốt nhất?
A. Bubble Sort
B. Insertion Sort
C. Selection Sort
D. Merge Sort
98. Độ 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(1)
B. O(log n)
C. O(n)
D. O(n^2)
99. Đâu là ứng dụng phổ biến của cây (Tree) trong khoa học máy tính?
A. Quản lý bộ nhớ
B. Biểu diễn dữ liệu có cấu trúc phân cấp
C. Sắp xếp dữ liệu
D. Tìm kiếm đường đi ngắn nhất
100. 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. Địa chỉ mở (Open Addressing)
C. Tìm kiếm nhị phân (Binary Search)
D. Đệ quy (Recursion)
101. Trong cây nhị phân tìm kiếm (Binary Search Tree), tính chất nào sau đây luôn đúng?
A. Tất cả các nút đều có hai con
B. Giá trị của nút con trái nhỏ hơn giá trị của nút cha
C. Giá trị của nút con phải nhỏ hơn giá trị của nút cha
D. Cây luôn cân bằng
102. Trong thuật toán sắp xếp nổi bọt (Bubble Sort), sau mỗi lần lặp, phần tử nào được đặt đúng vị trí?
A. Phần tử nhỏ nhất
B. Phần tử lớn nhất
C. Phần tử ở giữa
D. Không có phần tử nào
103. Cấu trúc dữ liệu nào thích hợp nhất để biểu diễn hàng đợi ưu tiên (Priority Queue)?
A. Mảng
B. Danh sách liên kết
C. Heap
D. Stack
104. Đâu là mục tiêu chính của việc phân tích độ phức tạp thuật toán?
A. Viết code ngắn gọn hơn
B. Đánh giá hiệu quả của thuật toán
C. Tìm lỗi trong thuật toán
D. Làm cho thuật toán dễ đọc hơn
105. Trong cấu trúc dữ liệu đồ thị (Graph), cạnh (Edge) là gì?
A. Một nút trong đồ thị
B. Một liên kết giữa hai nút
C. Một tập hợp các nút
D. Một đường đi trong đồ thị
106. Giải thuật nào sau đây thuộc loại ‘chia để trị’ (Divide and Conquer)?
A. Insertion Sort
B. Bubble Sort
C. Merge Sort
D. Selection Sort
107. Cấu trúc dữ liệu nào cho phép truy cập ngẫu nhiên đến các phần tử?
A. Stack
B. Queue
C. Linked List
D. Array
108. Cấu trúc dữ liệu nào hoạt động theo nguyên tắc LIFO (Last In, First Out)?
A. Queue
B. Stack
C. Linked List
D. Tree
109. Khi nào nên sử dụng cấu trúc dữ liệu Queue thay vì Stack?
A. Khi cần truy cập phần tử cuối cùng được thêm vào
B. Khi cần xử lý các phần tử theo thứ tự được thêm vào
C. Khi cần sắp xếp các phần tử
D. Khi cần tìm kiếm phần tử nhanh chóng
110. Đâu là một ứng dụng thực tế của cấu trúc dữ liệu đồ thị (Graph)?
A. Quản lý danh sách các việc cần làm
B. Lưu trữ dữ liệu theo thứ tự thời gian
C. Mô hình hóa mạng xã hội
D. Sắp xếp danh sách các số
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 phần tử nhanh hơn
B. Sử dụng bộ nhớ hiệu quả hơn khi kích thước thay đổi
C. Dễ dàng sắp xếp hơn
D. Tìm kiếm phần tử nhanh hơn
112. Trong thuật toán tìm kiếm theo chiều rộng (Breadth-First Search – BFS), cấu trúc dữ liệu nào thường được sử dụng?
A. Stack
B. Queue
C. Linked List
D. Tree
113. Trong cấu trúc dữ liệu đồ thị, điều gì KHÔNG đúng về cây (Tree)?
A. Là một dạng đồ thị
B. Không có chu trình
C. Mọi nút đều có thể có nhiều nút cha
D. Có một nút gốc
114. Cấu trúc dữ liệu nào sau đây là một ví dụ về cấu trúc dữ liệu phi tuyến tính?
A. Mảng (Array)
B. Danh sách liên kết (Linked List)
C. Hàng đợi (Queue)
D. Cây (Tree)
115. Ưu điểm của việc sử dụng hàm băm (Hash Function) là gì?
A. Sắp xếp dữ liệu nhanh chóng
B. Tìm kiếm dữ liệu nhanh chóng
C. Tiết kiệm bộ nhớ
D. Loại bỏ dữ liệu trùng lặp
116. Đâu là nhược điểm chính của thuật toán sắp xếp chèn (Insertion Sort)?
A. Độ phức tạp thời gian cao trên dữ liệu lớn
B. Khó cài đặt
C. Yêu cầu bộ nhớ lớn
D. Chỉ hoạt động trên dữ liệu số
117. Độ phức tạp không gian (Space Complexity) là gì?
A. Thời gian thực hiện thuật toán
B. Bộ nhớ tối đa cần thiết để thực hiện thuật toán
C. Số lượng dòng code của thuật toán
D. Độ khó của thuật toán
118. Trong cấu trúc dữ liệu cây, nút nào không có nút con được gọi là gì?
A. Nút gốc (Root)
B. Nút lá (Leaf)
C. Nút trung gian (Internal Node)
D. Nút cha (Parent)
119. Thuật toán sắp xếp nào có độ phức tạp thời gian trung bình là O(n log n)?
A. Bubble Sort
B. Insertion Sort
C. Selection Sort
D. Merge Sort
120. Trong thuật toán sắp xếp nhanh (Quick Sort), thao tác nào được sử dụng để phân vùng mảng?
A. Hợp nhất (Merge)
B. Hoán đổi (Swap)
C. Chọn (Select)
D. Chèn (Insert)
121. Cấu trúc dữ liệu nào sau đây phù hợp nhất để biểu diễn một hệ thống phân cấp (ví dụ: sơ đồ tổ chức)?
A. Mảng
B. Hàng đợi
C. Cây
D. Ngăn xếp
122. Thuật toán sắp xếp nào sau đây có hiệu suất tốt nhất trong trường hợp dữ liệu đã gần được sắp xếp?
A. Quick Sort
B. Merge Sort
C. Insertion Sort
D. Bubble Sort
123. 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. Mảng
B. Danh sách liên kết đơn
C. Hàng đợi
D. Ngăn xếp
124. Trong thuật toán sắp xếp nhanh (Quick Sort), yếu tố nào sau đây ảnh hưởng lớn nhất đến hiệu suất?
A. Số lượng phần tử trong mảng
B. Cách chọn phần tử chốt (pivot)
C. Kích thước của bộ nhớ cache
D. Tốc độ của CPU
125. Đâu là một ví dụ về cấu trúc dữ liệu tuyến tính?
A. Cây
B. Đồ thị
C. Mảng
D. Bảng băm
126. Đâu là phát biểu đúng về cây tìm kiếm nhị phân cân bằng (balanced binary search tree)?
A. Tất cả các nút lá phải có cùng độ sâu.
B. Độ cao của hai cây con của mọi nút khác nhau không quá một.
C. Tất cả các nút phải có đúng hai con.
D. Giá trị của tất cả các nút trong cây con bên trái phải lớn hơn giá trị của nút gốc.
127. Đâu là ứng dụng phổ biến của đồ thị?
A. Biểu diễn cây gia phả
B. Biểu diễn mạng xã hội
C. Biểu diễn danh sách các nhiệm vụ cần thực hiện
D. Biểu diễn dữ liệu có cấu trúc phân cấp
128. Thuật toán tìm kiếm nào sau đây yêu cầu dữ liệu đã được sắp xếp?
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 sâu (Depth-First Search)
D. Tìm kiếm theo chiều rộng (Breadth-First Search)
129. Ư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. Sắp xếp dễ dàng hơn
130. Trong cây nhị phân đầy đủ (full binary tree), số lượng nút lá (leaf nodes) luôn…
A. bằng số lượng nút không phải lá.
B. lớn hơn số lượng nút không phải lá một.
C. nhỏ hơn số lượng nút không phải lá một.
D. gấp đôi số lượng nút không phải lá.
131. Trong thuật toán tìm kiếm nhị phân, điều gì xảy ra nếu phần tử cần tìm không có trong mảng?
A. Thuật toán trả về chỉ số của phần tử gần nhất.
B. Thuật toán lặp vô hạn.
C. Thuật toán trả về -1 hoặc một giá trị đặc biệt để biểu thị rằng phần tử không được tìm thấy.
D. Thuật toán gây ra lỗi.
132. Đâ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, lưu trữ dữ liệu một cách hiệu quả để có thể sử dụng dữ liệu đó một cách hiệu quả, và nó ảnh hưởng đến hiệu suất của thuật toán.
B. Cấu trúc dữ liệu chỉ là một cách lưu trữ dữ liệu và không ảnh hưởng đến hiệu suất của thuật toán.
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 là một ngôn ngữ lập trình.
133. Đâu là nhược điểm chính của việc sử dụng đệ quy?
A. Khó đọc và hiểu
B. Tốn nhiều bộ nhớ do sử dụng stack
C. Chỉ hoạt động với các bài toán nhỏ
D. Không hiệu quả bằng vòng lặp
134. Đâu là ứng dụng phổ biến của ngăn xếp (stack)?
A. Quản lý hàng đợi in
B. Duyệt đồ thị theo chiều rộng
C. Đánh giá biểu thức hậu tố (postfix)
D. Tìm kiếm đường đi ngắn nhất
135. Điều gì xảy ra khi bạn cố gắng thêm một phần tử vào một hàng đợi (queue) đã đầy?
A. Phần tử mới sẽ thay thế phần tử cũ nhất.
B. Gây ra lỗi tràn hàng đợi (queue overflow).
C. Phần tử mới sẽ được thêm vào cuối hàng đợi sau khi hàng đợi được mở rộng.
D. Gây ra lỗi underflow.
136. Cấu trúc dữ liệu nào sau đây phù hợp nhất để kiểm tra xem một dấu ngoặc có hợp lệ hay không (ví dụ: ‘(){}[]’)?
A. Hàng đợi
B. Ngăn xếp
C. Mảng
D. Danh sách liên kết
137. 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 duyệt danh sách theo cả hai hướng.
B. Khi cần truy cập ngẫu nhiên đến các phần tử.
C. Khi cần tiết kiệm bộ nhớ.
D. Khi cần sắp xếp danh sách nhanh chóng.
138. Điều gì xảy ra khi bạn cố gắng lấy một phần tử từ một ngăn xếp (stack) rỗng?
A. Trả về giá trị null
B. Gây ra lỗi tràn ngăn xếp (stack overflow)
C. Trả về phần tử cuối cùng đã được thêm vào
D. Gây ra lỗi underflow
139. Ứng dụng nào sau đây không phù hợp với cấu trúc dữ liệu hàng đợi (queue)?
A. Xử lý yêu cầu từ máy chủ web
B. Mô phỏng hàng đợi chờ tại siêu thị
C. Quản lý lịch sử duyệt web
D. Tìm kiếm theo chiều rộng (Breadth-First Search)
140. Trong cấu trúc dữ liệu cây, thuật ngữ ‘chiều cao’ (height) 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 một nút lá.
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 con của nút đó.
D. Số lượng nút tổ tiên của nút đó.
141. Cấu trúc dữ liệu nào sau đây thường được sử dụng để biểu diễn mối quan hệ ‘nhiều-nhiều’?
A. Mảng
B. Danh sách liên kết
C. Cây
D. Đồ thị
142. Đâu là một ví dụ về thuật toán ‘chia để trị’ (divide and conquer)?
A. Tìm kiếm tuyến tính
B. Sắp xếp chèn
C. Sắp xếp trộn
D. Sắp xếp chọn
143. Thuật toán nào sau đây thường được sử dụng để tìm đường đi ngắn nhất trong một đồ thị có trọng số dương?
A. Tìm kiếm theo chiều sâu (Depth-First Search)
B. Tìm kiếm theo chiều rộng (Breadth-First Search)
C. Thuật toán Dijkstra
D. Thuật toán Prim
144. Ưu điểm của việc sử dụng bảng băm (hash table) là gì?
A. Truy cập phần tử nhanh (thường là O(1))
B. Sắp xếp dữ liệu hiệu quả
C. Sử dụng bộ nhớ ít hơn so với mảng
D. Dễ dàng duyệt qua các phần tử theo thứ tự
145. Đâu là phát biểu đúng về độ phức tạp không gian?
A. Độ phức tạp không gian chỉ tính đến bộ nhớ sử dụng bởi biến đầu vào.
B. Độ phức tạp không gian là lượng bộ nhớ tối đa mà thuật toán sử dụng trong quá trình thực thi.
C. Độ phức tạp không gian không quan trọng bằng độ phức tạp thời gian.
D. Độ phức tạp không gian chỉ áp dụng cho các thuật toán đệ quy.
146. Trong thuật toán Prim, cấu trúc dữ liệu nào thường được sử dụng để chọn cạnh có trọng số nhỏ nhất để thêm vào cây khung nhỏ nhất (minimum spanning tree)?
A. Hàng đợi
B. Ngăn xếp
C. Hàng đợi ưu tiên (Priority Queue)
D. Mảng
147. Trong cây nhị phân tìm kiếm (BST), thao tác nào sau đây có độ phức tạp thời gian trung bình là O(log n)?
A. Tìm kiếm một phần tử
B. Duyệt cây theo thứ tự trước (preorder)
C. Duyệt cây theo thứ tự sau (postorder)
D. Duyệt cây theo thứ tự giữa (inorder)
148. Thuật toán nào sau đây có độ phức tạp thời gian trung bình là O(n log n)?
A. Bubble Sort
B. Insertion Sort
C. Merge Sort
D. Selection Sort
149. Độ phức tạp thời gian nào sau đây biểu thị hiệu suất tốt nhất?
A. O(n^2)
B. O(n log n)
C. O(n)
D. O(1)
150. 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. Stack
B. Queue
C. Tree
D. Graph