wayground logo

Free Printable Worksheets

Font size

S
M
L
XL
Worksheets

Cấu trúc dữ liệu và giải thuật

Total questions: 47

Worksheet time: 26mins

Name
Class
Date
1.

Kiểu dữ liệu trừu tượng (ADT) là gì?

a)

Một kiểu dữ liệu được định nghĩa trong thư viện chuẩn

b)

Một kiểu dữ liệu có thể mô phỏng được bằng mảng

c)

Một mô hình dữ liệu được mô tả bởi các thao tác có thể thực hiện

d)

Một kiểu dữ liệu do người dùng định nghĩa trong C++

2.

Cấu trúc dữ liệu nào sau đây cho phép truy cập ngẫu nhiên (random access)?

a)

Danh sách liên kết đơn

b)

Cây nhị phân

c)

Mảng

d)

Hàng đợi

3.

Kết quả của đoạn mã sau là gì? int a[] = {1, 2, 3, 4}; cout << a[2];

a)

1

b)

2

c)

3

d)

4

4.

Chọn phát biểu đúng về danh sách liên kết đơn:

a)

Chỉ có thể thêm phần tử ở cuối danh sách

b)

Mỗi nút chứa con trỏ tới nút liền sau

c)

Không thể xóa phần tử ở đầu danh sách

d)

Không thể duyệt danh sách

5.

Đâu là điểm yếu của mảng tĩnh trong C++?

a)

Không thể lưu dữ liệu số nguyên

b)

Không có chỉ số

c)

Kích thước cố định tại thời điểm biên dịch

d)

Không thể khởi tạo giá trị

6.

Giá trị trả về của hàm sizeof(int) thường là bao nhiêu (trên hệ thống 64-bit)?

a)

1

b)

2

c)

4

d)

8

7.

Câu lệnh nào đúng để tạo một node mới trong danh sách liên kết đơn (C++)?

a)

Node *p = new Node();

b)

Node p = new Node();

c)

Node p = malloc(sizeof(Node));

d)

Node *p = malloc(sizeof(Node));

8.

Cấu trúc dữ liệu nào phù hợp để cài đặt ngăn xếp (stack)?

a)

Mảng

b)

Cây nhị phân

c)

Hash Table

d)

Đồ thị

9.

Trong cấu trúc dữ liệu hàng đợi (queue), thao tác nào được thực hiện ở cuối hàng?

a)

Push

b)

Enqueue

c)

Pop

d)

Dequeue

10.

Phát biểu nào sau đây là đúng với stack?

a)

Cấu trúc FIFO

b)

Có thể thêm ở cả đầu và cuối

c)

Cấu trúc LIFO

d)
11.

thao tác nào được thực hiện ở cuối hàng?

a)

Push

b)

Enqueue

c)

Pop

d)

Dequeue

12.

Phát biểu nào sau đây là đúng với stack?

a)

Cấu trúc FIFO

b)

Có thể thêm ở cả đầu và cuối

c)

Cấu trúc LIFO

d)

Không thể xóa phần tử

13.

Đệ quy là gì?

a)

Hàm gọi chính nó

b)

Hàm gọi một hàm khác

c)

Vòng lặp lặp lại nhiều lần

d)

Cách viết lại chương trình ngắn hơn

14.

Kết quả của đoạn mã sau là gì? int fun(int n) { if (n == 0) return 0; return n + fun(n - 1); } cout << fun(3);

a)

3

b)

6

c)

9

d)

10

15.

Tìm kiếm nhị phân yêu cầu điều kiện gì với mảng đầu vào?

a)

Mảng bất kỳ

b)

Mảng giảm dần

c)

Mảng tăng dần hoặc giảm dần

d)

Mảng đã sắp xếp

16.

Đâu là độ phức tạp thời gian của thuật toán tìm kiếm nhị phân?

a)

O(n)

b)

O(log n)

c)

O(n log n)

d)

O(n²)

17.

Ngăn xếp (stack) được sử dụng trong quá trình nào sau đây?

a)

BFS

b)

Quản lý bộ nhớ

c)

Triển khai hàng đợi

d)

Đọc ghi file

18.

Câu nào đúng về hàng đợi ưu tiên (priority queue)?

a)

Phần tử nào đến trước được xử lý trước

b)

Phần tử có độ ưu tiên cao hơn được xử lý trước

c)

Phần tử nào lớn hơn sẽ được xử lý cuối cùng

d)

Nó không khác gì hàng đợi thường

19.

Trong thuật toán sắp xếp chèn (insertion sort), trường hợp xấu nhất có độ phức tạp là:

a)

O(log n)

b)

O(n)

c)

O(n log n)

d)

O(n²)

20.

Đâu là cách hoạt động của thuật toán selection sort?

a)

Chọn phần tử lớn nhất và đưa ra đầu mảng

b)

Chọn phần tử nhỏ nhất và đưa về đầu mảng

c)

Chọn phần tử bất kỳ và sắp xếp đệ quy

d)

So sánh từng cặp phần tử liê

21.

oạt động của thuật toán selection sort?

a)

Chọn phần tử lớn nhất và đưa ra đầu mảng

b)

Chọn phần tử nhỏ nhất và đưa về đầu mảng

c)

Chọn phần tử bất kỳ và sắp xếp đệ quy

d)

So sánh từng cặp phần tử liên tiếp

22.

Sự khác biệt chính giữa hàng đợi và ngăn xếp là gì?

a)

Hàng đợi là LIFO, stack là FIFO

b)

Hàng đợi thêm ở đầu, stack thêm ở cuối

c)

Stack là LIFO, queue là FIFO

d)

Không có sự khác biệt

23.

Giả sử bạn có mảng int a[] = {3, 2, 1}. Sau một lần duyệt của bubble sort, mảng sẽ thành:

a)

{1, 2, 3}

b)

{2, 1, 3}

c)

{3, 1, 2}

d)

{2, 3, 1}

24.

Đâu là đặc điểm đúng của cây nhị phân tìm kiếm (BST)?

a)

Tất cả các nút đều có tối đa 3 con

b)

Nút bên trái có giá trị lớn hơn nút gốc

c)

Nút bên phải luôn nhỏ hơn nút gốc

d)

Nút bên trái nhỏ hơn và nút bên phải lớn hơn nút gốc

25.

Duyệt cây theo thứ tự trung thứ (in-order) sẽ cho ra dãy tăng dần nếu cây là:

a)

Cây nhị phân đầy đủ

b)

Cây nhị phân cân bằng

c)

Cây nhị phân tìm kiếm

d)

Cây nhị phân ngẫu nhiên

26.

Cấu trúc dữ liệu phù hợp nhất để cài đặt thuật toán BFS là:

a)

Stack

b)

Queue

c)

Heap

d)

Tree

27.

Cấu trúc dữ liệu phù hợp nhất để cài đặt thuật toán DFS là:

a)

Stack

b)

Queue

c)

Heap

d)

Priority queue

28.

Heap nhị phân được dùng chủ yếu để cài đặt:

a)

Hàng đợi thông thường

b)

Hàng đợi ưu tiên

c)

Ngăn xếp

d)

Danh sách liên kết

29.

Tổng số nút trong cây nhị phân đầy đủ có độ cao hhh là:

a)

2^h

b)

h^2

c)

( 2^h+1)-1

d)

h.log(h)

30.

Thuật toán nào sau đây có độ phức tạp trung bình tốt

4 lines
31.

Tổng số nút trong cây nhị phân đầy đủ có độ cao hhh là:

a)

2^h

b)

h^2

c)

( 2^h+1)-1

d)

h.log(h)

32.

Thuật toán nào sau đây có độ phức tạp trung bình tốt nhất để sắp xếp mảng lớn?

a)

Bubble sort

b)

Insertion sort

c)

Quick sort

d)

Selection sort

33.

Với bảng băm (hash table), điều kiện để tìm kiếm hiệu quả nhất là:

a)

Không dùng mảng

b)

Không xảy ra va chạm (collision)

c)

Dùng cây thay cho mảng

d)

Kích thước bảng băm càng nhỏ càng tốt

34.

Thuật toán merge sort có đặc điểm nào sau đây?

a)

Sắp xếp tại chỗ (in-place)

b)

Không sử dụng đệ quy

c)

Luôn chia mảng làm hai phần bằng nhau

d)

Có độ phức tạp trung bình là O(n^2)

35.

Kết quả của đoạn đệ quy sau là gì? int f(int n) { if (n <= 1) return 1; return f(n - 1) + f(n - 2); } cout << f(5);

a)

5

b)

8

c)

13

d)

3

36.

Cây AVL là gì?

a)

Cây nhị phân tìm kiếm không cân bằng

b)

Cây mà mỗi nút có tối đa 4 con

c)

Cây nhị phân tìm kiếm được cân bằng theo chiều cao

d)

Cây có số lượng nút bằng nhau ở mỗi nhánh

37.

Trong cây AVL, khi chênh lệch chiều cao giữa cây con trái và cây con phải lớn hơn 1, ta cần:

a)

Xóa nút gốc

b)

Tìm kiếm lại từ đầu

c)

Thực hiện phép quay (rotation)

d)

Sắp xếp lại cây

38.

Giả sử có thuật toán có độ phức tạp T(n)=T(n−1)+O(n). Tổng thể là:

a)

O(log(N))

b)

O(N)

c)

O(Nlog(N))

d)

O(N^2)

39.

Thuật toán Floyd-Warshall dùng để:

a)

Tìm đường đi ngắn nhất từ một đỉnh đến mọi đỉnh

b)

Tìm cây khung nhỏ nhất

c)

Tìm đường

40.

Độ phức tạp của thuật toán dijkstra với hàng đợi ưu tiên là:

a)

O(V+E)

b)

O(V^2)

c)

O((V+E)log(V))

d)

O(V⋅E)

41.

Kỹ thuật "Sliding Window" được dùng tốt nhất trong bài toán nào?

a)

Đếm số phần tử nhỏ hơn k trong mảng chưa sắp xếp

b)

Tìm tổng lớn nhất của dãy con liên tiếp dài k

c)

Đếm số lượng đường đi trong đồ thị

d)

Tìm cây khung nhỏ nhất

42.

Câu nào sau đây là đúng về thuật toán KMP (Knuth-Morris-Pratt)?

a)

So sánh từng ký tự một trong văn bản

b)

Có độ phức tạp O(nm)O(nm)O(nm)

c)

Không xử lý được chuỗi lặp

d)

Sử dụng mảng prefix để tránh so sánh lại

43.

Segment Tree thường dùng để:

a)

Sắp xếp mảng

b)

Tính tổng hoặc giá trị lớn nhất trong khoảng

c)

Quản lý hàng đợi ưu tiên

d)

Duyệt đồ thị theo BFS

44.

Trie là gì?

a)

Cây nhị phân đặc biệt cho đồ thị

b)

Cấu trúc dữ liệu dùng lưu trữ và tìm kiếm chuỗi hiệu quả

c)

Dạng cây AVL dành cho số nguyên

d)

Thuật toán tìm đường đi ngắn nhất

45.

Trong quy hoạch động (Dynamic Programming), điều kiện cần là:

a)

Có mảng

b)

Có đệ quy tuyến tính

c)

Có tính chất tối ưu con và chồng lặp bài toán con

d)

Không có ràng buộc về bộ nhớ

46.

Thuật toán Floyd-Warshall dùng để:

a)

Tìm đường đi ngắn nhất từ một đỉnh đến mọi đỉnh

b)

Tìm cây khung nhỏ nhất

c)

Tìm đường đi ngắn nhất giữa mọi cặp đỉnh

d)

Duyệt toàn bộ đồ thị

47.

Độ phức tạp của thuật toán dijkstra với hàng đợi ưu tiên là:

a)

O(V+E)

b)

O(V^2)

c)

O((V+E)log(V))

d)

O(V⋅E)