Đề thi môn cấu trúc dữ liệu và giải thuật

Câu 1. Cho danh sách sinh viên. Mỗi sinh viên được mô tảbởi các thuộc tính họtên, tuổi, giới tính. 1. Hãy cài đặt danh sách sinh viên bởi danh sách liên kết. 2. Hãy viết thủtục loại khỏi danh sách tất cảcác sinh viên nữ. Câu 2. Cho danh sách các số nguyên được sắp xếp theo thứtựkhông giảm với danh sách được cài đặt bởi mảng: 1. Hãy khai báo CTDL biểu diễn dánh sách đó. 2. Hãy viết thủtục xem vào sanh sách một số nguyên mới n sao cho danh sách nhận được vẫn còn được sắp theo thứ tự không giảm.

pdf11 trang | Chia sẻ: lylyngoc | Lượt xem: 2401 | Lượt tải: 1download
Bạn đang xem nội dung tài liệu Đề thi môn cấu trúc dữ liệu và giải thuật, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
Bản quyền tài liệu thuộc về diễn đàn ĐỀ THI 1 MÔN CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Thời gian: 120 phút Câu 1. Cho danh sách sinh viên. Mỗi sinh viên được mô tả bởi các thuộc tính họ tên, tuổi, giới tính. 1. Hãy cài đặt danh sách sinh viên bởi danh sách liên kết. 2. Hãy viết thủ tục loại khỏi danh sách tất cả các sinh viên nữ. Câu 2. Cho danh sách các số nguyên được sắp xếp theo thứ tự không giảm với danh sách được cài đặt bởi mảng: 1. Hãy khai báo CTDL biểu diễn dánh sách đó. 2. Hãy viết thủ tục xem vào sanh sách một số nguyên mới n sao cho danh sách nhận được vẫn còn được sắp theo thứ tự không giảm. Câu 3. Một mảng rỗng gồm 11 ô được đánh số từ 0 đên 10 dùng để lưu trữ các số nguyên. Các số nguyên k được đưa vào mảng bởi hàm băm: h(k) = (k – 3*i)%11 (i = 0,1,…) Hãy đưa các dãy số nguyên 15, 20, 6, 9, 17 vào mảng. Giải thích tại sao chúng lại được đưa vào những vị trí đó trong mảng. Câu 4. Cho đồ thị định hướng sau: Đi qua đồ thị xuất phát từ đỉnh 1. 1. Hãy đưa ra rừng các cây tạo thành khi đi qua đồ thị theo bề rộng và danh sách các đỉnh theo thứ tự đã đi qua. 2. Hãy đưa ra rừng các cây tạo thành khi đi qua đồ thị theo bề sâu và danh sách các đỉnh theo thứ tự đã đi qua. 2 3 4 5 6 7 1 Bản quyền tài liệu thuộc về diễn đàn ĐỀ THI 2 MÔN CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Thời gian: 120 phút Câu 1. (2 điểm) Khoa Công nghệ được biểu diễn bởi danh sách các lớp. Mỗi lớp được biểu diễn bởi tên lớp và danh sách sinh viên của lớp. Mỗi sinh viên được biểu diễn bởi tên, năm sinh, giới tính. Danh sách các lớp được cài đặt bởi danh sách liên kết. Hãy khai báo CTDL biểu diễn Khoa Công nghệ, Cho biểu diễn hình học CTDL này. Câu 2. ( 2,5 điểm) Cho 2 danh sách các số nguyên được cài đặt bởi danh sách liên kết. Ta cần kết hợp 2 danh sách thành một danh sách bằng cách nôi đuôi danh sách thứ nhất tới đầu danh sách thw hai. Ví dụ, từ 2 danh sách L1 và L 2, sau khi nối ta được L như sau: a) Khai báo CTDL biểu diễn danh sách liên kết b) Từ 2 danh sách liên kết ( có thể rỗng), hãy viết hàm kết nối 2 danh sách thành một danh sách. Câu 3. (2,5 điểm) Các giá trị khóa của cây tìm kiếm nhị phân là số nguyên. Cho dãy các số nguyên: 5, 1, 6, 8, 4, 9, 7 a) Áp dụng thủ tục xen vào cây bắt đầu từ cây rỗng, hãy xây dựng cây tìm kiếm nhị phân, bằng cách xem vào các đỉnh mới có khóa lần lượt là 5, 1, 6, 8, 4, 9, 7 b) Từ cây đã xây dựng, hãy dưa ra dãy các khóa theo các thứ tự: trước, trung và sau. Câu 4. (2 điểm) Mỗi người có giá trị ưu tiên là số nguyên. Mỗi người được biểu diễn bởi tên, và giả trị ưu tiên. Hàng ưu tiên được lưu trong mảng theo thứ tự giảm dần của giá trị ưu tiên. Chẳng hạn, An có GTƯT là 5, Ba và Lan có GTƯT là 2 và 4 được lưu trong mảng sau: 0 1 2 Max-1 a) Khai báo CTDL cài đaẹt hàng ưu tiên bởi mảng như trên b) Viết hàm loại người có giá trị ưu tiên nhỏ nhất. Câu 5. (1 điểm) Áp dụng thuật toán sắp xếp nổi bọt cho mảng sau Yêu cầu: Đưa ra kết quả của từng bước 7 5 9 4 3 7 5 9 4 3 L1 L2 L An Lan Ba 5 4 2 9 4 7 1 3 Bản quyền tài liệu thuộc về diễn đàn ĐỀ THI 3 MÔN CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Thời gian: 120 phút Câu 1. Cho danh sách tên của mỗi lớp. Mỗi sinh viên được biểu diễn bởi 2 trường: ten, diem. Danh sách được cài đặt bởi danh sách liên kết. 1. Hãy khai báo CTDL cài đặt danh sách đó. 2. Viết thủ tục tính điểm trung bình của lớp đó. 3. Viết thủ tục loại khỏi danh sách tất cả sinh viên có điểm bằng p cho trước. Câu 2. Cho một cây, mỗi đỉnh có tối đa K đỉnh con. Thông tin chứa trong mỗi đỉnh là số thực. Cây được cài đặt cách chỉ ra danh sách các con của mỗi đỉnh và sử dụng con trỏ. 1. Khai báo CTDL cài đặt cây bằng cách trên. 2. Viết thủ tục đi qua cây theo độ sâu ( đệ quy hoặc không đệ quy) để tính tổng các số thực lưu trong các đỉnh của cây. Câu 3. Cho bảng băm đóng gồm 11 thành phần. Các giá trị khóa là các số nguyên và được đưa vào bảng bởi hàm băm: h(x) = x%11. Va chạm được giải quyết bằng cách băm lại bình phương. Từ bảng băm rỗng, sử dụng tồi đa 3 lần bă lại, hãy đưa ra bảng băm kết quả khi thực hiện các hành động sau: 1. Xen vào 5099, 23,, 213, ,36, 300, 19, 283. 2. Loại 300, 36 rồi xen vào 146, 360, 480. Yêu cầu: cần giải thích tại sao nhận được kết quả như thế. Câu 4. Trình bày tư tưởng của thuật toán PRIM tìm cây bao trùm ngắn nhất của đồ thị vô hướng liên thông có trọng số. Mô tả thuật toán này. Áp dung thuật toán để tìm cây bao trùm ngắn nhất củ đồ thị sau Yêu cầu: Cần phải tìm ra kết quả của mỗi bước và giải thích. A DC EF B 7 2 2 9 3 6 4 4 6 1 Bản quyền tài liệu thuộc về diễn đàn ĐỀ THI 4 CTDL VÀ GIẢI THUẬT Cho K46CA, CB,CC (Thời gian: 120 phút) Câu 1. (3 điểm) Kiểu dữ liệu trừu tượng được xác định như sau: • Các đối tượng DL là các danh sách số nguyên được sắp xếp theo thứ tự không giảm. • Các phép toán gồm: 1. Tìm xem danh sách có chứa số nguyên cho trước không? 2. Xen một số nguyên mới vào danh sách sao cho sau khi xen, danh sách vẫn còn được sắp 3. Kết hợp 2 danh sách được sắp thành một danh sách được sắp. Danh sách được cài đặt bằng danh sách liên kết. a) Hãy viết file đầu chứa mô tả CTDL và các prototype của các hàm thực hiện các phép toán trên (Với mỗi hàm cần viết ra các điều kiện trước và điều kiện sau) b) Hãy cài đặt hàm xen vào. Câu 2. (2 điểm) Giả sử các đối tượng khác nhau có giá trị ưu tiên khác nhau và hàng ưu tiên được cài đặt bởi cây tìm kiếm nhị phân với khóa tìm kiếm là giá trị ưu tiên. a) Hãy mô tả CTDL biểu diễn hangf ưu tiên trong cáhc cài đặt trên b) Hãy viết hàm loại đối tựong có giái trị ưu tiên nhỏ nhất khỏi hàng ưu tiên. Câu 3. (2,5 điểm) a) Hãy mô tả CTDL biểu diễn bảng băm dây chuyền và viết hàm xem vào bảng băm này theo hàm băm đã cho. b) Giả sử cớ của bảng là 5, các giá trị khóa là các số nguyên không âm. Và hàm băm là hàm chua lấy phần sư. Áp dụng hàm xen vào, từ bẳng băm day chuyền rỗng, hãy đâ vào các dẽ liệu với khóa 9,12,31,217,5.42,16. Cho biểu diễn hình học bảng băm kết quả. Câu 4. (1,5 điểm) a) Hãy trình bày tư tưởng cảu thuật toán đi qua đồ thị theo bề rộng và theo độ sâu. b) Cho đồ thị định hướng trong hình vẽ sau: c) Hãy đưa ra thứ tự các đỉnh được thưm theo bề rộng và độ sâu khi xuất phát từ đỉnh A. Câu 5. (1 điểm) Giả sử các xâu được tạo thành từ 2 lý tự A vàB. Sử dụng ccs phép toán ngăn xếp, hãy viết hàm cho biết một xâu có dạng AnBn (n>=0) hay không? A C E B D H G F Bản quyền tài liệu thuộc về diễn đàn Đề 4 (K46) Câu1 . a.Đặc tả //DL.h // Giải thích về lớp #ifndef _DL_H_ #define _DL_H_ #include class node { int data; node * next; node(int x) { data = x; next = NULL; }; } class DL { public : DL() // Khởi tạo danh sách rỗng // Precondition // Postcondition {Head = NULL ; Tail = NULL; length = 0}; DL(const DL & _dl); // Hàm kiến tạo copy // // ~ DL(); // Hàm hủy // // DL& operator = (const DL & _dl); // Toán tử gán // // Bản quyền tài liệu thuộc về diễn đàn bool Empty() const ; // Xác định xem danh sách có rỗng kô // Precondition : // Postcondition: Trả về true nếu danh sách rỗng int Length() const; // bool IsExist(int x); // Kiểm tra xem danh sách có chứa số nguyên x kô // Precondition : danh sách khác rỗng // Postcondition : trả về true……. void Insert(int x); // // // friend DL& KetHop(const DL& dl1 , const DL& dl2); // // // private : node * Head; node * Tail; int length; } #endif b.Cài đặt void DL :: Insert (int x) { node * Q = new node(x); if (Empty()) { Head = Q ; Tail = Q; length = 1; } node * Pre , P ; Pre = P = Head; While (Pre != Tail) Bản quyền tài liệu thuộc về diễn đàn { if ( x data ) break; Pre = P; P = P->next; } if (P == Head) // Chèn vào đầu { Q -> next = Head; Head = Q; } else if (P == NULL) // Chèn vào cuối { Pre ->next = Q; } else //Chèn vào giữa { Q ->next = P; Pre ->next = Q; } } Câu 2 a.Mô tả //HUT.h // Giải thích về lớp #ifndef _ HUT _H_ #define _ HUT _H_ #include template class node { item data; int key; node(const & item _data , const int & _key) { data = _data ; key = _key; }; friend class HUT; } template class HUT Bản quyền tài liệu thuộc về diễn đàn { public : static const int SIZE = 1000; HUT() // Khởi tạo danh sách rỗng // Precondition // Postcondition HUT (const HUT & _dl); // Hàm kiến tạo copy // // HUT (node * _element , int n) // Xây dựng hàng ưu tiên từ n phần từ lưu trong mảng _element ~ HUT (); // Hàm hủy // // HUT & operator = (const HUT & _dl); // Toán tử gán // // bool Empty() const ; // Xác định xem danh sách có rỗng kô // Precondition : // Postcondition: Trả về true nếu danh sách rỗng int Length() const; // void Insert(node _data); // // // node & FindMin() const; // // // node & DeleteMin(); Bản quyền tài liệu thuộc về diễn đàn // Loại đối tượng có độ ưu tiên nhỏ nhất // // Trả về đối tượng có độ ưu tiên nhỏ nhất private : node element[SIZE]; int last; void ShiftDown(int i); // Đẩy dữ liệu trong đỉnh i xuống vị trí thích hợp // // } #endif b.Cài đặt template node& HUT :: DeleteMin() { assert(last >= 0); element[0] = element[last]; ShiftDown(0); } Câu 3 a1.Mô tả //ChainHash.h // Giải thích về lớp #ifndef _ ChainHash _H_ #define _ ChainHash _H_ #include typedef int keyType; template class ChainHash { public : static const int SIZE = 1000; ChainHash () // Khởi tạo danh sách rỗng // Precondition Bản quyền tài liệu thuộc về diễn đàn // Postcondition ChainHash (const ChainHash & _dl); // Hàm kiến tạo copy // // ~ ChainHash (); // Hàm hủy // // ChainHash & operator = (const ChainHash & _dl); // Toán tử gán // // bool Search(keyType k , Item & I) const; // // // void Insert(const item & _data); // // // void & Delete (keyType k); // Loại đối tượng có độ ưu tiên nhỏ nhất // // Trả về đối tượng có độ ưu tiên nhỏ nhất private : struct CELL { item data; CELL * next; } CELL element[SIZE]; } #endif a2.Cài đặt template void ChainHash:: Insert (const item & _data) Bản quyền tài liệu thuộc về diễn đàn { i = Hash(_data); ………………. } b. Vẽ hình Hàng 0 : 5 Hàng 1 : 31 -> 16 Hàng 2 : 12 -> 217 -> 42 Hàng 3 : Hàng 4 : 9 Câu 4 : a. Theo chiều rộng : A , B , C , G , D , F b. Theo chiều sâu : A , B , G , D , F , C Câu 5 : Giống bài thi Toán rời rạc vừa thi Chúc mọi người thi tốt