wayground logo

Free Printable Worksheets

Font size

S
M
L
XL
Worksheets

CTDL&GT

Total questions: 150

Worksheet time: 75hrs 0mins

Name
Class
Date
1.

Thuật toán khác với chương trình máy tính ở điểm nào?

a)

Thuật toán là ngôn ngữ lập trình, chương trình thì không

b)

Thuật toán là dãy bước giải quyết bài toán, chương trình là hiện thực cụ thể bằng ngôn ngữ

c)

Thuật toán luôn nhanh hơn chương trình

d)

Chương trình không cần dựa trên thuật toán

2.

Đặc điểm nào sau đây không đúng với thuật toán?

a)

A. Có tính hữu hạn

b)

B. Có tính xác định rõ ràng

c)

C. Có thể thực hiện được

d)

D. Luôn có độ phức tạp O(1)

3.

Trong ví dụ tìm giá trị lớn nhất trong dãy, tại sao ta gán max = a[1] thay vì max = 0?

a)

A. Vì 0 không phải lúc nào cũng là phần tử lớn nhất

b)

B. Vì a[1] chắc chắn lớn nhất

c)

C. Vì quy tắc thuật toán bắt buộc

d)

D. Vì dễ lập trình hơn

4.

Cấu trúc dữ liệu được dùng để làm gì?

a)

Giảm bộ nhớ máy tính

b)

Tổ chức và lưu trữ dữ liệu để truy xuất và xử lý hiệu quả

c)

Thay thế cho thuật toán

d)

Chỉ lưu trữ số nguyên

5.

Trong cấu trúc dữ liệu ngăn xếp (stack), nguyên tắc hoạt động là:

a)

FIFO (vào trước – ra trước)

b)

LIFO (vào sau – ra trước)

c)

Ngẫu nhiên

d)

Theo chỉ số nhỏ nhất

6.

Điểm khác biệt chính giữa mảng và danh sách liên kết là gì?

a)

A. Mảng luôn chiếm ít bộ nhớ hơn

b)

B. Danh sách liên kết lưu trữ các phần tử rời rạc kết nối bằng con trỏ

c)

C. Danh sách liên kết chỉ lưu số nguyên

d)

D. Mảng nhanh hơn mọi thao tác

7.

Trong bản ghi (record), các trường dữ liệu có đặc điểm gì?

a)

Luôn cùng kiểu dữ liệu

b)

Có thể thuộc nhiều kiểu dữ liệu khác nhau

c)

Chỉ lưu chuỗi ký tự

d)

Không có tên trường

8.

Tại sao cần phân tích độ phức tạp thuật toán?

a)

Để biết ngôn ngữ nào nhanh nhất

b)

Để đánh giá hiệu quả và so sánh giữa các thuật toán

c)

Để tránh lập trình lỗi

d)

Để tránh dùng cấu trúc dữ liệu

9.

Trong ví dụ thuật toán tìm giá trị lớn nhất, điều kiện nào đảm bảo max luôn chứa phần tử lớn nhất?

a)

So sánh từng phần tử với max và cập nhật nếu lớn hơn

b)

Chọn phần tử cuối cùng làm max

c)

Chọn phần tử nhỏ nhất làm max

d)

Không cần so sánh

10.

Mô-đun hóa trong giải quyết bài toán có ý nghĩa chính là gì?

a)

Chia bài toán thành nhiều bước lặp lại

b)

Chia bài toán thành các phần nhỏ, dễ quản lý và xử lý

c)

Lập trình song song để tăng tốc độ

d)

Thực hiện bài toán bằng ngôn ngữ cấp thấp

11.

Lợi ích chính của việc mô-đun hóa chương trình là gì?

a)

Giúp chương trình chạy nhanh hơn

b)

Giúp giảm chi phí lưu trữ dữ liệu

c)

Giúp chương trình dễ hiểu, dễ kiểm tra và bảo trì

d)

Giúp chương trình có giao diện đẹp hơn

12.

Một mô-đun trong chương trình thường có đặc điểm:

a)

Có thể hoạt động độc lập

b)

Không thể tái sử dụng

c)

Chỉ gồm một câu lệnh duy nhất

d)

Luôn phức tạp

13.

Trong phân tích bài toán, bước quan trọng đầu tiên là gì?

a)

Viết chương trình

b)

Tìm ngôn ngữ lập trình

c)

Xác định rõ yêu cầu và dữ liệu đầu vào, đầu ra

d)

Tối ưu hóa thuật toán

14.

Một chương trình lớn được chia thành các mô-đun nhỏ có cấu trúc như thế nào?

a)

Tuyến tính

b)

Cây phân cấp

c)

Ngẫu nhiên

d)

Vòng lặp vô hạn

15.

Khi thiết kế giải thuật theo hướng mô-đun, các mô-đun con có thể được:

a)

Bỏ qua khi chạy

b)

Gọi lặp lại nhiều lần

c)

Chỉ chạy một lần duy nhất

d)

Không liên kết với nhau

16.

Việc mô-đun hóa giúp ích gì cho việc phát triển phần mềm?

a)

Tăng số lượng lỗi

b)

Khó kiểm thử hơn

c)

Giúp tái sử dụng và mở rộng dễ dàng

d)

Giảm tính linh hoạt

17.

Phân tích và thiết kế giải thuật nhằm mục đích gì?

a)

Giúp chọn phần cứng phù hợp

b)

Giúp lập trình viên có giải pháp rõ ràng và tối ưu trước khi viết mã

c)

Giúp giảm kích thước bộ nhớ

d)

Giúp chọn đúng ngôn ngữ lập trình

18.

Đặc trưng quan trọng của phương pháp Top-Down là:

a)

Giải quyết bài toán bằng cách từ dưới lên

b)

Bắt đầu từ bài toán tổng quát rồi chia nhỏ dần thành các bài toán con

c)

Không cần quan tâm đến cấu trúc dữ liệu

d)

Luôn dùng vòng lặp

19.

Điều kiện dừng trong thuật toán đệ quy có vai trò gì?

a)

Giúp hàm ko lặp vô hạn

b)

Giúp hàm chạy nhanh hơn

c)

Giảm bộ nhớ

d)

Giảm thay thế vòng lặp

20.

Trong định nghĩa giai thừa n!, điều kiện dừng là gì?

a)

A. n = 0 hoặc n = 1

b)

B. n = -1

c)

C. n > 1

d)

D. Không có điều kiện dừng

21.

Đệ quy thường được sử dụng trong các bài toán nào?

a)

Bài toán không có dữ liệu

b)

Bài toán có cấu trúc lặp lại hoặc phân rã nhỏ dần

c)

Bài toán chỉ cần một phép cộng

d)

Bài toán duyệt tuyến tính

22.

Điểm khác biệt cơ bản giữa đệ quy và vòng lặp là gì?

a)

Đệ quy nhanh hơn vòng lặp

b)

Đệ quy gọi lại chính hàm, còn vòng lặp lặp khối lệnh

c)

Đệ quy không cần điều kiện dừng

d)

Đệ quy không thể thay thế vòng lặp

23.

Thuật toán đệ quy có thể được thay thế bằng:

a)

Một vòng lặp thích hợp

b)

Một cấu trúc dữ liệu khác

c)

Một ngôn ngữ lập trình khác

d)

Không thể thay thế

24.

Nếu muốn tìm giá trị nhỏ nhất trong dãy, ta cần thay đổi điều kiện nào trong thuật toán?

a)

Nếu a[i] > min thì min = a[i]

b)

Nếu a[i] < min thì min = a[i]

c)

Nếu a[i] = min thì min = a[i]

d)

Không cần thay đổi

25.

Giả sử ta có ngăn xếp rỗng và thực hiện các thao tác: Push(5), Push(7), Pop(). Giá trị trả về từ Pop() là gì?

a)

5

b)

7

c)

0

d)

Không xác định

26.

Một bản ghi sinh viên gồm: Họ tên (string), Tuổi (integer), Điểm trung bình (float). Đây là ví dụ của:

a)

Danh sách liên kết

b)

Mảng số nguyên

c)

Record chứa nhiều kiểu dữ liệu

d)

Ngăn xếp

27.

Giả sử có danh sách liên kết lưu dãy [2 → 4 → 6]. Nếu chèn thêm phần tử 8 vào cuối, danh sách trở thành:

a)

[8 → 2 → 4 → 6]

b)

[2 → 4 → 6 → 8]

c)

[2 → 8 → 4 → 6]

d)

[2 → 4 → 8 → 6]

28.

Cho dãy số: 12, 7, 15, 3. Sau khi chạy thuật toán tìm max, giá trị trung gian của max sau mỗi vòng lặp (bắt đầu từ a[1]) là:

a)

12 → 12 → 15 → 15

b)

7 → 12 → 15 → 15

c)

12 → 15 → 15 → 15

d)

12 → 7 → 15 → 3

29.

Trong ngăn xếp, sau các thao tác Push(2), Push(4), Push(6), Pop(), giá trị cuối cùng còn lại ở đỉnh ngăn xếp là:

a)

2

b)

4

c)

6

d)

null

30.

Để viết thuật toán tính tổng các phần tử trong dãy số nguyên gồm n phần tử, bước lặp quan trọng là gì?

a)

Cộng dồn từng phần tử vào biến tổng trong vòng lặp

b)

Chỉ lấy phần tử đầu tiên

c)

Chỉ lấy phần tử lớn nhất

d)

Ko cần vòng lặp

31.

Cho một bài toán “Quản lý điểm sinh viên”. Theo phương pháp Top-Down, bước phân rã đầu tiên hợp lý nhất là:

a)

A. Chia thành các mô-đun: Nhập điểm, Tính điểm trung bình, Xếp loại

b)

B. Viết chương trình ngay

c)

C. Chia thành từng vòng lặp

d)

D. Tạo giao diện đẹp

32.

Một chương trình tính lương nhân viên có thể được mô-đun hóa thành:

a)

Quản lý nhân sự, Quản lý lương, Xuất báo cáo

b)

Nhập dữ liệu, In dữ liệu, Xóa dữ liệu

c)

Quản lý thư viện, Quản lý học phí

d)

Ngẫu nhiên

33.

Nếu một bài toán quá phức tạp để giải trực tiếp, ta nên áp dụng phương pháp nào?

a)

Top-Down (chia nhỏ bài toán)

b)

Bottom-Up

c)

Brute Force

d)

Ngẫu nhiên

34.

Trong thiết kế phần mềm, khi một mô-đun được viết tốt, thì:

a)

Không thể tái sử dụng

b)

Có thể tái sử dụng trong nhiều chương trình khác

c)

Chỉ chạy đúng trong chương trình hiện tại

d)

Không cần kiểm thử

35.

Một bài toán sắp xếp danh sách có thể được phân rã thành các bước: Nhập dữ liệu → Chọn thuật toán sắp xếp → Xuất kết quả. Đây là ví dụ của:

a)

Phương pháp Top-Down

b)

Phương pháp Bottom-Up

c)

Mô hình hướng đối tượng

d)

Thuật toán đệ quy

36.

Cho bài toán quản lý thư viện. Nếu áp dụng mô-đun hóa, ta có thể tạo các mô-đun:

a)

Quản lý sách, Quản lý độc giả, Quản lý mượn – trả sách

b)

Chỉ một mô-đun duy nhất cho toàn hệ thống

c)

Mỗi quyển một module riêng

d)

Chỉ quản lí độc giả

37.

Trong quá trình kiểm thử, mô-đun hóa giúp:

a)

Khó phát hiện lỗi hơn

b)

Dễ kiểm tra từng phần riêng lẻ

c)

Không cần kiểm tra nữa

d)

Chỉ kiểm thử toàn bộ một lần

38.

Khi lập trình một chương trình tính toán phức tạp, việc mô-đun hóa sẽ:

a)

Giúp chia công việc cho nhiều lập trình viên

b)

Khiến việc bảo trì khó hơn

c)

Tăng độ phức tạp không cần thiết

d)

Không ảnh hưởng gì

39.

Một sinh viên được giao viết chương trình quản lý lớp học. Bạn ấy chia thành các mô-đun: Quản lý học sinh, Quản lý môn học, Quản lý điểm số. Đây là ví dụ của:

a)

Mô-đun hóa theo phương pháp Top-Down

b)

Phân tích sai bài toán

c)

Mô-đun hóa không hợp lý

d)

Chia nhỏ không cần thiết

40.

Khi dùng phương pháp Top-Down, nếu bài toán con vẫn quá phức tạp, ta cần làm gì?

a)

Chia nhỏ tiếp thành các bài toán con khác

b)

Bỏ qua bài toán con đó

c)

Viết chương trình ngay

d)

Thay đổi ngôn ngữ lập trình

41.

Tính F(4) trong dãy Fibonacci:

a)

2

b)

3

c)

5

d)

8

42.

Giả sử hàm đệ quy không có điều kiện dừng, điều gì xảy ra?

a)

Hàm kết thúc sớm

b)

Hàm chạy vô hạn và gây tràn bộ nhớ

c)

Hàm chạy ko đúng kết quả

d)

HÀm ko chạy

43.

Cho công thức đệ quy giai thừa, để tính 5!, lời gọi đệ quy sâu nhất là:

a)

fact(5)

b)

fact(4)

c)

fact(1)

d)

fact(0)

44.

Một bài toán đệ quy có thể được viết lại bằng vòng lặp. Ví dụ nào sau đây có thể chuyển thành vòng lặp dễ dàng?

a)

Tính giai thừa

b)

Duyệt cây nhị phân

c)

Giải bài toán tháp Hà Nội

d)

Tìm đường đi trong mê cung

45.

Khi giải bài toán đệ quy, để tăng hiệu suất (giảm số lần gọi hàm thừa), ta có thể áp dụng kỹ thuật nào?

a)

Chia để trị

b)

Quy hoạch động

c)

Dùng cấu trúc dữ liệu Stack

d)

Sử dụng vòng lặp While

46.

Thuật toán có thể được mô tả bằng những cách nào sau đây?

a)

Ngôn ngữ tự nhiên có cấu trúc

b)

Lưu đồ (Flowchart)

c)

Giả mã (Pseudocode)

d)

Tất cả các cách trên

47.

Ưu điểm chính của việc dùng giả mã (pseudocode) để mô tả thuật toán là gì?

a)

Chạy trực tiếp trên máy tính mà không cần biên dịch

b)

Dễ đọc, dễ hiểu và gần với ngôn ngữ lập trình

c)

Tự động chuyển đổi thành sơ đồ khối

d)

Nhanh hơn mã lập trình thực tế

48.

Vì sao lưu đồ (flowchart) thường được dùng để mô tả thuật toán?

a)

Đơn giản hóa việc phân tích thuật toán bằng biểu diễn trực quan

b)

Chỉ sử dụng cho thuật toán tìm kiếm

c)

Tự động chuyển đổi thành mã nguồn

d)

Không cần kiến thức lập trình

49.

Trong thuật toán tìm số lớn nhất, vòng lặp For i = 2 to n thực hiện chức năng gì?

a)

Lặp qua từng phần tử của mảng bắt đầu từ phần tử thứ 2

b)

Ktra giá trị lớn nhất ban đầu

c)

Xuất kết quả cuối cùng

d)

Khởi tạo mảng

50.

Trong ví dụ tìm số lớn nhất, điều kiện nào quyết định việc gán giá trị mới cho biến max?

a)

Nếu a[i] < max

b)

Nếu a[i] > max

c)

Nếu i = n

d)

Nếu a[1] = max

51.

Mảng thường được lưu trữ trong bộ nhớ như thế nào?

a)

Rời rạc, không liên tiếp

b)

Liên tiếp

c)

Dưới dạng cây (tree)

d)

Dưới dạng chuỗi liên kết hai chiều

52.

Danh sách liên kết khác với mảng ở điểm nào?

a)

Các phần tử được lưu trữ liên tiếp trong bộ nhớ

b)

Kích thước cố định ngay từ khi khai báo

c)

Kích thước linh hoạt, có thể thay đổi khi thêm/xóa phần tử

d)

Truy cập ngẫu nhiên đến phần tử bất kỳ nhanh chóng

53.

Con trỏ trong danh sách liên kết có chức năng gì?

a)

Lưu dữ liệu của phần tử

b)

Chỉ ra địa chỉ phần tử kế tiếp

c)

Sắp xếp các phần tử

d)

Giúp truy cập trực tiếp vào phần tử bất kỳ

54.

Trong danh sách liên kết đơn, nút cuối cùng trỏ tới giá trị nào?

a)

Địa chỉ nút đầu

b)

Giá trị dữ liệu NULL

c)

Địa chỉ nút kế tiếp

d)

Địa chỉ nút giữa danh sách

55.

Ưu điểm chính của 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)

Dễ dàng thêm và xóa phần tử mà ko cần dịch chuyển lại

c)

Tốn ít bộ nhớ hơn mảng

d)

Không cần dùng con trỏ

56.

Danh sách liên kết kép khác danh sách liên kết đơn ở điểm nào?

a)

Lưu được nhiều kiểu dữ liệu khác nhau

b)

Mỗi nút có hai con trỏ, trỏ tới nút trước và nút sau

c)

Kích thước cố định khi khai báo

d)

Không cần cấp phát động

57.

Hai thao tác nào sau đây là thao tác cơ bản của ngăn xếp?

a)

Insert và Delete

b)

Push và Pop

c)

Enqueue và Dequeue

d)

Add và Remove

58.

Khi thực hiện thao tác Pop trong ngăn xếp, điều gì xảy ra?

a)

A. Thêm phần tử mới vào cuối

b)

B. Xóa phần tử ở đỉnh ngăn xếp

c)

C. Xóa phần tử ở đáy ngăn xếp

d)

D. Sắp xếp lại ngăn xếp

59.

Ngăn xếp thường được sử dụng trong tình huống nào?

a)

Duyệt cây theo chiều rộng

b)

Tính toán biểu thức số học

c)

Quản lý hàng đợi tiến trình

d)

Truy cập cơ sở dữ liệu

60.

Trạng thái "ngăn xếp rỗng" xảy ra khi:

a)

Push vào ngăn xếp đầy

b)

Pop từ ngăn xếp rỗng

c)

Truy cập phần tử ở giữa ngăn xếp

d)

Khởi tạo ngăn xếp chưa cấp phát bộ nhớ

61.

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)

FILO(First In Last Out)

d)

Random(Ngẫu nhiên)

62.

Trong hàng đợi, phần tử được đưa vào ở đâu và lấy ra ở đâu?

a)

A. Vào ở cuối, ra ở cuối

b)

B. Vào ở đầu, ra ở đầu

c)

C. Vào ở cuối, ra ở đầu

d)

D. Vào ở đầu, ra ở cuối

63.

Hàng đợi thường được ứng dụng trong tình huống nào?

a)

Duyệt cây theo chiều sâu

b)

Lập lịch CPU trong hệ điều hành

c)

Tính giá trị biểu thức toán học

d)

Xử lý đệ quy

64.

Trong cây nhị phân, mỗi nút có tối đa bao nhiêu nút con?

a)

1

b)

2

c)

3

d)

Không giới hạn

65.

Trong cây nhị phân tìm kiếm (BST), giá trị ở nút bên trái so với nút cha là:

a)

Lớn hơn

b)

Nhỏ hơn

c)

Bằng

d)

Không xác định

66.

Cho mảng a[1..n]. Để duy trì cấu trúc các phần tử mảng nằm liên tiếp trong bộ nhớ khi xóa phần tử ở vị trí i (1 ≤ i ≤ n), số lượng gán tối thiểu cần thực hiện (dịch các phần tử bên phải sang trái) là:

a)

A. i

b)

B. n

c)

C. n - i

d)

D. i - 1

67.

Ta có mảng tính kích thước 10 đã đầy. Muốn thêm 1 phần tử mới, cách xử lý phổ biến nhất là:

a)

Thêm trực tiếp, mảng tự mở rộng(luôn được)

b)

Tạo mảng mới lớn hơn, copy tất cả phần tử rồi thêm vào

c)

Bỏ phần tử đầu tiên và ghi đè lên vị trí đó(không được phép)

d)

Không thể làm gì cả

68.

Viết đoạn giả-mã để tính tổng phần tử của mảng a[1..n]. Độ phức tạp theo số phép gán/cộng là bao nhiêu?

a)

O(1)

b)

O(log n)

c)

O(n)

d)

O(n²)

69.

Để xóa một nút có giá trị cụ thể trong danh sách liên kết đơn, bước nào không cần thiết?

a)

A. Tìm vị trí nút cần xóa

b)

B. Cập nhật con trỏ của nút trước để trỏ sang nút sau

c)

C. Giải phóng bộ nhớ của nút bị xóa

d)

D. Dịch chuyển toàn bộ phần tử còn lại trong danh sách

70.

Với danh sách liên kết kép, để duyệt từ cuối về đầu, cần:

a)

Con trỏ chỉ đến nút cuối và duyệt ngược qua con trỏ "previous"

b)

Con trỏ chỉ đến nút đầu và duyệt theo con trỏ "next"

c)

Tạo bản sao danh sách và đảo ngược thứ tự

d)

Không thể duyệt ngược được

71.

Để triển khai một ngăn xếp bằng danh sách liên kết, thao tác nào được dùng để thêm phần tử vào stack?

a)

Chèn vào cuối danh sách

b)

Chèn vào đầu danh sách

c)

Chèn vào vị trí bất kỳ

d)

Thay thế nút đầu tiên

72.

Nếu một ngăn xếp ban đầu rỗng, thực hiện Push(1), Push(2), Push(3), sau đó Pop() một lần thì phần tử nào được lấy ra?

a)

1

b)

2

c)

3

d)

Không có phần tử nào

73.

Cho ngăn xếp đang chứa [5, 8, 12] (5 ở đáy, 12 ở đỉnh). Thực hiện Pop(), sau đó Push(20), trạng thái ngăn xếp sẽ là:

a)

[5, 8, 12, 20]

b)

[5, 8, 20]

c)

[20, 5, 8]

d)

[5, 20, 8]

74.

Khi triển khai ngăn xếp bằng mảng có kích thước cố định, vấn đề nào có thể xảy ra?

a)

Stack Overflow

b)

Stack Underflow

c)

Cả A và B

d)

Không có vấn đề nào

75.

Để kiểm tra một biểu thức dấu ngoặc đơn có hợp lệ không (ví dụ: "(a+b)*(c-d)"), cấu trúc dữ liệu phù hợp nhất là:

a)

Danh sách liên kết

b)

Ngăn xếp

c)

Hàng đợi

d)

Cây

76.

Khi triển khai hàng đợi bằng mảng tĩnh, vấn đề nào thường xảy ra?

a)

Không thể thêm phần tử mới dù còn ô trống (do phần đầu không dịch chuyển)

b)

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

c)

Bộ nhớ luôn bị đầy

d)

Không xảy ra vấn đề gì

77.

Để cài đặt một hệ thống điều phối khách hàng đến quầy dịch vụ theo thứ tự đến, cấu trúc dữ liệu phù hợp nhất là:

a)

Ngăn xếp (Stack)

b)

Danh sách liên kết

c)

Hàng đợi (Queue)

d)

Đồ thị (Graph)

78.

Trong một cây nhị phân có 7 nút, số cạnh của cây là:

a)

6

b)

7

c)

8

79.

Cho đồ thị vô hướng có 4 đỉnh {A, B, C, D} và các cạnh {(A,B), (A,C), (B,D)}. Bậc của đỉnh A là:

a)

1

b)

2

c)

3

d)

4

80.

Trong đồ thị vô hướng có 5 đỉnh và 7 cạnh, tổng bậc của các đỉnh là:

a)

A. 7

b)

B. 10

c)

C. 14

d)

D. 35

81.

for i ← 1 to n do A[i] ← A[i] * 2 end for Đoạn giả ngữ trên thực hiện thao tác nào với mảng A?

a)

Chèn phần tử mới vào mảng

b)

Nhân đôi giá trị của từng phần tử trong mảng

c)

Tìm phần tử lớn nhất của mảng

d)

Xoá tất cả phần tử bằng 2

82.

if Stack is not full then push(Stack, X) else print("Overflow") Thao tác chính đang được minh hoạ trong đoạn giả ngữ trên là gì?

a)

Lấy phần tử ra khỏi ngăn xếp

b)

Thêm phần tử vào ngăn xếp

c)

Duyệt tất cả phần tử

d)

Đếm số phần tử hiện có

83.

if Queue is not empty then

Y ← dequeue(Queue)

print(Y)

Theo đoạn giả ngữ trên, thao tác nào sau đây đang diễn ra:

a)

Chèn phần tử vào hàng đợi

b)

Lấy phần tử ở cuối hàng đợi

c)

Lấy phần tử ở đầu hàng đợi và xóa khỏi hàng đợi

d)

Sắp xếp hàng đợi theo thứ tự tăng dần

84.

newNode.data ← X newNode.next ← head head ← newNode Đoạn giả ngữ trên biểu diễn thao tác nào sau đây:

a)

Xoá nút đầu danh sách

b)

Thêm nút mới vào đầu danh sách

c)

Tìm nút cuối cùng

d)

Chèn nút vào giữa danh sách

85.

PreOrder(node):

if node ≠ NULL then

print(node.data)

PreOrder(node.left)

PreOrder(node.right)

Thuật toán trên duyệt cây nào sau đây:

a)

In-order (LNR)

b)

Post-order (LRN)

c)

Pre-order (NLR)

d)

Level-order

86.

Khi cần truy xuất phần tử thứ i trong một tập dữ liệu, cấu trúc nào hiệu quả hơn?

a)

Danh sách liên kết

b)

Mảng

c)

Cây nhị phân

d)

Đồ thị

87.

Để chèn phần tử mới vào giữa danh sách liên kết đôi, so với mảng thì:

a)

Nhanh hơn

b)

Chậm hơn

88.

Ngăn xếp phù hợp nhất để giải quyết bài toán nào?

a)

Quản lý tiến trình trong hệ điều hành

b)

Hoàn tác thao tác (Undo) trong soạn thảo văn bản

c)

Quản lý máy in

d)

Tìm đường đi ngắn nhất trong bản đồ

89.

Hàng đợi ưu tiên khác hàng đợi thông thường ở chỗ:

a)

Phần tử nào đến trước thì ra trước

b)

Phần tử có giá trị lớn/nhỏ nhất được ưu tiên lấy ra

c)

Các phần tử luôn được lưu trữ tuần tự

d)

Các phần tử không thể xóa

90.

Cây nhị phân tìm kiếm (BST) có đặc điểm gì quan trọng để hỗ trợ tìm kiếm hiệu quả?

a)

Mọi nút đều có đúng 2 con

b)

Nút trái nhỏ hơn nút cha, nút phải lớn hơn nút cha

c)

Cây luôn cân bằng chiều cao

d)

Các nút được thêm theo thứ tự bất kỳ

91.

Trong đồ thị, để kiểm tra xem đồ thị có chu trình hay không, ta thường sử dụng:

a)

BFS hoặc DFS

b)

Dijkstra

c)

Kruskal

d)

Ma trận kề

92.

Khi cần cài đặt bảng băm, cấu trúc dữ liệu nào thường được sử dụng để xử lý xung đột?

a)

Ngăn xếp

b)

Danh sách liên kết

c)

Mảng

d)

Đồ thị

93.

Với dữ liệu thường xuyên thay đổi kích thước (thêm/xóa nhiều), cấu trúc nào phù hợp hơn?

a)

Mảng

b)

Danh sách liên kết

c)

Ngăn xếp

d)

Cây AVL

94.

Để xây dựng ứng dụng xử lý văn bản với chức năng Undo/Redo, cấu trúc nào là tối ưu?

a)

Mảng

b)

Ngăn xếp

c)

Hàng đợi

d)

Cây

95.

Trong quản lý tiến trình hệ điều hành (CPU scheduling), cấu trúc dữ liệu nào nên được dùng?

a)

Ngăn xếp

b)

Hàng đợi

c)

Cây

d)

Danh sách liên kết

96.

Khi cần xây dựng hệ thống tìm kiếm danh bạ (dữ liệu lớn, cần tìm nhanh), cấu trúc nào nên sử dụng?

a)

Mảng tính

b)

Danh sách liên kết

c)

Cây nhị phân tìm kiếm cân bằng (AVL/Red-Black)

d)

Ngăn xếp

97.

Để mô phỏng mối quan hệ bạn bè trên mạng xã hội, cấu trúc nào phù hợp nhất?

a)

Mảng

b)

Cây

c)

Đồ thị

d)

Hàng đợi

98.

Khi cần xử lý số lượng lớn dữ liệu để tìm kiếm tuyến tính theo chỉ số, em

chọn:

a)

Mảng

b)

Danh sách liên kết

c)

Cây

d)

Đồ thị

99.

Nếu phải cài đặt chức năng kiểm tra dấu ngoặc đúng/sai trong biểu thức toán

học, bạn nên chọn:

a)

Hàng đợi

b)

Ngăn xếp

c)

Cây

d)

Danh sách liên kết

100.

Để biểu diễn cây thư mục của hệ điều hành (folder, file), cấu trúc dữ liệu nào

phù hợp nhất?

a)

Mảng

b)

Cây

c)

Hàng đợi

d)

Đồ thị

101.

Đặc điểm nào đúng với Bubble Sort?

a)

Luôn so sánh phần tử đầu với tất cả phần tử còn lại

b)

So sánh các phần tử kề nhau và đổi chỗ nếu sai thứ tự

c)

Chia dãy thành 2 nửa và sắp xếp đệ quy

d)

Sử dụng cấu trúc cây HEAP

102.

Thuật toán Merge Sort có đặc điểm gì?

a)

Là thuật toán tại chỗ (in-place)

b)

Là thuật toán chia để trị, cần mảng phụ để gộp

c)

So sánh từng cặp kề nhau

d)

Luôn chọn phần tử nhỏ nhất còn lại

103.

Heap Sort dựa vào cấu trúc dữ liệu nào?

a)

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

b)

B. Cây Heap (Max-Heap hoặc Min-Heap)

c)

C. Danh sách liên kết

d)

D. Bảng băm

104.

Thuật toán Selection Sort có đặc điểm:

a)

Mỗi vòng lặp chọn phần tử nhỏ nhất còn lại và đưa lên đầu

b)

Luôn chọn pivot để phân hoạch

c)

Sử dụng cây nhị phân

d)

Cần mảng phụ để gộp

105.

Với dãy nhỏ (ví dụ < 20 phần tử), thuật toán nào thường hiệu quả?

a)

Bubble Sort

b)

Insertion Sort

c)

Merge Sort

d)

Heap Sort

106.

Thuật toán nào hoạt động hiệu quả cho dãy gần như đã sắp xếp?

a)

Insertion Sort

b)

Quick Sort

c)

Merge Sort

d)

Heap Sort

107.

Tìm kiếm tuần tự có độ phức tạp trung bình là:

a)

O(1)

b)

O(n)

c)

O(log n)

d)

O(n log n)

108.

Điều kiện áp dụng Tìm kiếm nhị phân là:

a)

Mảng phải ngẫu nhiên

b)

Mảng phải đã sắp xếp

c)

Mảng phải là số nguyên dương

d)

Mảng có kích thước chẵn

109.

Trong tìm kiếm tuần tự, phần tử cần tìm ở cuối danh sách → số lần so sánh tối

đa là:

a)

1

b)

log n

c)

n

d)

n/2

110.

Ưu điểm chính của Binary Search so với Linear Search là:

a)

Đơn giản hơn

b)

Không cần mảng sắp xếp

c)

Nhanh hơn trên mảng lớn đã sắp xếp

d)

Không cần bộ nhớ phụ

111.

AVL Tree là loại cây nhị phân tìm kiếm có đặc điểm:

a)

C. Mỗi nút có nhiều hơn 2 con

b)

D. Chỉ dùng cho số nguyên

c)

A. Luôn cân bằng chiều cao

d)

B. Không cần cân bằng

112.

Khi thực hiện tìm kiếm nhị phân trên mảng 16 phần tử, số lần so sánh tối đa là:

a)

log₂16 = 4

b)

8

c)

16

d)

4

113.

Trong Linear Search, nếu phần tử cần tìm ở đầu dãy, số phép so sánh là:

a)

n

b)

1

c)

2

d)

log n

114.

Binary Search thường đươc cài đặt bằng

a)

Cây AVL

b)

Cấu trúc hàng đợi

c)

Cấu trúc ngăn xếp

d)

Vòng lặp hoặc đệ quy

115.

Khi chèn dữ liệu liên tục vào BST mà không cân bằng, hiện tượng gì xảy ra?

a)

Tốc độ tìm kiếm giảm dần

b)

Cây trở thành cây AVL

c)

Tìm kiếm luôn O(log n)

d)

Không thay đổi

116.

Đặc điểm của tìm kiếm tuần tự là:

a)

Hiệu quả trên mảng lớn

b)

Không yêu cầu dữ liệu phải sắp xếp

c)

Nhanh hơn Binary Search

d)

Cần bộ nhớ phụ

117.

Cho mảng [9, 3, 7, 1]. Sau một lần duyệt Bubble Sort, mảng sẽ là:

a)

[3, 7, 1, 9]

b)

[3, 1, 7, 9]

c)

[1, 3, 7, 9]

d)

[7, 9, 3, 1]

118.

Cho mảng [4, 2, 7, 1]. Sau một bước Selection Sort (chọn phần tử nhỏ nhất đưa

về đầu), mảng là:

a)

[1, 2, 7, 4]

b)

[2, 4, 7, 1]

c)

[1, 4, 7, 2]

d)

[1, 2, 4, 7]

119.

Cho mảng [8, 3, 6]. Sau một lần Insertion Sort với phần tử 6, mảng trở thành:

a)

[3, 6, 8]

b)

[8, 6, 3]

c)

[3, 8, 6]

d)

[6, 3, 8]

120.

Cho mảng [9, 5, 7, 3]. Sau một bước Selection Sort (chọn phần tử nhỏ nhất),

mảng sẽ là:

a)

[3, 5, 7, 9]

b)

[3, 9, 7, 5]

c)

[3, 7, 5, 9]

d)

[9, 5, 3, 7]

121.

Cho mảng [4, 7, 2, 1]. Sau lần duyệt đầu tiên của Bubble Sort, phần tử nào chắc

chắn đúng vị trí cuối cùng?

a)

1

b)

2

c)

7

d)

4

122.

Cho mảng [6, 2, 9, 1]. Sau một bước Selection Sort, mảng trở thành:

a)

[1, 6, 9, 2]

b)

[1, 2, 6, 9]

c)

[1, 6, 2, 9]

d)

[2, 6, 1, 9]

123.

Cho mảng [2, 5, 7, 9, 12]. Tìm số 7 bằng Linear Search cần bao nhiêu bước?

a)

1

b)

2

c)

3

d)

4

124.

Với mảng [1, 3, 5, 7, 9], tìm số 7 bằng Binary Search, phần tử giữa đầu tiên

được so sánh là:

a)

1

b)

3

c)

5

d)

7

125.

Với mảng [2, 4, 6, 8, 10], tìm số 8 bằng Binary Search cần tối đa bao nhiêu lần

so sánh?

a)

1

b)

2

c)

3

d)

4

126.

Trong cây BST chứa các giá trị [10, 5, 20, 15], nếu tìm số 15, ta đi theo thứ tự:

a)

10 → 20 → 15

b)

10 → 5 → 15

c)

20 → 15

d)

10 → 15

127.

Cho mảng [2, 4, 6, 8, 10]. Nếu tìm số 12 bằng Binary Search → kết quả là

a)

Vị trí thứ 5

b)

Vị trí thứ 4

c)

Vị trí 0

d)

Không tìm thấy

128.

Với mảng [1, 3, 5, 7, 9], tìm số 9 bằng Linear Search cần bao nhiêu bước?

a)

3

b)

4

c)

5

d)

6

129.

Với mảng [1, 4, 7, 10, 13, 16], tìm số 10 bằng Binary Search cần tối đa:

a)

1 bước

b)

2 bước

c)

3 bước

d)

4 bước

130.

Trong cây BST gốc là 40, có các nút 20 (trái), 60 (phải), 10 (trái của 20). Tìm số

10 đi theo thứ tự:

a)

40 → 20 → 10

b)

40 → 60 → 10

c)

20 → 10

d)

40 → 10

131.

for i ← 1 to n do

if A[i] = key then

return i

end if

end for

return -1

Thuật toán trên thực hiện thao tác nào sau đây:

a)

Tìm kiếm nhị phân

b)

Tìm kiếm tuyến tính (Linear Search)

c)

Sắp xếp chèn (Insertion Sort)

d)

Sắp xếp chọn (Selection Sort)

132.

low ← 1

high ← n

while low ≤ high do

mid ← (low + high) / 2

if A[mid] = key then return mid

else if A[mid] > key then high ← mid - 1

else low ← mid + 1end while

return -1

Đoạn giả ngữ trên mô tả thuật toán nào và yêu cầu gì về dữ liệu?

a)

Linear Search – không yêu cầu dữ liệu sắp xếp

b)

Binary Search – mảng phải được sắp xếp

c)

Jump Search – mảng không cần sắp xếp

d)

Interpolation Search – mảng không cần sắp xếp

133.

for i ← 1 to n-1 do

for j ← 1 to n-i do

if A[j] > A[j+1] then

swap(A[j], A[j+1])

Thuật toán trên thực hiện thao tác nào dưới đây:

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)

Quick Sort

134.

for i ← 2 to n do

key ← A[i]

j ← i - 1

while j > 0 and A[j] > key do

A[j+1] ← A[j]

j ← j - 1

A[j+1] ← key

Thuật toán trên thực hiện thao tác nào sau đây:

a)

Selection Sort

b)

Merge Sort

c)

Insertion Sort

d)

Heap Sort

135.

for i ← 1 to n-1 do

min ← i

for j ← i+1 to n do

if A[j] < A[min] then min ← j

swap(A[i], A[min])

Thuật toán trên mô tả hành động nào sau đây:

a)

Sắp xếp chèn

b)

Sắp xếp nổi bọt

c)

Sắp xếp chọn (Selection Sort)

d)

Quick Sort

136.

Tìm phần tử nhỏ nhất trong cây nhị phân tìm kiếm (BST) thực hiện bằng cách:

a)

Duyệt toàn bộ cây

b)

Đi hết nhánh trái của cây

c)

Đi hết nhánh phải của cây

d)

So sánh tất cả các nút

137.

Khi biểu diễn đồ thị thưa (ít cạnh so với số đỉnh), cấu trúc nào tiết kiệm bộ nhớ

hơn?

a)

Ma trận kề

b)

Danh sách kề

c)

Mảng

d)

Ngăn xếp

138.

Nếu dữ liệu gần như đã sắp xếp, thuật toán nào hoạt động hiệu quả hơn?

a)

Bubble Sort

b)

Insertion Sort

c)

Selection Sort

d)

Quick Sort

139.

Khi chọn thuật toán tìm kiếm, yếu tố quan trọng nhất để quyết định giữa Linear

Search và Binary Search là:

a)

Số lượng phần tử

b)

Tính chất đã sắp xếp của dữ liệu

c)

Bộ nhớ RAM

d)

Kiểu dữ liệu số nguyên hay chuỗi

140.

Merge Sort có ưu điểm lớn nhất so với Quick Sort ở điểm nào?

a)

Ít bộ nhớ hơn

b)

Độ phức tạp ổn định trong mọi trường hợp

c)

Không cần chia mảng

d)

Nhanh hơn trong thực tế

141.

Khi nào Selection Sort có lợi thế hơn so với Bubble Sort?

a)

Khi cần ít hoán đổi hơn

b)

Khi mảng đã sắp xếp gần hoàn chỉnh

c)

Khi mảng có ít phần tử

d)

Khi cần sắp xếp ổn định

142.

Để tìm kiếm nhanh nhất trong tập dữ liệu rất lớn (hàng triệu phần tử đã sắp

xếp), ta nên chọn:

a)

Linear Search

b)

Binary Search

c)

Bubble Sort + Linear Search

d)

Selection Sort + Linear Search

143.

Khi sắp xếp mảng lớn với dữ liệu ngẫu nhiên, Quick Sort thường nhanh hơn

Merge Sort vì:

a)

Ít đệ quy hơn

b)

Sử dụng chia để trị và thao tác tại chỗ

c)

Không cần chia mảng con

d)

Luôn có độ phức tạp O(n)

144.

Nếu bạn cần sắp xếp dữ liệu học sinh theo điểm số (khoảng 50 phần tử), thuật

toán hợp lý nhất là:

a)

Bubble Sort

b)

Insertion Sort

c)

Merge Sort

d)

Quick Sort

145.

Khi bạn cần một thuật toán sắp xếp ổn định (stable sort), bạn chọn:

a)

Selection Sort

b)

Bubble Sort

c)

Insertion Sort

d)

Merge Sort

146.

Khi dữ liệu rất nhỏ (dưới 10 phần tử), thuật toán nào thường hiệu quả nhất?

a)

Merge Sort

b)

Insertion Sort

c)

Heap Sort

d)

Quick Sort

147.

Nếu chỉ tìm kiếm vài lần trên tập dữ liệu nhỏ, nên chọn:

a)

Linear Search

b)

Binary Search

c)

Cây AVL (AVL Tree)

d)

Hash Table

148.

Nếu cần tìm kiếm lặp lại hàng triệu lần trên tập dữ liệu tĩnh và đã sắp xếp, lựa

chọn tốt nhất là:

a)

Linear Search

b)

Binary Search

c)

Bubble Sort trước rồi tìm

d)

Quick Sort trước rồi tìm

149.

Nếu dữ liệu thay đổi thường xuyên (thêm/xóa nhiều), cấu trúc tìm kiếm tối ưu

hơn BST là:

a)

Binary Search

b)

Cây AVL (AVL Tree)

c)

Hash Table

d)

Linear Search

150.

Nếu chỉ cần tìm kiếm một lần duy nhất trong tập dữ liệu chưa sắp xếp, phương

án hiệu quả nhất là:

a)

Sắp xếp rồi Binary Search

b)

Linear Search trực tiếp

c)

Dùng AVL Tree

d)

Hash Table