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.

Thử trong Trình chỉnh sử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()
Đầu ra thiết bị đầu cuối
Initial Linked List:
Node A -> Node B -> Node C -> None
Deleting 'Node B':
Node A -> Node C -> None

Triể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