Câu 1 : (2 m) đi
Cho c u trúc d li u danh sách liên k t n và hàm RPrint nh d i ây : ế đơ ư ướ đ
Hàm void RPrint(List ls)
Anh / ch hãy vi t hàm RPrint in lên màn hình các ph n t trong danh sách ls theo ế để
th t t ph n t cu i n ph n t u ( đế đầ không dùng m ng ph ho c danh sách
ph).
Thang m : đi
- SV th c hi n theo úng yêu c a câu h đ u c i (không dùng m ng ph ho c danh sách
ph).
- SV có th s d ng hàm qui ho c vòng l đệ để đ p thc hi n úng yêu c u s có tr n
đ i m câu h i.
Đáp án tham kho :
void RPrint(List ls) {
if (ls.pHead == NULL) return;
Node *p = ls.pHead;
if (ls.pHead != ls.pTail) u ki// Có th n ki không c m tra đi n này c ng c ũ đượ
{ ls.pHead = p->pNext;
RPrint(ls);
}
cout << p->info << " ";
}
Câu 2 : (2 m) đi
Cho chu i các thao tác nh sau: ư
RTU*I**MUN***EB***1*ON
TRƯỜNG ĐẠI H C CÔNG NGH THÔNG TIN
KHOA KHOA H C MÁY TÍNH
ĐÁP ÁN và THANG ĐIM THAM KHO
ĐỀ THI CU I K
HC K 2 – N M H C 2017-2018 Ă
Môn thi: C u trúc d li u và gi i thu t
Mã l p: Các l p IT003 - H i trà đạ
struct Node
{ int info;
Node *Next;
};
struct List
{ Node *Head ;
Node *Tail;
};
MSSV:............................ Trang / 1 4
Biết r ng: v i m i ch cái t ng tr ng cho thao tác thêm ch cái t ng ng vào ượ ư ươ Stack
(ng p)ăn xế ; v i m i d u * t ng tr ng cho thao tác l y n i dung m t ph n t trong ượ ư
stack in ra màn hình. Anh / ch hãy cho bi t sau khi hoàn t t chu i thao tác trên, ế
nhng ch cái nào còn trong stack và nh ng ch cái nào c in ra màn hình. đượ
Thang m : đi
SV có th th c hi n theo m t trong 4 ph ng án s có tr n m: ươ đi
-
Thao tác l y n i dung ph n t theo hàm pop, chu i thao tác bao g m k t 1. ý
-
Thao tác l y n i dung ph n t theo hàm pop, chu i thao tác không bao g m k t 1. ý
-
Thao tác l y n i dung ph n t theo hàm top, chu i thao tác bao g m k t 1. ý
-
Thao tác l y n i dung ph n t theo hàm top, chu i thao tác không bao g m k t 1. ý
Câu 3 : (4 m) đi
Cho dãy s nh sau : {93, 11, 97, 65, 27, 70, 13, 83, 54, 101} ư
Anh / ch hãy th c hi n :
a. Xây d ng cây nh phân tìm ki m t dãy s trên (1.5 ế l in l t t trái sang phượ
đ i m)
Đáp án :
-
SV v chính xác cây nh phân tìm ki m theo úng th t c a dãy s trong câu h i ế đ
vi s nút 93 là nút g c.
-
SV th v cây nh phân tìm ki m k t qu cu i cùng ho c v t ng b c u c ế ế ướ đề đượ
tính úng đ
Thang m : đi
-
SV v úng cây nh phân tìm ki m theo yêu c u t trái sang ph i c a dãy s v i nút đ ế
g ic là 93 s c tr n s đượ đ m.
-
SV v c 1/2 s nút (5 nút) úng ho c 1/3 s nút (3 nút) úng s thang m đượ đ đ đi
t i iương ng 1/2 ho c 1/3 đ m c a câu h i, v i đ u ki n nút g c c a cây ph i
nút 93 theo yêu c u.
-
SV v cây nh phân tìm ki m úng, nh ng nút g c sai (không ph i 93) ế đ ư s không có
đ i m.
b. Xóa l n l t theo th t các nút {54, 11, 93} (1.5 m) ượ đi
Lưu : Khi xóa 1 nút, cân b ng cây khi x y ra m t cân b ng, cho bi t nút b ý ế
mt cân b ng và lo i m t cân b ng
Đáp án :
S ch p nh n các l i gi i áp l p lu n h p l (nh cân b ng cây câu 3.a đ ý ư
sau ó xoá 3 s /node ho c áp d ng qui t c cân b ng cây nh phân tìm ki m cân đ ế
bng khi xoá 3 s /node ho c duy t cây l y ra các s /node sau ó xây cây nh đ
phân tìm ki m cân b ng) cu i cùng xây d ng c cây cân b ng AVL v i ế đượ
chui s ã cho ( ã lo i b 3 s /node). đ đ
MSSV:............................ Trang / 2 4
Thang m : đi
- SV v c cây cân b ng cu i cùng úng l p lu n h p l s tr n đượ đ ý
đ đ i m (1.5 i m)
- SV v c cây cân b ng cu i cùng úng, nh ng không trình bày l do vì sao đượ đ ư ý
có cây k t qu : tr 0.75 m. ế đi
c. Viết hàm m s nút trên cây ch có duy nh t 1 nút con ph i (1 m) đế đi
Thang m : đi
-
SV có th s d ng hàm qui ho c vòng l đệ để đ p thc hi n úng yêu c u s có tr n
đ i m câu h i.
Đáp án tham kho :
int count(Tree* pTree)
{
if (pTree==NULL) return 0;
if ((pTree->left==NULL && pTree->right!=NULL)
return 1+count(pTree->left)+count(pTree->right);
else return count(pTree->left)+count(pTree->right);
}
Câu 4 : (2 m) đi
Cho t p khóa = {12, 44, 13, 88, 23, 94, 11, 39, 20, 16, 5} và hàm b m : K ă ,
H ) (key) = (2*key+5 %11 ( : khóa c n bkey ăm).,
Anh / ch hãy th c hi n :
a. V ướ ă ướ hình tng b c vi c lưu tr tng khóa trong vào bK ng b m có kích th c,
M=11, dùng hàm b m và ph ng pháp x l xung t. ă H ươ ni k t tr c tiế ếp để ý độ
(1 m) đi
Đáp án :
-
SV ph i v hình t ng b c úng khi thêm t ng s vào b ng b m ướ đ ă
Thang m : đi
-
SV v b ng b m g m 11 ph n t úng : 0.125 m ă đ đi
-
SV b trí s u tiên vào b ng b m úng : 0.125 m đầ ă đ đi
-
SV b trí úng vào b ng b m nhóm ng có s d 4 (s 16, 5) : 0.125 đ ă đụ độ ư
-
SV b trí úng vào b ng b m nhóm ng có s d 6 (s 39,94) : 0.125 đ ă đụ độ ư
-
SV b trí úng vào b ng b m nhóm ng có s d 5 (s 44, 88, 94) : 0.25 đ ă đụ độ ư
-
SV b trí úng vào b ng b m nhóm ng có s d 7 (23) : 0.125 đ ă đụ độ ư
-
SV b trí úng vào b ng b m các s không ng (20, 13) : 0.125 đ ă đụ độ
MSSV:............................ Trang / 3 4
b. Đị ĩ ă đ nh ngh a c u trúc d li u cho b ng b m câu a (1 i m)
Thang m : đi
- SV nh ngh a CTDL úng : 0.5 m đị ĩ đ đi
#define M 11
typedef struct tagNODE
{ int key;
tagNODE *next
}NODE, *NODEPTR;
- SV khai báo b ng b m úng : 0.5 m ă đ đi
/* khai bao mang bucket chua M con tro dau cua Mbucket */
NODEPTR bucket[M];
HT
MSSV:............................ Trang / 4 4

Preview text:

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
ĐÁP ÁN và THANG ĐIỂM THAM KHẢO ĐỀ THI CUỐI KỲ
KHOA KHOA HỌC MÁY TÍNH
HỌC KỲ 2 – NĂM HỌC 2017-2018
Môn thi: Cấu trúc dữ liệu và giải thuật
Mã lớp: Các lớp IT003 - Hệ đại trà Câu 1 : (2 điểm)
Cho cấu trúc dữ liệu danh sách liên kết đơn và hàm RPrint như dưới ây : đ struct Node struct List { Node *Head ; { int info; Node *Tail; Node *Next; }; }; Hàm void RPrint(List ls)
Anh / chị hãy viết hàm RPrint để in lên màn hình các phần tử trong danh sách ls theo
thứ tự từ phần tử cu i
ố đến phần tử đầu (không dùng m ng
phụ hoặc danh sách phụ). Thang điểm :
- SV th
c hin theo đúng yêu cu ca câu hi (không dùng m ng ph
ụ ho c danh sách phụ).
- SV có thể sử d ng hàm đệ qui ho c vòng l ặ để p
thực hiện đúng yêu cầu sẽ có trọn điểm câu hỏi.
Đáp án tham khảo : void RPrint(List ls) {
if (ls.pHead == NULL) return; Node *p = ls.pHead;
if (ls.pHead != ls.pTail) // Có th không cn kim tra điu kin này cũng được
{ ls.pHead = p->pNext; RPrint(ls); }
cout << p->info << " "; } Câu 2 : (2 điểm)
Cho chu i các thao tác nh ỗ ư sau: RTU*I**MUN***EB***1*ON
MSSV:............................ Trang 1 / 4 Biết rằng: với m i ch ỗ
ữ cái tượng trưng cho thao tác thêm chữ cái tương ứng vào Stack
(ngăn xếp); với m i
ỗ dấu * tượng trưng cho thao tác lấy n i ộ dung m t ộ phần tử trong
stack và in ra màn hình. Anh / chị hãy cho biết sau khi hoàn tất chu i ỗ thao tác trên,
những chữ cái nào còn trong stack và những chữ cái nào được in ra màn hình. Thang điểm :
SV có thể thực hiện theo một trong 4 phương án sẽ có tr n
ọ điểm: - Thao tác l y n i dung ph
ần tử theo hàm pop, chuỗi thao tác bao gồm ký tự 1. - Thao tác l y n i dung ph
ần tử theo hàm pop, chuỗi thao tác không bao g m k ý tự 1. - Thao tác l y n i dung ph
ần tử theo hàm top, chu i thao tác bao g m k ý tự 1. - Thao tác l y n i dung ph
ần tử theo hàm top, chu i thao tác không bao g m k ý tự 1. Câu 3 : (4 điểm) Cho dãy s nh ố
ư sau : {93, 11, 97, 65, 27, 70, 13, 83, 54, 101}
Anh / chị hãy thực hiện :
a. Xây dựng cây nhị phân tìm kiếm từ dãy s trên ố
lần lượt từ trái sang ph i (1.5 điểm) Đáp án :
- SV vẽ chính xác cây nhị phân tìm kiếm theo đúng thứ tự của dãy số trong câu h i

với s nút 93 là nút g c.
- SV có thể vẽ cây nhị phân tìm kiếm kết qu ả cu i ố cùng ho c
ặ vẽ từng bước đều được tính úng đ Thang điểm : - SV vẽ úng đ
cây nhị phân tìm kiếm theo yêu c u t
ầ ừ trái sang ph i ả c a dãy s v ố ới nút
gốc là 93 sẽ được tr n s ố điểm.
- SV vẽ được 1/2 s ố nút (5 nút) úng đ ho c
ặ 1/3 số nút (3 nút) úng đ sẽ có thang điểm
tương ứng là 1/2 ho c ặ 1/3 i đ ểm c a ủ câu h i, ỏ với i
đ ều kiện nút g c ố c a ủ cây phải là nút 93 theo yêu c u.
- SV vẽ cây nhị phân tìm kiếm úng, đ nhưng nút g c ố sai (không ph i
ả 93) sẽ không có điểm.
b. Xóa lần lượt theo thứ tự các nút {54, 11, 93} (1.5 điểm) Lưu :
ý Khi xóa 1 nút, cân bằng cây khi xảy ra mất cân bằng, cho biết nút bị
mất cân bằng và loại mất cân bằng Đáp án : Sẽ ch p ấ nh n ậ các lời gi i ả đáp có l p ậ lu n
ậ hợp lý (như cân b ng cây ở câu 3.a sau ó xoá 3 s đ /node hoặc áp d ng qui t c cân b
ằng cây nhị phân tìm kiếm cân
bằng khi xoá 3 s /node ho c
ặ duyệt cây lấy ra các s /node sau ó đ xây cây nhị
phân tìm kiếm cân b ng) và cu i
ố cùng xây dựng được cây cân b ng AVL với chuỗi s ố ã cho ( đ ã lo đ i b 3 s ố/node).
MSSV:............................ Trang 2 / 4 Thang điểm :
- SV vẽ được cây cân bằng cu i
ố cùng úng đ và có l p ậ lu n
ậ hợp lý sẽ có tr n điểm (1.5 điểm)
- SV vẽ được cây cân b ng cu
i ố cùng úng, nh đ
ưng không trình bày lý do vì sao có cây kết qu : tr ừ 0.75 điểm.
c. Viết hàm đếm s nút trên câ ố
y chỉ có duy nhất 1 nút con phải (1 điểm) Thang điểm :
- SV có thể sử d ng hàm
đệ qui ho c vòng l ặ để p thực hiệ đ
n úng yêu cầu sẽ có trọn điểm câu hỏi. Đáp án tham khảo : int count(Tree* pTree) { if (pTree==NULL) return 0;
if ((pTree->left==NULL && pTree->right!=NULL)
return 1+count(pTree->left)+count(pTree->right);
else return count(pTree->left)+count(pTree->right); }
Câu 4 : (2 điểm)
Cho tập khóa K = {12, 44, 13, 88, 23, 94, 11, 39, 20, 16, 5} và hàm băm :,
H(key) = (2*key+5) %11 (key: khóa cần băm).,
Anh / chị hãy thực hiện : a. Vẽ hình từ ướ
ng b c việc lưu trữ từng khóa trong K vào bả ă ng b m có kích thước,
M=11, dùng hàm băm H và phương pháp nối kết trực tiếp để xử l ý xung t. độ (1 điểm) Đáp án : - SV ph i v
ả ẽ hình từng bước úng khi thêm t đ
ừng số vào bảng b m ă Thang điểm : - SV vẽ b ng b ăm g m 1
1 phần tử úng : 0.125 đ điểm - SV bố trí s u tiên vào b đầ ng b ăm úng : 0.125 đ điểm
- SV bố trí úng vào b đ ng b m nhóm ă ng đụ có s độ d
ố ư 4 (s 16, 5) : 0.125
- SV bố trí úng vào b đ ng b m nhóm ă ng đụ có s độ d
ố ư 6 (s 39,94) : 0.125
- SV bố trí úng vào b đ ng b m nhóm ă ng đụ có s độ d
ố ư 5 (s 44, 88, 94) : 0.25
- SV bố trí úng vào b đ ng b m nhóm ă ng đụ có s độ d ố ư 7 (23) : 0.125
- SV bố trí úng vào b đ ng b m các s ă không ng đụ (20, 13) : 0.125 độ
MSSV:............................ Trang 3 / 4
b. Định nghĩa cấu trúc dữ liệu cho bả ă ng b m ở câu a (1 điểm) Thang điểm :
- SV định nghĩa CTDL úng : 0.5 đ điểm #define M 11 typedef struct tagNODE { int key; tagNODE *next }NODE, *NODEPTR; - SV khai báo b ng b m ă úng : 0.5 đ điểm
/* khai bao mang bucket chua M con tro dau cua Mbucket */ NODEPTR bucket[M]; HẾT
MSSV:............................ Trang 4 / 4