返回

跟上,链表就是这么简单:数据结构详解、实现与案例讲解

前端

我们经常在编程中使用数组。数组是一个有序的元素集合,每个元素都有一个索引,可以通过索引来访问。然而,数组也有它的缺点。比如,如果我们要在数组中间插入一个元素,我们就需要移动后面的所有元素,这可能会很耗时。

链表是一种可以解决这个问题的数据结构。链表是一种线性数据结构,由一组节点组成。每个节点包含两个部分:数据和指针。数据是节点存储的信息,指针指向下一个节点。链表中的第一个节点称为头节点,最后一个节点称为尾节点。

链表有以下优点:

  • 插入和删除元素很方便,不需要移动后面的元素。
  • 链表可以动态增长,而数组的大小是固定的。
  • 链表可以存储不同类型的数据,而数组只能存储相同类型的数据。

链表也有以下缺点:

  • 链表的访问速度比数组慢,因为需要遍历链表才能找到要访问的元素。
  • 链表占用更多的空间,因为每个节点都需要存储一个指针。

链表的应用非常广泛,比如:

  • 存储字符串
  • 存储链表
  • 实现队列和栈
  • 实现哈希表
  • 实现图

接下来,我们将通过一个例子来实现一个链表。我们将使用 C++ 语言,代码如下:

#include <iostream>

using namespace std;

struct Node {
    int data;
    Node* next;
};

class LinkedList {
public:
    LinkedList() {
        head = nullptr;
        tail = nullptr;
    }

    void insert(int data) {
        Node* new_node = new Node{data, nullptr};
        if (head == nullptr) {
            head = new_node;
            tail = new_node;
        } else {
            tail->next = new_node;
            tail = new_node;
        }
    }

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

private:
    Node* head;
    Node* tail;
};

int main() {
    LinkedList list;
    list.insert(1);
    list.insert(2);
    list.insert(3);
    list.insert(4);
    list.insert(5);

    list.print();

    return 0;
}

输出结果:

1 2 3 4 5