Bài tập thực hành Tuần 5 – Bảng băm Bài 1 – Ôn Danh sách liên kết Thông tin Sinh Viên khai báo như sau struct SINHVIEN { char HoTen[51]; // Họ tên sinh viên char MSSV[10]; // Mã số sinh viên float Die[.]
Trang 1Bài tập thực hành Tuần 5 – Bảng băm
Bài 1 – Ôn Danh sách liên kết
Thông tin Sinh Viên khai báo như sau
struct SINHVIEN {
char HoTen[51]; // Họ tên sinh viên
char MSSV[10]; // Mã số sinh viên
float DiemLT; // Điểm lý thuyết
float DiemTH; // Điểm thực hành
float DiemTB; // Điểm trung bình
}
Điểm trung bình được tính:
DiemTB = DiemLT*0.7 + DiemTH*0.3
Câu hỏi:
1 Hãy lưu danh sách sinh viên dưới dạng danh sách liên kết, biết thông tin sinh viên có cấu trúc dữ liệu khai báo như trên
2 Viết hàm nhập danh sách sinh viên
3 Viết hàm sắp xếp danh sách sinh viên theo thứ tự mã số sinh viên (MSSV) tăng dần
4 Viết hàm xếp loại, và in ra danh sách sinh viên có thông tin xếp loại:
Xếp loại:
- Nếu: DiemTB < 5, hoặc (DiemLT=0), hoặc (DiemTH=0) : Học lại (“HocLai”)
- Nếu: 5 <= DiemTB < 7 : Trung bình ("TrungBinh")
- Nếu: 7 <= DiemTB <8 : Khá ("Kha")
- Nếu: 8 <= DiemTB <9 : Giỏi ("Gioi")
- Nếu: 9 <= DiemTB <=10: Xuất sắc ("XuatSac")
5 Viết hàm xoá các sinh viên có điểm trung bình nhỏ hơn 5 (DiemTB < 5)
6 Viết chương trình cài đặt danh sách sinh viên để kiểm thử lại các hàm đã viết
Bài 2 – Hiện thực Bảng băm -Hashtable
a) Hiện thực Bảng băm với phương pháp Chaining (Giải quyết đụng độ theo phương pháp mắc xích)
Kiểu list<> của thư viện chuẩn STL được hướng dẫn sử dụng trong bảng sau:
Phương thức Ý nghĩa
size() Trả về số phần tử của danh sách
push_back(g) Thêm phần tử mới ‘g’ vào cuối danh sách
Trang 2erase() Xoá một phần tử từ danh sách
resize() Thay đổi kích thước của mảng
begin() Trả về một iterator chỉ tới phần tử đầu tiên trong danh sách end() Trả về một iterator chỉ tới phần tử cuối cùng trong danh sách
Sử dụng kiểu list<T> để cài đặt Bảng băm – Hashtable
Bảng 2.1: Mã nguồn chương trình hiện thực Bảng băm
b) Hiện thực Bảng băm theo phương pháp Linear Probing (Phương pháp giải quyết đụng độ theo dò tìm tuyến tính)
Hướng dẫn: Tham khảo về hiện thực bảng băm theo link sau:
http://interactivepython.org/runestone/static/pythonds/SortSearch/Hashing.html#fig-chaining
Bài 3
Thiết kế một cấu trúc dữ liệu thực hiện các tác vụ: thêm _insert, xoá _delete, tìm kiếm _search và tạo số ngẫu nhiên _getRandom với O(1) (constant time)
Hướng dẫn: Mã nguồn được viết trước một phần trong Bảng 2.1
/* Hiện thực Bảng băm với Kiểu Dữ liệu list */
#include <iostream>
#include <list>
using namespace std;
// Khai báo Bảng_băm
typedef struct {
int slots; // số ô nhớ của Bảng băm
list <int> *htable;
} Hash ;
// Cài đặt Các phương thức của Bảng băm
// Hàm băm
int hashFunc( Hash & h , int ) {
return ( x % h slots);
}
// Phương thức thêm một phần tử x vào Bảng băm
void insertItem( Hash &h, int x);
// Xoá một khoá khỏi Bảng băm
void deleteItem( Hash &h, int key);
Trang 3Bài 4 Duyệt cây nhị phân theo thứ tự cột như sau:
Ví dụ:
Output:
A : 4
B : 2
C : 1 5 6
D : 3 8
E : 7
F : 9
=======================oOo=======================