返回

源代码奉上,助你玩转单链表(C语言)!

后端

单链表的创建之旅:深入浅出,逐个击破

什么是单链表?

单链表是一种线性的数据结构,它由一系列称为节点的结构组成。每个节点包含两个部分:数据元素和指向下一个节点的指针。

用 C 语言定义节点结构

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

头结点:链表的入口

头结点是一个特殊的节点,不存储任何数据,而是指向链表中的第一个节点。

struct node *head = NULL;

尾插法:逐个加入元素

尾插法是一种在链表尾部插入元素的方法。

void insert_at_tail(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 *current = head;
        while (current->next != NULL) {
            current = current->next;
        }
        current->next = new_node;
    }
}

遍历单链表:访问每个节点

遍历链表意味着从头结点开始,依次访问每个节点,直到到达尾节点。

void print_list() {
    struct node *current = head;

    // 从头结点遍历链表
    while (current != NULL) {
        printf("%d ", current->data);
        current = current->next;
    }
}

代码示例:实践操作

int main() {
    // 创建链表
    insert_at_tail(1);
    insert_at_tail(2);
    insert_at_tail(3);
    insert_at_tail(4);
    insert_at_tail(5);

    // 遍历链表并打印元素
    print_list();

    return 0;
}

输出:

1 2 3 4 5

总结:掌控单链表

掌握单链表的操作是数据结构学习之旅中的重要一步。使用尾插法,我们能够逐个向链表中添加元素。通过遍历链表,我们能够访问并操作每个节点中的数据。这些基础知识将为你在更复杂的数据结构中探索数据结构的世界奠定坚实的基础。

常见问题解答

  1. 链表与数组有什么区别?

    • 链表中的节点存储在内存的任意位置,而数组中的元素存储在连续的内存地址中。这使得链表比数组更灵活,但查找和访问数据也更慢。
  2. 如何从单链表中删除节点?

    • 删除节点涉及调整指向节点的指针,以绕过要删除的节点。这需要使用额外的指针来跟踪当前节点的前一个节点。
  3. 链表的优点有哪些?

    • 链表的优点包括能够动态地添加和删除元素,以及在处理不连续数据时更具灵活性。
  4. 链表的缺点有哪些?

    • 链表的缺点包括查找和访问数据需要遍历整个链表,并且需要额外的空间来存储指针。
  5. 单链表适合哪些应用场景?

    • 单链表通常用于存储插入和删除频繁的动态数据,例如缓冲区、栈和队列。