Làm cách nào để tạo danh sách liên kết trong python?

Danh sách được liên kết là một cấu trúc dữ liệu tuyến tính trong đó các phần tử không được lưu trữ cạnh nhau trong bộ nhớ. Khác với mảng, các phần tử trong danh sách liên kết sử dụng con trỏ hoặc tham chiếu đến nhau để giữ nguyên danh sách

Giống như mảng hoặc danh sách truyền thống, danh sách được liên kết là một tập hợp các đối tượng được sắp xếp theo thứ tự. Danh sách được liên kết khác với danh sách ở chỗ chúng lưu trữ các phần tử trong bộ nhớ. Trong khi các danh sách thông thường như mảng và lát sử dụng khối bộ nhớ liền kề để lưu trữ tham chiếu đến dữ liệu của chúng, danh sách được liên kết lưu trữ tham chiếu hoặc con trỏ như một phần của mỗi phần tử

nguồn

Một danh sách bình thường chỉ là một con trỏ tới phần tử đầu tiên trong danh sách và một mục cụ thể có thể được truy xuất bằng cách cung cấp một phần bù bộ nhớ

Một danh sách được liên kết cũng chỉ là một con trỏ tới phần tử đầu tiên trong danh sách, nhưng bù đắp bộ nhớ sẽ không giúp ích gì cho chúng ta. Chúng ta cần kiểm tra các yếu tố đầu tiên của con trỏ ________ 21 để xem vị trí của mục tiếp theo, sau đó chúng ta có thể điều hướng đến mục đó. Từ đó, chúng ta có thể tìm mục tiếp theo, v.v.

Ví dụ về danh sách liên kết đơn trong Python 🔗

Lớp nút 🔗

Đầu tiên, chúng ta sẽ xây dựng một lớp

class LinkedList:
    def __init__[self]:
        self.head = None
2. Lớp
class LinkedList:
    def __init__[self]:
        self.head = None
0 mà chúng tôi xây dựng cuối cùng sẽ là một danh sách của
class LinkedList:
    def __init__[self]:
        self.head = None
2

class Node:
    def __init__[self, val]:
        self.val = val
        self.next = None

    def set_next[self, node]:
        self.next = node

    def __repr__[self]:
        return self.val

Mỗi nút có một thành viên dữ liệu

class LinkedList:
    def __init__[self]:
        self.head = None
2 [thông tin mà nó lưu trữ] và một thành viên dữ liệu
class LinkedList:
    def __init__[self]:
        self.head = None
1. Thành viên dữ liệu
class LinkedList:
    def __init__[self]:
        self.head = None
1 chỉ trỏ tới
class LinkedList:
    def __init__[self]:
        self.head = None
2 tiếp theo trong danh sách nếu có, nếu không, đó là
class LinkedList:
    def __init__[self]:
        self.head = None
6

Trình tạo danh sách được liên kết 🔗

class LinkedList:
    def __init__[self]:
        self.head = None

Hàm tạo rất dễ dàng - chỉ cần khởi tạo một con trỏ

class LinkedList:
    def __init__[self]:
        self.head = None
7 trống. Điều này cho thấy chúng tôi hiện có một danh sách trống

Lặp lại danh sách 🔗

Hãy làm cho việc lặp qua từng mục trong danh sách trở nên dễ dàng bằng cách sử dụng cú pháp

class LinkedList:
    def __init__[self]:
        self.head = None
8 của Python

def __iter__[self]:
        node = self.head
        while node is not None:
            yield node
            node = node.next

Bằng cách triển khai phương thức

class LinkedList:
    def __init__[self]:
        self.head = None
9 của Python, giờ đây chúng ta có thể sử dụng cú pháp lặp. Ví dụ,
def __iter__[self]:
        node = self.head
        while node is not None:
            yield node
            node = node.next
0

Đang thêm vào danh sách liên kết 🔗

Hãy tạo một cách để thêm các mục vào đuôi danh sách, phương thức

def __iter__[self]:
        node = self.head
        while node is not None:
            yield node
            node = node.next
1. Nó lấy một nút làm đầu vào, lặp lại trên toàn bộ danh sách, sau đó thêm nút đã cho vào cuối

class Node:
    def __init__[self, val]:
        self.val = val
        self.next = None

    def set_next[self, node]:
        self.next = node

    def __repr__[self]:
        return self.val
1

Đang xóa khỏi danh sách liên kết 🔗

Có nhiều cách khác để xóa các mục khỏi danh sách, nhưng bây giờ, và để làm ví dụ, hãy viết một phương thức

def __iter__[self]:
        node = self.head
        while node is not None:
            yield node
            node = node.next
2

class Node:
    def __init__[self, val]:
        self.val = val
        self.next = None

    def set_next[self, node]:
        self.next = node

    def __repr__[self]:
        return self.val
3

def __iter__[self]:
        node = self.head
        while node is not None:
            yield node
            node = node.next
3 xóa và trả về mục đầu tiên khỏi danh sách, giả sử có một mục

In danh sách liên kết 🔗

Cuối cùng nhưng không kém phần quan trọng, chúng ta có thể triển khai phương thức

def __iter__[self]:
        node = self.head
        while node is not None:
            yield node
            node = node.next
4 của Python để có thể gọi trực tiếp
def __iter__[self]:
        node = self.head
        while node is not None:
            yield node
            node = node.next
5 trên một danh sách và kiểm soát những gì nó in ra. Đây là một đại diện tôi thích

class Node:
    def __init__[self, val]:
        self.val = val
        self.next = None

    def set_next[self, node]:
        self.next = node

    def __repr__[self]:
        return self.val
7

Phương thức này sẽ in giá trị của từng nút theo thứ tự, với các mũi tên ở giữa. Ví dụ,

def __iter__[self]:
        node = self.head
        while node is not None:
            yield node
            node = node.next
6

Sử dụng danh sách liên kết 🔗

class Node:
    def __init__[self, val]:
        self.val = val
        self.next = None

    def set_next[self, node]:
        self.next = node

    def __repr__[self]:
        return self.val
9

Các danh sách được liên kết có giá trị vô cùng lớn trong khoa học máy tính vì chúng cho phép chúng ta thêm và xóa các phần tử ở bất kỳ đâu trong danh sách một cách nhanh chóng, với độ phức tạp Big-O chỉ là

def __iter__[self]:
        node = self.head
        while node is not None:
            yield node
            node = node.next
7

Độ phức tạp Big-O của danh sách liên kết 🔗

Hoạt động Độ phức tạp của Big-OChènO[1]XóaO[1]Chỉ mụcO[n]

Do các hoạt động nhanh chóng, danh sách được liên kết được sử dụng thực tế trong nhiều tình huống khác nhau, bao gồm

Cách tạo danh sách liên kết?

Thuật toán .
Tạo một nút lớp có hai thuộc tính. dữ liệu và tiếp theo. Tiếp theo là một con trỏ tới nút tiếp theo
Tạo một lớp khác có hai thuộc tính. đầu và đuôi
addNode[] sẽ thêm một nút mới vào danh sách. Tạo một nút mới. .
display[] sẽ hiển thị các nút có trong danh sách

Chúng ta có thể triển khai danh sách được liên kết trong Python không?

Triển khai lớp liên kết do người dùng xác định trong Python . Do đó, các thể hiện của lớp này phải có khả năng lưu trữ giá trị của nút, nút tiếp theo cũng như nút trước đó

Danh sách liên kết hoạt động như thế nào trong Python?

Danh sách được liên kết là cấu trúc dữ liệu lưu trữ dữ liệu dưới dạng chuỗi. Cấu trúc của danh sách được liên kết sao cho mỗi phần dữ liệu có kết nối với phần tiếp theo [và đôi khi cả dữ liệu trước đó]. Mỗi phần tử trong danh sách liên kết được gọi là một nút.

Làm cách nào để tạo một nút trong Python?

Tạo nút . Trong ví dụ dưới đây, chúng tôi tạo một lớp tên ngày để giữ tên của các ngày trong tuần. Con trỏ nextval được khởi tạo thành null và ba nút và được khởi tạo với các giá trị như được hiển thị. by implementing a class which will hold the pointers along with the data element. In the below example we create a class named daynames to hold the name of the weekdays. The nextval pointer is initialized to null and three nodes and initialized with values as shown.

Chủ Đề