📜  list - C 编程语言(1)

📅  最后修改于: 2023-12-03 15:32:43.197000             🧑  作者: Mango

List - C 编程语言

在 C 编程语言中,数组是一种固定大小的数据结构,它的大小在编译时确定。然而,有时候需要一个动态大小的数据结构,这时候就需要使用 List。

List 可以在运行时根据需要动态增长或缩减大小。 它允许向其添加或删除元素,并允许访问任何元素。在 C 标准库中没有内置的 List 数据结构,但是通过使用指针可以轻松地创建一个 List。

实现 List

为了实现 List,需要定义一个指向链表第一个节点的指针。链表节点包含一个数据元素和一个指向下一个节点的指针。下面是一个定义 List 节点的数据结构:

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

要创建 List,需要定义一个头指针和一个数组尺寸。在添加和删除节点时,需要遍历整个链表以定位操作的节点。下面是一个具有添加,删除和遍历功能的 List 的代码实现:

#include <stdio.h>
#include <stdlib.h>

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

void add(Node **head, int data) {
    Node *newNode = (Node*) malloc(sizeof(Node));
    newNode->data = data;
    newNode->next = NULL;
  
    if (*head == NULL) {
        *head = newNode;
        return;
    }

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

void removeNode(Node **head, int data) {
    Node *temp = *head, *prev;
    if (temp != NULL && temp->data == data) {
        *head = temp->next;
        free(temp);
        return;
    }

    while (temp != NULL && temp->data != data) {
        prev = temp;
        temp = temp->next;
    }

    if (temp == NULL) {
        return;
    }

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

void printList(Node *head) {
    Node *temp = head;
    while (temp != NULL) {
        printf("%d ", temp->data);
        temp = temp->next;
    }
}

int main() {
    Node *head = NULL;

    add(&head, 1);
    add(&head, 2);
    add(&head, 3);

    printf("List: ");
    printList(head);
    printf("\n");

    removeNode(&head, 2);

    printf("List after deleting 2: ");
    printList(head);
    printf("\n");

    return 0;
}
总结

List 是一种在 C 编程语言中实现动态大小数据结构的方法。通过使用指针和链表节点,可以轻松地创建 List。在添加和删除节点时,需要遍历整个链表以定位要操作的节点。List 提供了一个可以动态增长或缩减大小的数据结构,在某些情况下,它可能比数组更为适用。