Danh sách liên kết (Linked list)

Làm việc nhóm

Một danh sách liên kết (Linked list) là một cấu trúc dữ liệu động, bao gồm một tập hợp các phần tử (node) có thể được liên kết với nhau theo một thứ tự nhất định. Mỗi phần tử của danh sách (node) chứa một giá trị dữ liệu và một con trỏ (pointer) trỏ tới phần tử tiếp theo trong danh sách.

Các loại danh sách liên kết chính bao gồm:

Danh sách liên kết đơn (Singly linked list): mỗi node chỉ có một con trỏ trỏ tới phần tử tiếp theo trong danh sách.

Danh sách liên kết đôi (Doubly linked list): mỗi node có hai con trỏ, một con trỏ trỏ tới phần tử tiếp theo và một con trỏ trỏ tới phần tử trước đó trong danh sách.

Danh sách liên kết vòng (Circular linked list): danh sách liên kết trong đó phần tử cuối cùng của danh sách trỏ tới phần tử đầu tiên để tạo thành một vòng.

Danh sách liên kết được sử dụng trong nhiều ứng dụng, bao gồm việc triển khai các danh sách, hàng đợi, ngăn xếp và bộ nhớ động. Tuy nhiên, vì các phần tử trong danh sách không được lưu trữ liên tiếp nhau trong bộ nhớ, việc truy cập ngẫu nhiên đến các phần tử trong danh sách liên kết có thể là không hiệu quả.

Dưới đây là một ví dụ về danh sách liên kết đơn với 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

        current_node = self.head
        while current_node.next is not None:
            current_node = current_node.next

        current_node.next = new_node

    def display(self):
        current_node = self.head
        while current_node is not None:
            print(current_node.data, end=' ')
            current_node = current_node.next

linked_list = LinkedList()
linked_list.append(1)
linked_list.append(2)
linked_list.append(3)

linked_list.display() # Output: 1 2 3

Trong ví dụ này, chúng ta định nghĩa hai lớp là NodeLinkedList. Lớp Node chứa hai thuộc tính là datanext, thể hiện giá trị của phần tử và con trỏ trỏ tới phần tử tiếp theo trong danh sách. Lớp LinkedList bao gồm các phương thức để thêm một phần tử mới vào danh sách và hiển thị toàn bộ danh sách. Phương thức append tạo một nút mới và chèn nút đó vào cuối danh sách, trong khi phương thức display duyệt qua toàn bộ danh sách và in ra giá trị của mỗi phần tử.

Chúng ta tạo một đối tượng linked_list thuộc lớp LinkedList, sau đó thêm ba phần tử vào danh sách và cuối cùng hiển thị toàn bộ danh sách. Kết quả đầu ra là: 1 2 3.

Dưới đây là một ví dụ về danh sách liên kết đơn trong C++:

#include <iostream>
using namespace std;

class Node {
public:
    int data;
    Node* next;

    Node(int data) {
        this->data = data;
        this->next = nullptr;
    }
};

class LinkedList {
private:
    Node* head;

public:
    LinkedList() {
        head = nullptr;
    }

    void add(int data) {
        Node* new_node = new Node(data);

        if (head == nullptr) {
            head = new_node;
        } else {
            Node* current_node = head;
            while (current_node->next != nullptr) {
                current_node = current_node->next;
            }
            current_node->next = new_node;
        }
    }

    void display() {
        Node* current_node = head;
        while (current_node != nullptr) {
            cout << current_node->data << " ";
            current_node = current_node->next;
        }
    }
};

int main() {
    LinkedList linked_list;
    linked_list.add(1);
    linked_list.add(2);
    linked_list.add(3);

    linked_list.display(); // Output: 1 2 3

    return 0;
}

Trong ví dụ này, chúng ta định nghĩa hai lớp là NodeLinkedList. Lớp Node chứa hai thuộc tính là datanext, thể hiện giá trị của phần tử và con trỏ trỏ tới phần tử tiếp theo trong danh sách. Lớp LinkedList bao gồm các phương thức để thêm một phần tử mới vào danh sách và hiển thị toàn bộ danh sách. Phương thức add tạo một nút mới và chèn nút đó vào cuối danh sách, trong khi phương thức display duyệt qua toàn bộ danh sách và in ra giá trị của mỗi phần tử.

Chúng ta tạo một đối tượng linked_list thuộc lớp LinkedList, sau đó thêm ba phần tử vào danh sách và cuối cùng hiển thị toàn bộ danh sách. Kết quả đầu ra là: 1 2 3. Lưu ý rằng trong ví dụ này, chúng ta sử dụng nullptr thay vì NULL để đại diện cho con trỏ null trong C++.

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *