You are on page 1of 4

Câu 1 (1đ).

Đệ quy quay lui


Cho đoạn chương trình sau đây:
Chương trình 1
#include <stdio.h>
int S, n, m, count;
void TRY(int k, int last){
for(int v = last+1; v <= m; v++){
S += v;
if(k == n){
if(S == m) count++;
}else TRY(k+1,v);
S -= v;
}
}
int main(int argc, char** argv){
n = 3; m = 10; count = 0; S = 0;
TRY(1,0);
printf("%d\n",count);
}
Hãy giải thích và cho biết kết quả hiển thị ra màn hình của Chương trình 1 nói trên.

Câu 2 (2đ). Danh sách liên kết


Mỗi nút của danh sách liên kết đơn có cấu trúc dữ liệu như sau:
struct Nut{
int giatri; /* giá trị của nút*/
Nut* tiep; /* con trỏ trỏ đến nút tiếp theo*/
};

a) Lập trình hàm int tongle(Nut* dau) tính và trả về tổng giá trị của các nút có giá trị là số lẻ của danh sách
liên kết có con trỏ đầu là dau.

b) Lập trình hàm Nut* loaibo(Nut* dau) thực hiện loại bỏ nút đầu tiên khỏi danh sách có con trỏ đầu là dau và
trả về con trỏ trỏ đến nút đầu của danh sách mới thu được.

Câu 3 (3đ). Cây nhị phân tìm kiếm


a) Nêu định nghĩa cây AVL, giải thích ưu điểm chính của cây AVL so với cây nhị phân tìm kiếm thông thường (BST).

b) Vẽ cây nhị phân tìm kiếm (BST) tạo thành bằng việc chèn lần lượt các phần tử của dãy khóa sau đây (bắt đầu từ cây
rỗng): 10, 6, 17, 25, 4, 29, 8, 20, 13.

c) Vẽ cây nhị phân tìm kiếm (BST) tạo thành sau khi loại bỏ nút có khóa bằng 10 ra khỏi cây thu được ở câu b).

Câu 4 (1đ). Cho mảng số nguyên A[1..6] sau đây:


8 5 2 9 4 3

Mảng A cần được sắp xếp theo thứ tự không giảm.


Yêu cầu: Đưa ra trạng thái của mảng A qua từng bước lặp trong thuật toán sắp xếp lựa chọn (Selection Sort)

Câu 5 (2đ). Cho cây biểu thức sau đây:


+

/ *

8 2 2 3

a) Viết biểu thức hậu tố của biểu thức được biểu diễn bởi cây biểu thức trên
b) Trình diễn thuật toán tính giá trị của biểu thức hậu tố thu được ở câu a).
THI CUỐI KỲ
Cấu trúc dữ liệu và giải thuật - ĐỀ 2
Lớp QT76754
Thời gian 90 phút - không được sử dụng tài liệu - nộp lại đề
(chú ý: đề thi có 2 mặt)

Câu 1 (2đ). Danh sách liên kết


Mỗi nút của danh sách liên kết đơn có cấu trúc dữ liệu như sau:
struct Nut{
int giatri; /* giá trị của nút*/
Nut* tiep; /* con trỏ trỏ đến nút tiếp theo*/
};

a) Lập trình hàm int tongchan(Nut* dau) tính và trả về tổng giá trị của các nút có giá trị là số chẵn
của danh sách liên kết có con trỏ đầu là dau.

b) Lập trình hàm Nut* loaibo(Nut* dau) thực hiện loại bỏ nút đầu tiên khỏi danh sách có con trỏ đầu
là dau và trả về con trỏ trỏ đến nút đầu của danh sách mới thu được .

Câu 2 (1đ). Đệ quy quay lui


Cho đoạn chương trình sau đây:
Chương trình 1
#include <stdio.h>
int S, n, m, count;
void TRY(int k, int last){
for(int v = last+1; v <= m; v++){
S += v;
if(k == n){
if(S == m) count++;
}else TRY(k+1,v);
S -= v;
}
}
int main(int argc, char** argv){
n = 3; m = 10; count = 0; S = 0;
TRY(1,0);
printf("%d\n",count);
}
Hãy giải thích và cho biết kết quả hiển thị ra màn hình của Chương trình 1 nói trên.

Câu 3 (3đ). Cây nhị phân tìm kiếm


a) Nêu định nghĩa cây AVL, giải thích ưu điểm chính của cây AVL so với cây nhị phân tìm kiếm thông
thường (BST).

b) Vẽ cây nhị phân tìm kiếm (BST) tạo thành bằng việc chèn lần lượt các phần tử của dãy khóa sau đây
(bắt đầu từ cây rỗng): 12, 6, 17, 23, 2, 30, 8, 22, 15.

c) Vẽ cây nhị phân tìm kiếm (BST) tạo thành sau khi loại bỏ nút có khóa bằng 12 ra khỏi cây thu được ở
câu b).

Câu 4 (1đ). Cho mảng số nguyên A[1..6] sau đây:


7 6 1 8 3 2

Mảng A cần được sắp xếp theo thứ tự không giảm.


Yêu cầu: Đưa ra trạng thái của mảng A qua từng bước lặp trong thuật toán sắp xếp lựa chọn (Selection Sort)
Câu 5 (2đ). Cho cây biểu thức sau đây:
+

/ *

8 4 5 2

a) Viết biểu thức hậu tố của biểu thức được biểu diễn bởi cây biểu thức trên
b) Trình diễn thuật toán tính giá trị của biểu thức hậu tố thu được ở câu a).

Câu 6 (1đ). Cho xâu văn bản T và xâu mẫu P sau đây:

T m n m n n p m n n p m n p

P n n p m n n
Trình diễn thuật toán Boyer Moore tìm tất cả các vị trí xuất hiện của P trong T.

You might also like