WorksheetsCâu hỏi về Thuật toán và Cấu trúc Dữ liệu
Total questions: 100
Worksheet time: 50mins
Thuật toán khác với chương trình máy tính ở điểm nào?
Thuật toán là ngôn ngữ lập trình, chương trình thì không
Thuật toán là đầ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ữ
Thuật toán luôn nhanh hơn chương trình
Chương trình không cần dựa trên thuật toán
Đặc điểm nào sau đây không đúng với thuật toán?
Có tính hữu hạn
Có tính xác định rõ ràng
Có thể thực hiện được
Luôn có độ phức tạp O(1)
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?
Vì 0 không phải lúc nào cũng là phần tử lớn nhất
Vì a[1] chắc chắn lớn nhất
Vì quy tắc thuật toán bắt buộc
Vì dễ lập trình hơn
Cấu trúc dữ liệu được dùng để làm gì?
Giảm bộ nhớ máy tính
Tổ chức và lưu trữ dữ liệu để truy xuất và xử lý hiệu quả
Thay thế cho thuật toán
Chỉ lưu trữ số nguyên
Trong cấu trúc dữ liệu ngăn xếp (stack), nguyên tắc hoạt động là:
FIFO (vào trước – ra trước)
LIFO (vào sau – ra trước)
Ngẫu nhiên
Theo chỉ số nhỏ nhất
Điểm khác biệt chính giữa mảng và danh sách liên kết là gì?
Mảng luôn chiếm ít bộ nhớ hơn
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ỏ
Danh sách liên kết chỉ lưu số nguyên
Mảng nhanh hơn mọi thao tác
Trong bản ghi (record), các trường dữ liệu có đặc điểm gì?
Có cùng kiểu dữ liệu
Có thể có kiểu dữ liệu khác nhau
Chỉ lưu trữ số nguyên
Chỉ lưu trữ chuỗi ký tự
Tại sao cần phân tích độ phức tạp thuật toán?
Để biết ngôn ngữ nào nhanh nhất
Để đánh giá hiệu quả và so sánh giữa các thuật toán
Để tránh lập trình lỗi
Để tránh dùng cấu trúc dữ liệu
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?
So sánh từng phần tử với max và cập nhật nếu lớn hơn
Chọn phần tử cuối cùng làm max
Chọn phần tử nhỏ nhất làm max
Không cần so sánh
Mô-đun hóa trong giải quyết bài toán có ý nghĩa chính là gì?
Chia bài toán thành nhiều bước lặp lại
Chia bài toán thành các phần nhỏ, dễ quản lý và xử lý
Lập trình song song để tăng tốc độ
Thực hiện bài toán bằng ngôn ngữ cấp thấp
Lợi ích chính của việc mô-đun hóa chương trình là gì?
Giúp chương trình chạy nhanh hơn
Giúp giảm chi phí lưu trữ dữ liệu
Giúp chương trình dễ hiểu, dễ kiểm tra và bảo trì
Giúp chương trình có giao diện đẹp hơn
Một mô-đun trong chương trình thường có đặc điểm:
Có thể hoạt động độc lập
Không thể tái sử dụng
Chỉ gồm một câu lệnh duy nhất
Luôn phức tạp
Trong phân tích bài toán, bước quan trọng đầu tiên là gì?
Viết chương trình
Tìm ngôn ngữ lập trình
Xác định rõ yêu cầu và dữ liệu đầu vào, đầu ra
Tối ưu hóa thuật toán
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?
Tuyến tính
Cây phân cấp
Ngẫu nhiên
Vòng lặp vô hạn
Khi thiết kế giải thuật theo hướng mô-đun, các mô-đun con có thể được:
Bỏ qua khi chạy
Gọi lặp lại nhiều lần
Chỉ chạy một lần duy nhất
Không liên kết với nhau
Việc mô-đun hóa giúp ích gì cho việc phát triển phần mềm?
Tăng số lượng lỗi
Khó kiểm thử hơn
Giúp tái sử dụng và mở rộng dễ dàng
Giảm tính linh hoạt
Phân tích và thiết kế giải thuật nhằm mục đích gì?
Giúp chọn phần cứng phù hợp
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ã
Giúp giảm kích thước bộ nhớ
Giúp chọn đúng ngôn ngữ lập trình
Đặc trưng quan trọng của phương pháp Top-Down là:
Giải quyết bài toán bằng cách từ dưới lên
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
Không cần quan tâm đến cấu trúc dữ liệu
Luôn dùng vòng lặp
Điều kiện dừng trong thuật toán đệ quy có vai trò gì?
Giúp hàm chạy nhanh hơn
Giúp hàm không lặp vô hạn
Giúp giảm bộ nhớ
Giúp thay thế vòng lặp
Trong định nghĩa giai thừa n!, điều kiện dừng là gì?
n = 0 hoặc n = 1
n = -1
n > 1
Không có điều kiện dừng
Đệ quy thường được sử dụng trong các bài toán nào?
Bài toán không có dữ liệu
Bài toán có cấu trúc lặp lại hoặc phân rã nhỏ dần
Bài toán chỉ cần một phép cộng
Bài toán duyệt tuyến tính
Điểm khác biệt cơ bản giữa đệ quy và vòng lặp là gì?
Đệ quy nhanh hơn vòng lặp
Đệ quy gọi lại chính hàm, còn vòng lặp lặp khối lệnh
Đệ quy không cần điều kiện dừng
Đệ quy không thể thay thế vòng lặp
Thuật toán đệ quy có thể được thay thế bằng:
Một vòng lặp thích hợp
Một cấu trúc dữ liệu khác
Một ngôn ngữ lập trình khác
Không thể thay thế
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?
Nếu a[i] > min thì min = a[i]
Nếu a[i] < min thì min = a[i]
Nếu a[i] = min thì min = a[i]
Không cần thay đổi
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ì?
5
7
0
null
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:
Danh sách liên kết
Mảng số nguyên
Record chứa nhiều kiểu dữ liệu
Ngăn xếp
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:
[8 → 2 → 4 → 6]
[2 → 4 → 6 → 8]
[2 → 8 → 4 → 6]
[2 → 4 → 8 → 6]
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à:
12 → 12 → 15 → 15
7 → 12 → 15 → 15
12 → 15 → 15 → 15
12 → 7 → 15 → 3
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à:
2
4
6
null
Để 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ì?
Cộng dồn từng phần tử vào biến tổng trong vòng lặp
Chỉ lấy phần tử đầu tiên
Chỉ lấy phần tử lớn nhất
Không cần vòng lặp
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à:
Chia thành các mô-đun: Nhập điểm, Tính điểm trung bình, Xếp loại
Viết chương trình ngay
Chia thành từng vòng lặp
Tạo giao diện đẹp
Một chương trình tính lương nhân viên có thể được mô-đun hóa thành:
Quản lý nhân sự, Quản lý lương, Xuất báo cáo
Nhập dữ liệu, In dữ liệu, Xóa dữ liệu
Quản lý thư viện, Quản lý học phí
Ngẫu nhiên
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?
Top-Down (chia nhỏ bài toán)
Bottom-Up
Brute Force
Không cần phương pháp
Trong thiết kế phần mềm, khi một mô-đun được viết tốt, thì:
Không thể tái sử dụng
Có thể tái sử dụng trong nhiều chương trình khác
Chỉ chạy đúng trong chương trình hiện tại
Không cần kiểm thử
Một bài toán sắp xếp danh sách có thể được phân ra 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:
Phương pháp Top-Down
Phương pháp Bottom-Up
Mô hình hướng đối tượng
Thuật toán đệ quy
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:
Quản lý sách, Quản lý độc giả, Quản lý mượn – trả sách
Chỉ một mô-đun duy nhất cho toàn hệ thống
Mỗi quyền sách một mô-đun riêng
Chỉ quản lý độc giả
Trong quá trình kiểm thử, mô-đun hóa giúp:
Khó phát hiện lỗi hơn
Dễ kiểm tra từng phần riêng lẻ
Không cần kiểm tra nữa
Chỉ kiểm thử toàn bộ một lần
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ẽ:
Giúp chia công việc cho nhiều lập trình viên
Khiến việc bảo trì khó hơn
Tăng độ phức tạp không cần thiết
Không ảnh hưởng gì
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:
Mô-đun hóa theo phương pháp Top-Down
Phân tích sai bài toán
Mô-đun hóa không hợp lý
Chia nhỏ không cần thiết
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ì?
Chia nhỏ tiếp thành các bài toán con khác
Gộp lại thành một bài toán lớn hơn
Bỏ qua bài toán con đó
Không cần làm gì thêm
Tính F(4) trong dãy Fibonacci:
2
3
5
8
Giả sử hàm đệ quy không có điều kiện dừng, điều gì xảy ra?
Hàm kết thúc sớm
Hàm chạy vô hạn và gây tràn bộ nhớ
Hàm chạy đúng kết quả
Hàm không chạy
Cho công thức đệ quy giai thừa, để tính 5!, lời gọi đệ quy sâu nhất là:
fact(5)
fact(4)
fact(1)
fact(0)
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?
Tính giai thừa
Duyệt cây nhị phân
Giải bài toán tháp Hà Nội
Tìm đường đi trong mê cung
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?
Chia để trị
Quy hoạch động
Dùng cấu trúc dữ liệu Stack
Sử dụng vòng lặp While
Thuật toán có thể được mô tả bằng những cách nào sau đây?
Ngôn ngữ tự nhiên có cấu trúc
Lưu đồ (Flowchart)
Giả mã (Pseudocode)
Tất cả các cách trên
Ưu điểm chính của việc dùng giả mã (pseudocode) để mô tả thuật toán là gì?
Chạy trực tiếp trên máy tính mà không cần biên dịch
Dễ hiểu và dễ chuyển đổi thành mã nguồn
Tăng tốc độ thực thi của thuật toán
Giảm dung lượng bộ nhớ cần thiết
Vì sao lưu đồ (flowchart) thường được dùng để mô tả thuật toán?
Đơn giản hóa việc phân tích thuật toán bằng biểu diễn trực quan
Chỉ sử dụng cho thuật toán tìm kiếm
Tự động chuyển đổi thành mã nguồn
Không cần kiến thức lập trình
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ì?
Lặp qua từng phần tử của mảng bắt đầu từ phần tử thứ 2
Kiểm tra giá trị lớn nhất ban đầu
Xuất kết quả cuối cùng
Khởi tạo mảng
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?
Nếu a[i] < max
Nếu a[i] > max
Nếu i = n
Nếu a[1] = max
Mảng thường được lưu trữ trong bộ nhớ như thế nào?
Rời rạc, không liên tiếp
Liên tiếp
Dưới dạng cây (tree)
Dưới dạng chuỗi liên kết hai chiều
Danh sách liên kết khác với mảng ở điểm nào?
Các phần tử được lưu trữ liên tiếp trong bộ nhớ
Kích thước cố định ngay từ khi khai báo
Kích thước linh hoạt, có thể thay đổi khi thêm/xóa phần tử
Truy cập ngẫu nhiên đến phần tử bất kỳ nhanh chóng
Con trỏ trong danh sách liên kết có chức năng gì?
Lưu dữ liệu của phần tử
Chỉ ra địa chỉ phần tử kế tiếp
Sắp xếp các phần tử
Giúp truy cập trực tiếp vào phần tử bất kỳ
Trong danh sách liên kết đơn, nút cuối cùng trỏ tới giá trị nào?
Giá trị của nút đầu tiên
Giá trị của nút liền kề
Giá trị NULL
Giá trị lớn nhất trong danh sách
Ưu điểm chính của danh sách liên kết so với mảng là gì?
Truy cập ngẫu nhiên nhanh hơn
Dễ dàng thêm và xóa phần tử mà không cần dịch chuyển dữ liệu
Tốn ít bộ nhớ hơn mảng
Không cần dùng con trỏ
Danh sách liên kết kép khác danh sách liên kết đơn ở điểm nào?
Lưu được nhiều kiểu dữ liệu khác nhau
Mỗi nút có hai con trỏ, trỏ tới nút trước và nút sau
Kích thước cố định khi khai báo
Không cần cấp phát động
Hai thao tác nào sau đây là thao tác cơ bản của ngăn xếp?
Insert và Delete
Push và Pop
Enqueue và Dequeue
Add và Remove
Khi thực hiện thao tác Pop trong ngăn xếp, điều gì xảy ra?
Thêm phần tử mới vào cuối
Xóa phần tử ở đỉnh ngăn xếp
Xóa phần tử ở đáy ngăn xếp
Sắp xếp lại ngăn xếp
Ngăn xếp thường được sử dụng trong tình huống nào?
Duyệt cây theo chiều rộng
Tính toán biểu thức số học
Quản lý hàng đợi tiến trình
Truy cập cơ sở dữ liệu
Trạng thái "ngăn xếp rỗng" xảy ra khi:
Push vào ngăn xếp đầy
Pop từ ngăn xếp rỗng
Truy cập phần tử ở giữa ngăn xếp
Khởi tạo ngăn xếp chưa cấp phát bộ nhớ
Hàng đợi (Queue) hoạt động theo nguyên tắc nào?
LIFO (Last In, First Out)
FIFO (First In, First Out)
FILO (First In, Last Out)
LILO (Last In, Last Out)
Trong hàng đợi, phần tử được đưa vào ở đâu và lấy ra ở đâu?
Vào ở cuối, ra ở cuối
Vào ở đầu, ra ở đầu
Vào ở cuối, ra ở đầu
Vào ở đầu, ra ở cuối
Hàng đợi thường được ứng dụng trong tình huống nào?
Duyệt cây theo chiều sâu
Lập lịch CPU trong hệ điều hành
Tính giá trị biểu thức toán học
Xử lý đệ quy
Trong cây nhị phân, mỗi nút có tối đa bao nhiêu nút con?
1
2
3
Không giới hạn
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à:
Lớn hơn
Nhỏ hơn
Bằng
Không xác định
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à:
i
n
n − i
i − 1
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à:
Thêm trực tiếp, mảng tự mở rộng (luôn được)
Tạo mảng mới lớn hơn, copy tất cả phần tử rồi thêm phần tử
Bỏ phần tử đầu tiên và ghi đè lên vị trí đó (không được phép)
Xóa toàn bộ mảng và tạo lại từ đầu
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?
O(1)
O(log n)
O(n)
O(n²)
Để 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**?
Tìm vị trí nút cần xóa
Cập nhật con trỏ của nút trước để trỏ sang nút sau
Giải phóng bộ nhớ của nút bị xóa
Dịch chuyển toàn bộ phần tử còn lại trong danh sách
Với danh sách liên kết kép, để duyệt từ cuối về đầu, cần:
Con trỏ chỉ đến nút cuối và duyệt ngược qua con trỏ "previous"
Con trỏ chỉ đến nút đầu và duyệt theo con trỏ "next"
Tạo bản sao danh sách và đảo ngược thứ tự
Không thể duyệt ngược được
Để 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?
Chèn vào cuối danh sách
Chèn vào đầu danh sách
Chèn vào vị trí bất kỳ
Thay thế nút đầu tiên
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?
1
2
3
Không có phần tử nào
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à:
[5, 8, 12, 20]
[5, 8, 20]
[20, 5, 8]
[5, 20, 8]
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?
Stack Overflow
Stack Underflow
Cả A và B
Không có vấn đề nào
Để 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à:
Danh sách liên kết
Ngăn xếp
Hàng đợi
Cây
Khi triển khai hàng đợi bằng mảng tĩnh, vấn đề nào thường xảy ra?
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)
Không thể xóa phần tử
Bộ nhớ luôn bị đầy
Không xảy ra vấn đề gì
Để 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à:
Ngăn xếp (Stack)
Danh sách liên kết
Hàng đợi (Queue)
Đồ thị (Graph)
Trong một cây nhị phân có 7 nút, số cạnh của cây là:
6
7
8
9
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à:
1
2
3
4
Trong đồ thị vô hướng có 5 đỉnh và 7 cạnh, tổng bậc của các đỉnh là:
7
10
14
20
Đoạn giả ngữ trên thực hiện thao tác nào với mảng A?
Chèn phần tử mới vào mảng
Nhân đôi giá trị của từng phần tử trong mảng
Tìm phần tử lớn nhất của mảng
Xóa tất cả phần tử bằng 2
Thao tác chính đang được minh họa trong đoạn giả ngữ trên là gì?
Lấy phần tử ra khỏi ngăn xếp
Thêm phần tử vào ngăn xếp
Duyệt tất cả phần tử
Đếm số phần tử hiện có
Theo đoạn giả ngữ trên, thao tác nào sau đây đang diễn ra:
Chèn phần tử vào đầu hàng đợi
Lấy phần tử ở cuối hàng đợi
Lấy phần tử ở đầu hàng đợi và xóa khỏi hàng đợi
Sắp xếp hàng đợi theo thứ tự tăng dần
Đoạn giả ngữ trên biểu diễn thao tác nào sau đây:
Xóa nút đầu danh sách
Thêm nút mới vào đầu danh sách
Tìm nút cuối cùng
Chèn nút vào giữa danh sách
Thuật toán trên duyệt cây nào sau đây: PreOrder(node): if node ≠ NULL then print(node.data) PreOrder(node.left) PreOrder(node.right)
In-order (LNR)
Post-order (LRN)
Pre-order (NLR)
Level-order
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?
Danh sách liên kết
Mảng
Cây nhị phân
Đồ thị
Để 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ì:
Nhanh hơn
Chậm hơn
Bằng nhau
Không thể thực hiện được
Ngăn xếp phù hợp nhất để giải quyết bài toán nào?
Quản lý tiến trình trong hệ điều hành
Hoàn tác thao tác (Undo) trong soạn thảo văn bản
Quản lý máy in
Tìm đường đi ngắn nhất trong bản đồ
Hàng đợi ưu tiên khác hàng đợi thông thường ở chỗ:
Phần tử nào đến trước thì ra trước
Phần tử có giá trị lớn/nhỏ nhất được ưu tiên lấy ra
Các phần tử luôn được lưu trữ tuần tự
Các phần tử không thể xóa
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ả?
Mọi nút đều có đúng 2 con
Nút trái nhỏ hơn nút cha, nút phải lớn hơn nút cha
Cây luôn cân bằng chiều cao
Các nút được thêm theo thứ tự bất kỳ
Trong đồ thị, để kiểm tra xem đồ thị có chu trình hay không, ta thường sử dụng:
BFS hoặc DFS
Dijkstra
Kruskal
Ma trận kề
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?
Ngăn xếp
Danh sách liên kết
Mảng
Đồ thị
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?
Mảng
Danh sách liên kết
Ngăn xếp
Cây AVL
Để 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?
Mảng
Ngăn xếp
Hàng đợi
Cây
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?
Ngăn xếp
Hàng đợi
Cây
Danh sách liên kết
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?
Mảng tĩnh
Danh sách liên kết
Cây nhị phân tìm kiếm cân bằng (AVL/Red-Black)
Ngăn xếp
Để 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?
Đồ thị
Mảng
Ngăn xếp
Danh sách liên kết
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:
Mảng
Danh sách liên kết
Cây
Đồ thị
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:
Hàng đợi
Ngăn xếp
Cây
Danh sách liên kết
Để 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?
Mảng
Cây
Hàng đợi
Đồ thị
