Câu hỏi:
13/07/2024 115Sử dụng cây tìm kiếm nhị phân để viết chương trình quản lí danh sách học sinh của một trường trung học phổ thông. Mỗi một học sinh gồm các thông tin: mã học sinh (duy nhất), họ tên, ngày sinh. Chương trình cho phép thêm một học sinh vào danh sách với các trường thông tin kể trên, tìm kiếm học sinh theo mã và sửa đổi họ tên và ngày sinh ứng với một mã học sinh.
Sách mới 2k7: Tổng ôn Toán, Lí, Hóa, Văn, Sử, Địa…. kỳ thi tốt nghiệp THPT Quốc gia 2025, đánh giá năng lực (chỉ từ 110k).
Quảng cáo
Trả lời:
Gợi ý chương trình mẫu về cách sử dụng cây tìm kiếm nhị phân để quản lí danh sách học sinh của một trường trung học phổ thông:
class Student:
def __init__(self, student_id, name, date_of_birth):
self.student_id = student_id
self.name = name
self.date_of_birth = date_of_birth
self.left = None
self.right = None
class StudentManager:
def __init__(self):
self.root = None
def insert(self, root, student_id, name, date_of_birth):
if root is None:
return Student(student_id, name, date_of_birth)
if student_id < root.student_id:
root.left = self.insert(root.left, student_id, name, date_of_birth)
elif student_id > root.student_id:
root.right = self.insert(root.right, student_id, name, date_of_birth)
return root
def add_student(self, student_id, name, date_of_birth):
self.root = self.insert(self.root, student_id, name, date_of_birth)
def search(self, root, student_id):
if root is None or root.student_id == student_id:
return root
if student_id < root.student_id:
return self.search(root.left, student_id)
return self.search(root.right, student_id)
def find_student(self, student_id):
return self.search(self.root, student_id)
def update_student(self, student_id, new_name, new_date_of_birth):
student = self.find_student(student_id)
if student:
student.name = new_name
student.date_of_birth = new_date_of_birth
else:
print("Student not found.")
# Sử dụng chương trình
student_manager = StudentManager()
# Thêm học sinh
student_manager.add_student(1001, "Nguyen Van A", "2005-03-15")
student_manager.add_student(1002, "Tran Thi B", "2004-08-22")
student_manager.add_student(1003, "Le Van C", "2006-01-10")
# Tìm kiếm học sinh
student = student_manager.find_student(1002)
if student:
print(f"Student found - Student ID: {student.student_id}, Name: {student.name}, Date of Birth: {student.date_of_birth}")
else:
print("Student not found.")
# Cập nhật thông tin học sinh
student_manager.update_student(1001, "Pham Thi D", "2005-05-20")
# Kiểm tra lại thông tin sau khi cập nhật
student = student_manager.find_student(1001)
if student:
print(f"Updated student - Student ID: {student.student_id}, Name: {student.name}, Date of Birth: {student.date_of_birth}")
else:
print("Student not found.")
Lưu ý trong mã chương trình này:
- Lớp Student đại diện cho mỗi học sinh, với các thuộc tính là student_id (mã học sinh), name (họ tên) và date_of_birth (ngày sinh).
- Lớp StudentManager chứa các phương thức để thêm học sinh vào danh sách, tìm kiếm học sinh theo mã và cập nhật thông tin học sinh. Mỗi học sinh được lưu trữ trong một cây tìm kiếm nhị phân, với student_id làm khóa.
CÂU HỎI HOT CÙNG CHỦ ĐỀ
Câu 1:
Trong Bài 7, cây tìm tìm kiếm nhị phân được cài đặt bằng mảng một chiều và mỗi nút của cây có khoá là một thuộc tính. Trong thực tế, một đối tượng có thể có nhiều thuộc tính. Ví dụ, với bài toán quản lí các món trong thực đơn, mỗi món có hai thuộc tính là tên và giá tiền. Trong trường hợp này, cây tìm kiếm nhị phân biểu diễn danh sách các món được cài đặt bằng mảng như thế nào và làm thế nào để mỗi nút của cây chứa hai thuộc tính là tên và giá tiền?
Câu 2:
Vẽ cây tìm kiếm nhị phân ứng với tệp menu.inp trong nhiệm vụ thực hành, lưu ý mỗi nút gồm hai thuộc tính name và price.
Câu 3:
Sử dụng cây tìm kiếm nhị phân để viết ứng dụng quản lí tài khoản ngân hàng. Mỗi một tài khoản gồm mã tài khoản (duy nhất) và số dư tài khoản. Ứng dụng cho phép thêm tài khoản, sửa số dư tài khoản, tìm kiếm tài khoản theo mã tài khoản.
Câu 4:
về câu hỏi!