返回

数据结构与算法之单链表,一文读懂!

后端

单链表:概述与基本概念

在计算机科学中,单链表是一种重要的数据结构。它是一种线性结构,由一系列称为节点的元素组成。每个节点包含两个部分:数据项和指针。数据项存储实际数据,而指针指向下一个节点。这种结构允许单链表中的节点以逻辑上连续的方式连接起来,即使它们在物理内存中不一定是连续的。

单链表:操作与应用

单链表的操作主要包括遍历、插入、删除和搜索。

遍历:遍历单链表是指从头到尾访问链表中的所有节点。遍历单链表的常见方法是使用循环。

插入:插入操作是指在链表中添加一个新的节点。插入操作可以发生在链表的开头、中间或结尾。

删除:删除操作是指从链表中删除一个现有节点。删除操作可以发生在链表的开头、中间或结尾。

搜索:搜索操作是指在链表中查找一个特定的节点。搜索操作可以通过遍历链表并比较每个节点的数据项来实现。

单链表:代码示例

以下是用C语言实现的单链表的基本操作:

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

struct Node *head = NULL;

void insert_at_beginning(int data) {
    struct Node *new_node = (struct Node *)malloc(sizeof(struct Node));
    new_node->data = data;
    new_node->next = head;
    head = new_node;
}

void insert_at_end(int data) {
    struct Node *new_node = (struct Node *)malloc(sizeof(struct Node));
    new_node->data = data;
    new_node->next = NULL;

    if (head == NULL) {
        head = new_node;
    } else {
        struct Node *temp = head;
        while (temp->next != NULL) {
            temp = temp->next;
        }
        temp->next = new_node;
    }
}

void delete_at_beginning() {
    if (head == NULL) {
        return;
    }

    struct Node *temp = head;
    head = head->next;
    free(temp);
}

void delete_at_end() {
    if (head == NULL) {
        return;
    }

    if (head->next == NULL) {
        free(head);
        head = NULL;
        return;
    }

    struct Node *temp = head;
    while (temp->next->next != NULL) {
        temp = temp->next;
    }

    free(temp->next);
    temp->next = NULL;
}

void search(int data) {
    struct Node *temp = head;

    while (temp != NULL) {
        if (temp->data == data) {
            printf("Data found!\n");
            return;
        }
        temp = temp->next;
    }

    printf("Data not found!\n");
}

void print_list() {
    struct Node *temp = head;

    while (temp != NULL) {
        printf("%d ", temp->data);
        temp = temp->next;
    }

    printf("\n");
}

int main() {
    insert_at_beginning(10);
    insert_at_beginning(20);
    insert_at_end(30);
    insert_at_end(40);

    print_list();

    search(20);
    search(50);

    delete_at_beginning();
    delete_at_end();

    print_list();

    return 0;
}

单链表:延伸与拓展

单链表只是链表家族中的一个成员。其他类型的链表包括双链表、循环链表和双向循环链表。这些链表各有其优缺点,适合不同的应用场景。

在计算机科学中,单链表是一个非常重要的数据结构。它被广泛应用于各种领域,包括操作系统、编译器、数据库和图形学。单链表的简单性和灵活性使其成为许多复杂数据结构的基础。