Xây dựng các hàm sau trên danh sách liên kết, nội dung các phần tử kiểu số thực: a. Sắp xếp danh sách có thứ tự tăng dần. b. Trộn 2 danh sách có thứ tự giảm dần thành 1 danh sách có thứ tự giảm dần. d. Cho biết nội dung của phần tử nhỏ nhất Tham khảo câu trả lời từ Trợ lý ảo Lazi Để xây dựng các hàm như bạn yêu cầu trên danh sách liên kết (linked list) với các phần tử kiểu số thực, ta có thể sử dụng cấu trúc dữ liệu danh sách liên kết đơn giản. Dưới đây là các hàm cần thiết được triển khai bằng Python: ### 1. Cấu trúc nút và danh sách liên kết Đầu tiên, ta cần định nghĩa cấu trúc nút (Node) và danh sách liên kết (LinkedList). ```python class Node: def __init__(self, data): self.data = data self.next = None class LinkedList: def __init__(self): self.head = None ``` ### 2. Hàm thêm phần tử vào danh sách liên kết Để có thể thêm phần tử vào danh sách, ta xây dựng một hàm để thêm phần tử: ```python def append(self, data): new_node = Node(data) if self.head is None: self.head = new_node return last = self.head while last.next: last = last.next last.next = new_node ``` ### 3. Sắp xếp danh sách có thứ tự tăng dần Hàm `sort_ascending` sẽ sắp xếp danh sách liên kết theo thứ tự tăng dần. ```python def sort_ascending(self): if self.head is None: return # Sử dụng thuật toán sắp xếp nổi bọt (bubble sort) để sắp xếp sorted = False while not sorted: sorted = True current = self.head while current and current.next: if current.data > current.next.data: current.data, current.next.data = current.next.data, current.data sorted = False current = current.next ``` ### 4. Trộn 2 danh sách có thứ tự giảm dần thành 1 danh sách có thứ tự giảm dần Hàm `merge_sorted_lists` sẽ trộn 2 danh sách giảm dần. ```python def merge_sorted_lists(self, list1, list2): merged_list = LinkedList() current1 = list1.head current2 = list2.head while current1 and current2: if current1.data > current2.data: merged_list.append(current1.data) current1 = current1.next else: merged_list.append(current2.data) current2 = current2.next while current1: merged_list.append(current1.data) current1 = current1.next while current2: merged_list.append(current2.data) current2 = current2.next return merged_list ``` ### 5. Cho biết nội dung của phần tử nhỏ nhất Hàm `get_minimum` sẽ trả về giá trị của phần tử nhỏ nhất trong danh sách. ```python def get_minimum(self): if self.head is None: return None # hoặc raise Exception("List is empty") current = self.head minimum = current.data while current: if current.data < minimum: minimum = current.data current = current.next return minimum ``` ### Tổng hợp Dưới đây là tổng hợp tất cả các phần lại với nhau: ```python class Node: def __init__(self, data): self.data = data self.next = None class LinkedList: def __init__(self): self.head = None def append(self, data): new_node = Node(data) if self.head is None: self.head = new_node return last = self.head while last.next: last = last.next last.next = new_node def sort_ascending(self): if self.head is None: return sorted = False while not sorted: sorted = True current = self.head while current and current.next: if current.data > current.next.data: current.data, current.next.data = current.next.data, current.data sorted = False current = current.next def merge_sorted_lists(self, list1, list2): merged_list = LinkedList() current1 = list1.head current2 = list2.head while current1 and current2: if current1.data > current2.data: merged_list.append(current1.data) current1 = current1.next else: merged_list.append(current2.data) current2 = current2.next while current1: merged_list.append(current1.data) current1 = current1.next while current2: merged_list.append(current2.data) current2 = current2.next return merged_list def get_minimum(self): if self.head is None: return None current = self.head minimum = current.data while current: if current.data < minimum: minimum = current.data current = current.next return minimum ``` ### Cách sử dụng Bạn có thể tạo danh sách liên kết, thêm các phần tử, và gọi các hàm trên như sau: ```python ll = LinkedList() ll.append(10.5) ll.append(2.3) ll.append(7.8) # Sắp xếp danh sách ll.sort_ascending() # Lấy phần tử nhỏ nhất min_value = ll.get_minimum() print("Phần tử nhỏ nhất:", min_value) # Trộn 2 danh sách list1 = LinkedList() list1.append(5.0) list1.append(3.0) list2 = LinkedList() list2.append(6.0) list2.append(2.0) merged_list = ll.merge_sorted_lists(list1, list2) ``` Hy vọng rằng những mã lệnh trên sẽ giúp ích cho bạn trong việc làm việc với danh sách liên kết!