Bài tập  /  Bài đang cần trả lời

Giải bài có thưởng!

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

 Giúp mình giải bài tập lập trình C++
2. 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.
g. Cho biết phần tử có nội dung nhỏ nhất là phần tử thứ mấy trong ds.
i. Tính tổng các phần tử có phần nguyên là bội số của K
0 Xem trả lời
Hỏi chi tiết
103
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!

Bạn hỏi - Lazi trả lời

Bạn muốn biết điều gì?

GỬI CÂU HỎI
Học tập không giới hạn cùng học sinh cả nước và AI, sôi động, tích cực, trải nghiệm

Hôm nay bạn thế nào? Hãy nhấp vào một lựa chọn, nếu may mắn bạn sẽ được tặng 50.000 xu từ Lazi

Vui Buồn Bình thường
×
Trợ lý ảo Trợ lý ảo
×
Đấu trường tri thức | Lazi Quiz Challenge +500k
Gửi câu hỏi
×