Triển khai danh sách liên kết đơn Python
Tìm hiểu cách triển khai danh sách liên kết đơn trong Python. Khám phá phân bổ bộ nhớ động, thao tác nút, chèn, truyền tải và xóa.
Tổng quan
Danh sách liên kết là cấu trúc dữ liệu tuyến tính trong đó các phần tử không được lưu trữ ở các vị trí bộ nhớ liền kề. Thay vào đó, mỗi phần tử (được gọi là nút) là một đối tượng riêng biệt chứa tham chiếu đến nút tiếp theo trong chuỗi.
Lợi ích chính của danh sách liên kết so với mảng truyền thống là khả năng định cỡ động và khả năng chèn hoặc xóa các phần tử trong thời gian O(1) không đổi ngay từ đầu. Tuy nhiên, việc truy cập các phần tử theo chỉ mục yêu cầu truyền tải tuyến tính, mất thời gian O(n).
Trong Python, chúng tôi triển khai danh sách được liên kết bằng cách xác định lớp Node để lưu trữ dữ liệu và con trỏ tham chiếu và lớp LinkedList để quản lý nút đầu, các phần chèn ở đầu hoặc đuôi và xóa.
Đầu ra mã & thực thi
Triển khai danh sách liên kết đơn bằng Python, thể hiện việc tạo nút, nối thêm và truyền tải danh sách.
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 not self.head:
self.head = new_node
return
last = self.head
while last.next:
last = last.next
last.next = new_node
def delete(self, key):
curr = self.head
if curr and curr.data == key:
self.head = curr.next
curr = None
return
prev = None
while curr and curr.data != key:
prev = curr
curr = curr.next
if not curr:
return
prev.next = curr.next
curr = None
def display(self):
elements = []
curr = self.head
while curr:
elements.append(str(curr.data))
curr = curr.next
print(" -> ".join(elements) + " -> None")
# Instantiate and build the linked list
llist = LinkedList()
llist.append("Node A")
llist.append("Node B")
llist.append("Node C")
print("Initial Linked List:")
llist.display()
print("Deleting 'Node B':")
llist.delete("Node B")
llist.display()Initial Linked List:
Node A -> Node B -> Node C -> None
Deleting 'Node B':
Node A -> Node C -> NoneTriển khai từng bước
- Triển khai chức năng hoàn tác-làm lại trong trình soạn thảo văn bản
- Xây dựng các cấu trúc dữ liệu phức tạp như biểu đồ, ngăn xếp và hàng đợi
- Quản lý danh sách trong đó tần suất chèn và xóa nhiều hơn các hành động tra cứu
Câu hỏi thường gặp
Sự khác biệt giữa Danh sách liên kết đơn và kép là gì?
Trong Danh sách liên kết đơn, mỗi nút chỉ trỏ đến nút tiếp theo. Trong Danh sách liên kết đôi, mỗi nút chứa các tham chiếu đến cả nút tiếp theo và nút trước đó, cho phép truyền tải hai chiều với chi phí thêm bộ nhớ.
Tại sao Python không có lớp LinkedList tích hợp?
Mảng Python (danh sách) được triển khai dưới dạng mảng động. Nhờ khả năng quản lý bộ nhớ của Python và tối ưu hóaCPython, các danh sách tiêu chuẩn cực kỳ nhanh chóng và hiệu quả đối với hầu hết các tác vụ, giảm nhu cầu thực tế về danh sách liên kết tích hợp sẵn.
Chủ đề liên quan
Triển khai ngăn xếp LIFO trong Python. Chạy ví dụ về mã ngăn xếp tương tác của chúng tôi để làm chủ các giới hạn đẩy, bật, nhìn trộm và dung lượng.
Hướng dẫn cấu trúc dữ liệu hàng đợi PythonLàm chủ các hoạt động hàng đợi FIFO trong Python. Thực thi và chạy ví dụ về hàng đợi tương tác của chúng tôi hiển thị các phương thức enqueue và dequeue.