



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 hiện theo đúng yêu cầu của câu hỏ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 
 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 cần kiểm tra điều kiện 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