Bài viết này sẽ thảo luận về một cấu trúc dữ liệu tùy chỉnh được gọi là Danh sách được liên kết. Chúng tôi cũng sẽ triển khai danh sách được liên kết trong Python và thực hiện các thao tác khác nhau trên danh sách được liên kết
Danh sách liên kết trong Python là gì
Như tên gợi ý, danh sách liên kết là cấu trúc dữ liệu chứa các phần tử được kết nối bằng liên kết
Một danh sách được liên kết được tạo bằng cách sử dụng các đối tượng được gọi là các nút. Mỗi nút chứa hai thuộc tính - một để lưu trữ dữ liệu và một để kết nối với nút tiếp theo trong danh sách được liên kết
Bạn có thể hiểu cấu trúc của một nút bằng hình sau
Nơi đây,
- Một
9 là một đối tượng chứa các thuộc tínhclass Node: def __init__[self, data]: self.data = data self.next = None class LinkedList: def __init__[self]: self.Head = None myLinkedList = LinkedList[] myNode1 = Node[10] myNode2 = Node[20] myNode3 = Node[30] myNode4 = Node[40] myLinkedList.Head = myNode1 myNode1.next = myNode2 myNode2.next = myNode3 myNode3.next = myNode4 print["The elements in the linked list are:"] print[myLinkedList.Head.data, end=" "] print[myLinkedList.Head.next.data, end=" "] print[myLinkedList.Head.next.next.data, end=" "] print[myLinkedList.Head.next.next.next.data]
0 vàThe linked list is: 10 20 30 40
1The linked list is: 10 20 30 40
- Thuộc tính
0 lưu trữ dữ liệuThe linked list is: 10 20 30 40
- Thuộc tính
1 đề cập đến nút tiếp theo trong danh sách được liên kếtThe linked list is: 10 20 30 40
Như trong hình dưới đây, chúng ta có thể kết nối nhiều nút khác nhau để tạo danh sách liên kết
Nơi đây,
- Chúng tôi đã tạo một danh sách được liên kết bao gồm bốn nút
- Nút đầu tiên chứa số 10, nút thứ hai chứa 20, nút thứ ba chứa 30 và nút cuối cùng chứa 40
- Chúng tôi cũng đã tạo một biến
4 đề cập đến nút đầu tiên. Chúng tôi chỉ giữ biếnThe linked list is: 10 20 30 40
4 trong một đối tượng danh sách được liên kết. Dữ liệu trong tất cả các nút khác được lấy bằng cách duyệt qua danh sách được liên kết bắt đầu từ nút đầu tiên được tham chiếu bởiThe linked list is: 10 20 30 40
4The linked list is: 10 20 30 40
- Thuộc tính
1 của nút cuối cùng đề cập đến một đối tượngThe linked list is: 10 20 30 40
8. Thuộc tínhThe linked list is: 10 20 30 40
1 của nút cuối cùng của danh sách được liên kết sẽ luôn tham chiếu đến đối tượngThe linked list is: 10 20 30 40
8The linked list is: 10 20 30 40
- Nếu một danh sách được liên kết trống, biến
4 sẽ tham chiếu đến đối tượngThe linked list is: 10 20 30 40
8The linked list is: 10 20 30 40
Bây giờ chúng ta đã hiểu cấu trúc cơ bản của danh sách liên kết. Hãy để chúng tôi thực hiện một danh sách được liên kết trong Python
Cách tạo danh sách liên kết trong Python
Vì các nút là các khối xây dựng của một danh sách được liên kết, trước tiên chúng ta sẽ tạo một nút. Đối với điều này, chúng ta sẽ định nghĩa một lớp
class Node:
def __init__[self, data]:
self.data = data
self.next = None
class LinkedList:
def __init__[self]:
self.Head = None
myLinkedList = LinkedList[]
myNode1 = Node[10]
myNode2 = Node[20]
myNode3 = Node[30]
myNode4 = Node[40]
myLinkedList.Head = myNode1
myNode1.next = myNode2
myNode2.next = myNode3
myNode3.next = myNode4
print["The elements in the linked list are:"]
print[myLinkedList.Head.data, end=" "]
print[myLinkedList.Head.next.data, end=" "]
print[myLinkedList.Head.next.next.data, end=" "]
print[myLinkedList.Head.next.next.next.data]
9 với các thuộc tính The linked list is:
10 20 30 40
0 và The linked list is:
10 20 30 40
1 như hình bên dướiThe linked list is:
10 20 30 40
7đầu ra
The linked list is:
10 20 30 40
8Trong ví dụ trên, bạn có thể quan sát thấy rằng thuộc tính
The linked list is:
10 20 30 40
1 của class Node:
def __init__[self, data]:
self.data = data
self.next = None
class LinkedList:
def __init__[self]:
self.Head = None
myLinkedList = LinkedList[]
myNode1 = Node[10]
myNode2 = Node[20]
myNode3 = Node[30]
myNode4 = Node[40]
myLinkedList.Head = myNode1
myNode1.next = myNode2
myNode2.next = myNode3
myNode3.next = myNode4
print["The elements in the linked list are:"]
print[myLinkedList.Head.data, end=" "]
print[myLinkedList.Head.next.data, end=" "]
print[myLinkedList.Head.next.next.data, end=" "]
print[myLinkedList.Head.next.next.next.data]
9 đề cập đến The linked list is:
10 20 30 40
8 theo mặc định. Khi chúng ta chèn nó vào danh sách liên kết, chúng ta gán thuộc tính The linked list is:
10 20 30 40
1 cho các nút trong danh sách liên kết, như chúng ta sẽ thảo luận trướcTa phải tạo đối tượng có thuộc tính
The linked list is:
10 20 30 40
4 để tạo danh sách liên kết. Chúng ta có thể định nghĩa lớp The linked list is:
10 20 30 40
41 như hình bên dướiclass Node:
def __init__[self, data]:
self.data = data
self.next = None
class LinkedList:
def __init__[self]:
self.Head = None
myLinkedList = LinkedList[]
myNode1 = Node[10]
myNode2 = Node[20]
myNode3 = Node[30]
myNode4 = Node[40]
myLinkedList.Head = myNode1
myNode1.next = myNode2
myNode2.next = myNode3
myNode3.next = myNode4
print["The elements in the linked list are:"]
print[myLinkedList.Head.data, end=" "]
print[myLinkedList.Head.next.data, end=" "]
print[myLinkedList.Head.next.next.data, end=" "]
print[myLinkedList.Head.next.next.next.data]
đầu ra
The linked list is:
10 20 30 40
Trong ví dụ trên, chúng ta đã tạo một danh sách liên kết
Sau đó, chúng tôi tạo các nút theo cách thủ công bằng cách sử dụng dữ liệu đã cho, thêm từng nút một vào danh sách được liên kết và in chúng. Sau này, chúng ta sẽ học cách chèn các phần tử vào danh sách liên kết bằng cách sử dụng vòng lặp
The linked list is:
10 20 30 40
42 của PythonBây giờ chúng ta hãy thảo luận về cách chúng ta có thể in tất cả các phần tử của danh sách được liên kết mà không cần truy cập tất cả các nút theo cách thủ công
In tất cả các phần tử của danh sách được liên kết bằng Python
Chúng tôi sẽ sử dụng vòng lặp
The linked list is:
10 20 30 40
42 để in tất cả các phần tử danh sách được liên kếtBắt đầu từ con trỏ
The linked list is:
10 20 30 40
4, đầu tiên chúng ta sẽ in dữ liệu trong nút hiện tại bằng thuộc tính The linked list is:
10 20 30 40
0 của nút. Sau đó, chúng ta sẽ di chuyển đến nút tiếp theo bằng cách sử dụng con trỏ The linked list is:
10 20 30 40
1Chúng tôi sẽ làm theo quy trình này cho đến khi chúng tôi đến cuối danh sách được liên kết [i. e. , thuộc tính
The linked list is:
10 20 30 40
1 của một nút được tìm thấy là The linked list is:
10 20 30 40
8]. Như được hiển thị bên dưới, bạn có thể triển khai toàn bộ logic trong phương thức The linked list is:
10 20 30 40
49The linked list is:
10 20 30 40
5đầu ra
The linked list is:
10 20 30 40
4Chèn phần tử vào danh sách liên kết trong Python
Có 4 tình huống xảy ra khi chèn phần tử vào danh sách liên kết
- Danh sách liên kết có thể để trống trước khi chèn
- Chúng ta phải chèn một phần tử vào đầu danh sách liên kết không rỗng
- Chúng ta phải chèn một phần tử vào cuối danh sách liên kết
- Chúng ta phải chèn một phần tử vào một vị trí nhất định trong danh sách liên kết
Hãy để chúng tôi thảo luận về cách chèn một phần tử vào danh sách được liên kết trong mọi tình huống
Chèn một phần tử vào danh sách liên kết rỗng
Để chèn một phần tử vào một danh sách liên kết trống, chúng ta sẽ định nghĩa một phương thức
The linked list is:
10 20 30 40
70 chấp nhận phần tử đó làm đối số đầu vào và thêm một nút chứa phần tử đầu vào vào danh sách được liên kếtĐối với điều này, chúng tôi sẽ tạo một nút trong
The linked list is:
10 20 30 40
70 với phần tử đầu vào là The linked list is:
10 20 30 40
0. Sau khi tạo nút ta sẽ gán cho nút thuộc tính The linked list is:
10 20 30 40
4Bằng cách này, nút mới sẽ trở thành nút đầu tiên của danh sách liên kết. Phương pháp có thể được thực hiện như sau
The linked list is:
10 20 30 40
7đầu ra
The linked list is:
10 20 30 40
2Chèn phần tử vào đầu danh sách liên kết
Để chèn một phần tử vào đầu danh sách không trống, chúng ta sẽ định nghĩa một phương thức
The linked list is:
10 20 30 40
74 lấy một phần tử làm đầu vào và thêm nó vào đầu danh sách được liên kết. Trong phương thức The linked list is:
10 20 30 40
74, đầu tiên chúng ta sẽ tạo một nút với phần tử đầu vào là dữ liệuSau đó, ta sẽ trỏ thuộc tính
The linked list is:
10 20 30 40
1 của nút vừa tạo tới nút mà thuộc tính The linked list is:
10 20 30 40
4 của danh sách liên kết trỏ đến. Tiếp theo, chúng ta sẽ gán cho nút vừa tạo thuộc tính The linked list is:
10 20 30 40
4Bằng cách này, nút mới sẽ được chèn vào đầu danh sách liên kết
The linked list is:
10 20 30 40
8đầu ra
The linked list is:
10 20 30 40
9Như hình bên dưới, chúng ta có thể kết hợp các phương thức trên để tạo một phương thức duy nhất để chèn một phần tử vào đầu danh sách liên kết
The linked list is:
10 20 30 40
80đầu ra
The linked list is:
10 20 30 40
9Chúng tôi đã hợp nhất phương thức
The linked list is:
10 20 30 40
70 vào phương thức The linked list is:
10 20 30 40
74 vì việc chèn vào danh sách liên kết trống về cơ bản có nghĩa là chúng tôi đang chèn một phần tử vào đầu danh sách được liên kếtChèn một phần tử vào cuối danh sách liên kết
Chèn phần tử vào cuối danh sách rỗng cũng giống như chèn phần tử vào đầu danh sách liên kết
Để chèn một phần tử vào cuối danh sách liên kết, trước tiên chúng ta sẽ kiểm tra xem danh sách liên kết có trống không. Nếu danh sách được liên kết được tìm thấy trống, chúng ta có thể chỉ cần gán một nút chứa phần tử mới cho thuộc tính
The linked list is:
10 20 30 40
4 như chúng ta đã làm trong phương thức The linked list is:
10 20 30 40
74Nếu không, chúng tôi sẽ duyệt qua danh sách được liên kết cho đến khi kết thúc bằng cách sử dụng vòng lặp
The linked list is:
10 20 30 40
42. Chúng tôi sẽ bắt đầu với The linked list is:
10 20 30 40
4 và tiếp tục di chuyển đến nút tiếp theo bằng cách sử dụng thuộc tính The linked list is:
10 20 30 40
1 của các nút cho đến khi chúng tôi thấy rằng thuộc tính The linked list is:
10 20 30 40
1 của nút trỏ đến The linked list is:
10 20 30 40
8Khi chúng tôi đến một nút có thuộc tính
The linked list is:
10 20 30 40
1 trỏ đến The linked list is:
10 20 30 40
8, chúng tôi đang ở nút cuối cùng. Bây giờ, chúng ta sẽ tạo một nút mới bằng cách sử dụng dữ liệu đầu vào và gán nút này cho thuộc tính tiếp theo của nút cuối cùng của danh sách liên kếtBằng cách này, phần tử mới sẽ được chèn vào cuối danh sách liên kết. Bạn có thể triển khai toàn bộ logic này trong phương thức
The linked list is:
10 20 30 40
80 như sauThe linked list is:
10 20 30 40
82đầu ra
The linked list is:
10 20 30 40
83Chèn một phần tử vào một vị trí nhất định trong danh sách được liên kết
Chúng ta sẽ sử dụng một biến đếm và một vòng lặp
The linked list is:
10 20 30 40
42 để chèn một phần tử vào một vị trí nhất định trong danh sách liên kếtChúng ta sẽ bắt đầu từ con trỏ Head và tiếp tục di chuyển đến nút tiếp theo bằng vòng lặp
The linked list is:
10 20 30 40
42. Trong mỗi lần lặp, chúng ta cũng sẽ tăng biến đếmKhi chúng tôi đến nút trước vị trí đã cho, chúng tôi thoát khỏi vòng lặp
The linked list is:
10 20 30 40
42. Ngoài ra, chúng tôi sẽ thoát khỏi vòng lặp nếu chúng tôi đến cuối danh sách được liên kết. Nếu không, chương trình sẽ gặp lỗiSau đó, nếu chúng ta vẫn ở
The linked list is:
10 20 30 40
4, chúng ta phải thêm phần tử vào vị trí đầu tiên của danh sách được liên kết; . Tiếp theo, chúng tôi sẽ gán nút của phần tử mới cho danh sách được liên kết của The linked list is:
10 20 30 40
4Nếu không phải chèn phần tử vào vị trí thứ nhất, chúng ta sẽ gán nút tại vị trí đã cho cho con trỏ
The linked list is:
10 20 30 40
1 của nút chứa phần tử mới. Tiếp theo, chúng ta sẽ gán nút mới cho thuộc tính The linked list is:
10 20 30 40
1 của nút tại The linked list is:
10 20 30 40
89Bằng cách này, phần tử mới sẽ được chèn vào vị trí đã cho. Như được hiển thị bên dưới, bạn có thể triển khai toàn bộ logic trong phương thức
The linked list is:
10 20 30 40
90The linked list is:
10 20 30 40
84đầu ra
The linked list is:
10 20 30 40
85Xóa phần tử khỏi danh sách liên kết trong Python
Có thể xảy ra ba tình huống khi chúng ta cố gắng xóa một phần tử khỏi danh sách liên kết
- Ta phải xóa phần tử đầu tiên của danh sách liên kết
- Ta phải xóa phần tử cuối cùng của danh sách liên kết
- Ta phải xóa phần tử ở vị trí bất kỳ trong Linked list
Hãy để chúng tôi thảo luận về tất cả các trường hợp này từng cái một
Xóa phần tử đầu tiên của danh sách liên kết
Để xóa phần tử đầu tiên của danh sách liên kết, trước tiên chúng ta sẽ kiểm tra xem danh sách liên kết có trống hay không
Đối với điều này, chúng tôi sẽ kiểm tra xem
The linked list is:
10 20 30 40
4 của danh sách được liên kết có trỏ đến The linked list is:
10 20 30 40
8 không. Nếu có, chúng tôi sẽ thông báo cho người dùng rằng danh sách được liên kết trống và chúng tôi không có phần tử nào để xóaNếu không, chúng tôi sẽ gán nút đầu tiên cho một biến tạm thời. Sau đó, chúng ta sẽ gán nút thứ hai của danh sách liên kết cho thuộc tính
The linked list is:
10 20 30 40
4Sau đó, chúng tôi sẽ xóa nút đầu tiên được lưu trữ trong biến tạm thời bằng cách sử dụng câu lệnh
The linked list is:
10 20 30 40
94. Như được hiển thị bên dưới, bạn có thể triển khai toàn bộ logic trong phương thức The linked list is:
10 20 30 40
95The linked list is:
10 20 30 40
86đầu ra
The linked list is:
10 20 30 40
87Xóa phần tử cuối cùng của danh sách liên kết
Để xóa phần tử cuối cùng của danh sách liên kết, trước tiên chúng ta sẽ kiểm tra xem danh sách liên kết có trống hay không
Đối với điều này, chúng tôi sẽ kiểm tra xem
The linked list is:
10 20 30 40
4 của danh sách được liên kết có trỏ đến The linked list is:
10 20 30 40
8 không. Nếu có, chúng tôi sẽ thông báo cho người dùng rằng danh sách được liên kết trống và chúng tôi không có phần tử nào để xóaNếu có các phần tử có mặt trong danh sách, chúng tôi sẽ thực hiện theo quy trình sau
- Gán nút đầu tiên cho một biến
98The linked list is: 10 20 30 40
- Khởi tạo một biến
99 đếnThe linked list is: 10 20 30 40
8The linked list is: 10 20 30 40
- Duyệt qua danh sách được liên kết bằng vòng lặp
42, gán nút tại biếnThe linked list is: 10 20 30 40
98 cho biếnThe linked list is: 10 20 30 40
99 và chuyển biếnThe linked list is: 10 20 30 40
98 sang nút tiếp theo cho đến khi biếnThe linked list is: 10 20 30 40
98 đến nút cuối cùng. Trong trường hợp này, thuộc tínhThe linked list is: 10 20 30 40
1 của nút được gán choThe linked list is: 10 20 30 40
98 trở thànhThe linked list is: 10 20 30 40
8The linked list is: 10 20 30 40
- Khi biến hiện tại đến nút cuối cùng, chúng tôi sẽ gán
8 cho thuộc tínhThe linked list is: 10 20 30 40
1 của biếnThe linked list is: 10 20 30 40
99 và xóa nút được gán cho biếnThe linked list is: 10 20 30 40
98The linked list is: 10 20 30 40
Chúng ta có thể xóa phần tử cuối cùng của danh sách liên kết bằng cách thực hiện các bước trên. Như được hiển thị bên dưới, bạn có thể triển khai toàn bộ logic trong phương thức
The linked list is:
10 20 30 40
813The linked list is:
10 20 30 40
88đầu ra
The linked list is:
10 20 30 40
89Xóa phần tử tại vị trí bất kỳ trong danh sách liên kết
Để xóa một phần tử tại một vị trí bất kỳ trong danh sách liên kết, trước tiên chúng ta sẽ kiểm tra xem danh sách liên kết có trống hay không
Đối với điều này, chúng tôi sẽ kiểm tra xem
The linked list is:
10 20 30 40
4 của danh sách được liên kết có trỏ đến The linked list is:
10 20 30 40
8 không. Nếu có, chúng tôi sẽ thông báo cho người dùng rằng danh sách được liên kết trống và chúng tôi không có phần tử nào để xóaNếu trong danh sách liên kết có phần tử mà ta phải xóa phần tử ở vị trí khác ta thực hiện theo các bước sau
- Gán nút đầu tiên cho một biến
98The linked list is: 10 20 30 40
- Khởi tạo một biến
99 đếnThe linked list is: 10 20 30 40
8The linked list is: 10 20 30 40
- Khởi tạo biến
819 thành 1The linked list is: 10 20 30 40
- Duyệt qua danh sách được liên kết bằng cách sử dụng vòng lặp
42, tăngThe linked list is: 10 20 30 40
819 trong mỗi lần lặp, gán nút tại biếnThe linked list is: 10 20 30 40
98 thànhThe linked list is: 10 20 30 40
99 và chuyển biếnThe linked list is: 10 20 30 40
98 sang nút tiếp theo cho đến khi biếnThe linked list is: 10 20 30 40
819 cóThe linked list is: 10 20 30 40
826 của phần tử bị xóa hoặc chúng tôi đạt . Tại thời điểm này, biến dòng sẽ đề cập đến nút cần xóaThe linked list is: 10 20 30 40
- Khi số lượng bằng với vị trí của phần tử bị xóa, có thể xảy ra hai trường hợp
- Nếu chúng ta vẫn ở vị trí thứ nhất là
4, chúng ta sẽ gán nút được tham chiếu bởi thuộc tínhThe linked list is: 10 20 30 40
1 của biến hiện tại cho thuộc tínhThe linked list is: 10 20 30 40
4. Sau đó, chúng ta sẽ xóa biếnThe linked list is: 10 20 30 40
98The linked list is: 10 20 30 40
- Nếu không ở vị trí số 1, chúng ta sẽ gán nút tiếp theo của biến
98 cho thuộc tính tiếp theo của nút được gán cho biếnThe linked list is: 10 20 30 40
99. Chúng tôi sẽ xóa nút được gán cho biếnThe linked list is: 10 20 30 40
98. Bằng cách này, phần tử tại vị trí đã cho sẽ bị xóaThe linked list is: 10 20 30 40
Chúng ta có thể thực hiện logic trên trong phương thức
The linked list is:
10 20 30 40
834 được thảo luận bên dướiclass Node:
def __init__[self, data]:
self.data = data
self.next = None
class LinkedList:
def __init__[self]:
self.Head = None
myLinkedList = LinkedList[]
myNode1 = Node[10]
myNode2 = Node[20]
myNode3 = Node[30]
myNode4 = Node[40]
myLinkedList.Head = myNode1
myNode1.next = myNode2
myNode2.next = myNode3
myNode3.next = myNode4
print["The elements in the linked list are:"]
print[myLinkedList.Head.data, end=" "]
print[myLinkedList.Head.next.data, end=" "]
print[myLinkedList.Head.next.next.data, end=" "]
print[myLinkedList.Head.next.next.next.data]
0đầu ra
class Node:
def __init__[self, data]:
self.data = data
self.next = None
class LinkedList:
def __init__[self]:
self.Head = None
myLinkedList = LinkedList[]
myNode1 = Node[10]
myNode2 = Node[20]
myNode3 = Node[30]
myNode4 = Node[40]
myLinkedList.Head = myNode1
myNode1.next = myNode2
myNode2.next = myNode3
myNode3.next = myNode4
print["The elements in the linked list are:"]
print[myLinkedList.Head.data, end=" "]
print[myLinkedList.Head.next.data, end=" "]
print[myLinkedList.Head.next.next.data, end=" "]
print[myLinkedList.Head.next.next.next.data]
1Đếm số phần tử trong danh sách liên kết trong Python
Để đếm số phần tử trong danh sách liên kết, chúng ta chỉ cần khởi tạo biến
The linked list is:
10 20 30 40
819 thành 0Sau đó, chúng tôi sẽ bắt đầu từ
The linked list is:
10 20 30 40
4 và di chuyển đến nút tiếp theo bằng vòng lặp The linked list is:
10 20 30 40
42 cho đến khi chúng tôi đến cuối danh sách được liên kết. Trong mỗi lần lặp của vòng lặp The linked list is:
10 20 30 40
42, chúng tôi sẽ tăng The linked list is:
10 20 30 40
819 lên 1Sau khi thực hiện vòng lặp
The linked list is:
10 20 30 40
42 ta sẽ có số phần tử của danh sách liên kết trong biến The linked list is:
10 20 30 40
819. Bạn có thể triển khai logic này như được hiển thị trong phương pháp The linked list is:
10 20 30 40
842 bên dướiclass Node:
def __init__[self, data]:
self.data = data
self.next = None
class LinkedList:
def __init__[self]:
self.Head = None
myLinkedList = LinkedList[]
myNode1 = Node[10]
myNode2 = Node[20]
myNode3 = Node[30]
myNode4 = Node[40]
myLinkedList.Head = myNode1
myNode1.next = myNode2
myNode2.next = myNode3
myNode3.next = myNode4
print["The elements in the linked list are:"]
print[myLinkedList.Head.data, end=" "]
print[myLinkedList.Head.next.data, end=" "]
print[myLinkedList.Head.next.next.data, end=" "]
print[myLinkedList.Head.next.next.next.data]
2đầu ra
class Node:
def __init__[self, data]:
self.data = data
self.next = None
class LinkedList:
def __init__[self]:
self.Head = None
myLinkedList = LinkedList[]
myNode1 = Node[10]
myNode2 = Node[20]
myNode3 = Node[30]
myNode4 = Node[40]
myLinkedList.Head = myNode1
myNode1.next = myNode2
myNode2.next = myNode3
myNode3.next = myNode4
print["The elements in the linked list are:"]
print[myLinkedList.Head.data, end=" "]
print[myLinkedList.Head.next.data, end=" "]
print[myLinkedList.Head.next.next.data, end=" "]
print[myLinkedList.Head.next.next.next.data]
3Có thể xảy ra hai tình huống để cập nhật giá trị tại một nút trong danh sách liên kết
- Chúng ta cần thay thế một giá trị
- Chúng ta cần gán một giá trị mới cho phần tử tại bất kỳ vị trí nào trong danh sách liên kết
Thay thế một giá trị trong danh sách được liên kết
Để thay thế một giá trị trong danh sách được liên kết, chúng tôi sẽ bắt đầu từ nút đầu tiên và duyệt qua danh sách được liên kết bằng vòng lặp
The linked list is:
10 20 30 40
42Chúng tôi sẽ kiểm tra xem nút
The linked list is:
10 20 30 40
98 có chứa giá trị được thay thế tại mỗi nút không. Nếu có, chúng tôi sẽ thay thế giá trị trong nút hiện tại bằng giá trị mớiBằng cách này, chúng ta có thể cập nhật lần xuất hiện đầu tiên của bất kỳ phần tử nào trong danh sách được liên kết như trong phương thức
The linked list is:
10 20 30 40
845class Node:
def __init__[self, data]:
self.data = data
self.next = None
class LinkedList:
def __init__[self]:
self.Head = None
myLinkedList = LinkedList[]
myNode1 = Node[10]
myNode2 = Node[20]
myNode3 = Node[30]
myNode4 = Node[40]
myLinkedList.Head = myNode1
myNode1.next = myNode2
myNode2.next = myNode3
myNode3.next = myNode4
print["The elements in the linked list are:"]
print[myLinkedList.Head.data, end=" "]
print[myLinkedList.Head.next.data, end=" "]
print[myLinkedList.Head.next.next.data, end=" "]
print[myLinkedList.Head.next.next.next.data]
4đầu ra
class Node:
def __init__[self, data]:
self.data = data
self.next = None
class LinkedList:
def __init__[self]:
self.Head = None
myLinkedList = LinkedList[]
myNode1 = Node[10]
myNode2 = Node[20]
myNode3 = Node[30]
myNode4 = Node[40]
myLinkedList.Head = myNode1
myNode1.next = myNode2
myNode2.next = myNode3
myNode3.next = myNode4
print["The elements in the linked list are:"]
print[myLinkedList.Head.data, end=" "]
print[myLinkedList.Head.next.data, end=" "]
print[myLinkedList.Head.next.next.data, end=" "]
print[myLinkedList.Head.next.next.next.data]
5Để cập nhật phần tử tại một vị trí nhất định trong danh sách liên kết, trước tiên chúng ta sẽ kiểm tra xem danh sách liên kết có trống không. Nếu có, có thể có hai tình huống
Nếu danh sách được liên kết trống và chúng tôi phải cập nhật một phần tử khác với vị trí đầu tiên, chúng tôi sẽ thông báo cho người dùng rằng điều đó không thể thực hiện được
Nếu danh sách liên kết trống và chúng ta phải cập nhật phần tử ở vị trí đầu tiên, chúng ta sẽ tạo một nút mới với phần tử đã cho và gán nút vào
The linked list is:
10 20 30 40
4 của danh sách liên kết. Nếu không, chúng ta sẽ khởi tạo biến The linked list is:
10 20 30 40
847 thành 1Sau đó, chúng tôi sẽ duyệt qua danh sách được liên kết bằng vòng lặp
The linked list is:
10 20 30 40
42. Trong mỗi lần lặp của vòng lặp The linked list is:
10 20 30 40
42, chúng ta sẽ di chuyển đến nút tiếp theo trong danh sách liên kết, tăng biến The linked list is:
10 20 30 40
847 lên 1 và kiểm tra xem đã đến vị trí phần tử cần cập nhật chưaNếu đến vị trí cần cập nhật, chúng tôi sẽ cập nhật giá trị tại nút hiện tại của danh sách liên kết và thông báo cho người dùng
Nếu chúng ta không đến được vị trí cần cập nhật và vòng lặp
The linked list is:
10 20 30 40
42 kết thúc, chúng ta sẽ thông báo cho người dùng rằng không đủ phần tử và chúng ta không thể cập nhật giá trị. Logic này có thể được thực hiện như hình bên dưới trong phương pháp The linked list is:
10 20 30 40
852class Node:
def __init__[self, data]:
self.data = data
self.next = None
class LinkedList:
def __init__[self]:
self.Head = None
myLinkedList = LinkedList[]
myNode1 = Node[10]
myNode2 = Node[20]
myNode3 = Node[30]
myNode4 = Node[40]
myLinkedList.Head = myNode1
myNode1.next = myNode2
myNode2.next = myNode3
myNode3.next = myNode4
print["The elements in the linked list are:"]
print[myLinkedList.Head.data, end=" "]
print[myLinkedList.Head.next.data, end=" "]
print[myLinkedList.Head.next.next.data, end=" "]
print[myLinkedList.Head.next.next.next.data]
6đầu ra
class Node:
def __init__[self, data]:
self.data = data
self.next = None
class LinkedList:
def __init__[self]:
self.Head = None
myLinkedList = LinkedList[]
myNode1 = Node[10]
myNode2 = Node[20]
myNode3 = Node[30]
myNode4 = Node[40]
myLinkedList.Head = myNode1
myNode1.next = myNode2
myNode2.next = myNode3
myNode3.next = myNode4
print["The elements in the linked list are:"]
print[myLinkedList.Head.data, end=" "]
print[myLinkedList.Head.next.data, end=" "]
print[myLinkedList.Head.next.next.data, end=" "]
print[myLinkedList.Head.next.next.next.data]
7Tại sao nên sử dụng Danh sách được liên kết trong Python
- Nếu bạn không cần truy cập ngẫu nhiên vào các phần tử, danh sách được liên kết có thể là một giải pháp thay thế tốt hơn. Bạn nên sử dụng danh sách liên kết thay vì danh sách thông thường trong Python khi chúng ta có hàng triệu phần tử cần lưu trữ và không cần truy cập ngẫu nhiên
- Kích thước thực tế của danh sách là rất lớn so với số phần tử có trong chúng. Kích thước thực tế của một danh sách là khoảng 1. gấp 5 lần số phần tử có trong nó. Nó đảm bảo rằng chúng ta có đủ bộ nhớ để chèn các phần tử vào danh sách. Tuy nhiên, một danh sách được liên kết không yêu cầu thêm khoảng trắng
- Khi chúng ta chèn một phần tử vào danh sách liên kết thì chỉ cần lưu trữ. Danh sách cũng yêu cầu vị trí bộ nhớ liền kề. Ngược lại, các nút của danh sách liên kết có thể có mặt ở bất kỳ vị trí nào trong bộ nhớ vật lý. Chúng được kết nối bằng cách sử dụng tài liệu tham khảo
- Bạn có thể triển khai cả cấu trúc dữ liệu ngăn xếp và hàng đợi một cách hiệu quả bằng cách sử dụng danh sách được liên kết. Mặt khác, việc triển khai hàng đợi bằng cách sử dụng danh sách rất tốn kém về thời gian và phức tạp.
Danh sách liên kết triển khai đầy đủ trong Python
Sau đây là mã chạy đầy đủ để triển khai danh sách được liên kết trong Python với tất cả các phương thức được thảo luận trong bài viết này
class Node:
def __init__[self, data]:
self.data = data
self.next = None
class LinkedList:
def __init__[self]:
self.Head = None
myLinkedList = LinkedList[]
myNode1 = Node[10]
myNode2 = Node[20]
myNode3 = Node[30]
myNode4 = Node[40]
myLinkedList.Head = myNode1
myNode1.next = myNode2
myNode2.next = myNode3
myNode3.next = myNode4
print["The elements in the linked list are:"]
print[myLinkedList.Head.data, end=" "]
print[myLinkedList.Head.next.data, end=" "]
print[myLinkedList.Head.next.next.data, end=" "]
print[myLinkedList.Head.next.next.next.data]
8Sự kết luận
Trong bài viết này, chúng ta đã thảo luận về cấu trúc dữ liệu danh sách được liên kết và cách triển khai nó trong Python. Chúng tôi cũng đã triển khai các phương thức cho các hoạt động khác nhau trong danh sách được liên kết
Trong bài viết này, chúng tôi đã thực hiện tất cả các hoạt động bằng cách sử dụng các phương pháp. Bạn cũng có thể triển khai từng thao tác bằng cách sử dụng các hàm lấy đầu vào là _____14 của danh sách được liên kết và trả về phần đầu sau khi thực hiện các thao tác được yêu cầu
Tuy nhiên, điều này sẽ yêu cầu nhiều tài nguyên hơn trong quá trình thực thi. Vì vậy, tôi khuyên bạn nên sử dụng phương pháp được sử dụng trong bài viết này