You are on page 1of 2

Mã đề

DH 2013 - 01
TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG
BỘ MÔN KHOA HỌC MÁY TÍNH
***

ĐỀ THI MÔN: CẤU TRÚC DỮ LIỆU Hà nội, .…. /….. / …...


Họ tên: …………………………… VÀ GIẢI THUẬT Trưởng bộ môn
Ngày thi: …../…../….
Lớp: …………………………………
Thời gian 90’
SHSV: ………………………………. (Sinh viên được sử dụng tài liệu)

Bài 1.

a) Đánh giá thời gian thực hiện của thuật toán sau int calsum(int A[], int n, int B[], int m)
{
int sum=0, i=0, j=0;
Trong đó A, B là hai mảng chứa các số nguyên while(i<n && j<m)
không trùng nhau, n, m là số lượng phần tử {
của hai mảng tương ứng. if(A[i]==B[j]) sum = sum+ A[i];
else sum = sum + A[i] + B[j];
Hãy cho biết hàm trên thực hiện công việc gì và i++;
đánh giá thời gian thực hiện của hàm theo j++
}
O-lớn trong trường hợp tồi nhất.
if(i<n) for(;i<n;i++)sum = sum+ A[i];
if(j<m) for(;j<m;j++)sum = sum+ B[i];
b) Cho cây nhị phân như hình bên, hãy đưa ra các return sum
nút theo thứ tự duyệt trước, giữa và duyệt sau }
c) Cho biểu thức hậu tố sau
√ A
Hãy xây dựng cây biểu thức thu được

Bài 2. Trong một chương trình gameshow trên B D


truyền hình, người ta cần quản lý thông tin dự
đoán giá của khán giả về một sản phẩm và lựa
chọn ra người dự đoán giá đúng nhất và sớm H C E F
nhất để trao thưởng. Giả sử để lựa chọn ra
người dự đoán giá gần nhất với giá thực tế và
sớm nhất, ta cần lưu trữ danh sách này theo
G I J
thời gian để tìm kiếm. Hãy mô tả cách lưu trữ
bạn lựa chọn trong trường hợp
a) Số lượng người chơi là không biết trước (có thể rất lớn tới vài chục nghìn người)
b) Số lượng người chơi là nhỏ và biết trước (là số lượng người trong trường quay, khoảng 100 người)

Bài 3. Trong chương trình soạn thảo văn bản để lưu trữ những sửa đổi gần nhất và khôi phục lại ta dùng cấu
trúc Stack. Mỗi khi khôi phục lại trạng thái sửa đổi ta sẽ khôi phục lại một nhóm các sửa đổi gần nhất,
1|Page
không phải mọi sửa đổi đều có thể lưu lại (chỉ một số sửa đổi gần nhất). Hãy mô tả cấu trúc dữ liệu để
lưu trữ và quản lý những sửa đổi này.

Bài 4. Viết hàm tính và trả về tổng của các nút trên cây nhị
42
phân ở mức thứ k.
Đánh giá thời gian thực hiện theo n và k (n là số lượng nút
trên cây)
19 47
VD. Với cây nhị phân ở hình bên thì
16 36 78
k = 2 hàm trả về 16 + 36 + 78 = 130
k = 3 hàm trả về 0

Bài 5. Trong thuật toán chuyển biểu thức dạng trung tố sang dạng hậu tố, ta chỉ minh họa các biểu thức với
toán hạng là 1 chữ số. Tuy nhiên trong trường hợp tổng quát toán hạng có thể có nhiều chữ số. Các bạn
hãy mô tả phương pháp để lưu trữ những biểu thức dạng này?
Bài 6. Giả sử chúng ta có 2 file, mỗi file chứa một danh sách các số nguyên không trùng nhau với số lượng
không quá 1000000 số trên mỗi file. Hãy mô tả thuật toán để trộn hai file vào với nhau sao cho các số
trong file mới cũng không trùng nhau trong trường hợp
a) Các số trong hai file này đã được sắp xếp
b) Các số trong hai file này có thứ tự bất kỳ
Bài 7. ADT ArrayList là một kiểu container với cách lưu trữ động, người dùng không phải khai báo trước số
lượng phần tử tối đa, mỗi khi thêm vào danh sách nó sẽ tự động điều chỉnh kích thước. Các thao tác
chính mà cấu trúc dữ liệu này hỗ trợ gồm
 Add(Object e): thêm một phần tử mới có kiểu là Object vào
 Remove(index i): Loại bỏ một phần tử tại vị trí thứ i
 Size(): Trả về số lượng phần tử hiện có

Để cài đặt ADT này, bạn sẽ dùng cấu trúc dữ liệu nào? Và cái đặt các thao tác trên ra sao?
Đánh giá độ phức tạp của mỗi thao tác theo O-lớn

Bài 8. Cho một cấu trúc danh sách liên kết đơn được khai báo như sau

typedef struct Node


{
int data;
struct Node *pNext;
} NODE

Hãy viết hàm đệ quy void printfReverse(NODE *pHead) để in ra nội dung danh sách theo thứ tự
ngược

2|Page

You might also like