在C语言中向链接列表添加节点

在C语言中向链接列表添加节点

链接列表是计算机编程中使用的一种数据结构,由一连串的元素组成,每个元素都包含对下一个元素的引用(链接)。与数组不同,链接列表中的元素不存储在连续的内存位置。相反,每个元素都被存储在一个单独的内存位置,并通过一个引用链接到下一个元素。

链接列表对于创建动态数据结构非常有用,可以很容易地插入、删除或更新。它们通常被用于编程语言,如C和C++,也可以在其他语言中找到,如Java和Python。然而,链接列表的访问时间比数组慢,因为链接列表中的元素必须从第一个元素开始,通过遍历列表进行访问。

C代码的实现。

C语言中的链接列表可以用一个类或结构来实现,它定义了链接列表的属性和方法。该类或结构应该包含一个指向列表中第一个元素的指针,称为头,以及一个用于存储列表中元素数量的变量。下面是一个用 C 语言实现大型链接列表的例子

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

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

struct LinkedList {
    struct Node* head;
    int size;
};

void init(struct LinkedList* list) {
    list->head = NULL;
    list->size = 0;
}

void insert(struct LinkedList* list, int value) {
    struct Node* newNode = (struct Node*) malloc(sizeof(struct Node));
    newNode->data = value;
    newNode->next = list->head;
    list->head = newNode;
    list->size++;
}

void deleteNode(struct LinkedList* list, int pos) {
    if (pos < 0 || pos >= list->size) {
        printf("Invalid position!\n");
        return;
    }
    if (pos == 0) {
        struct Node* temp = list->head;
        list->head = list->head->next;
        free(temp);
    } else {
        struct Node* current = list->head;
        for (int i = 0; i < pos-1; i++) {
            current = current->next;
        }
        struct Node* temp = current->next;
        current->next = temp->next;
        free(temp);
    }
    list->size--;
}

void printList(struct LinkedList* list) {
    struct Node* current = list->head;
    while (current != NULL) {
        printf("%d ", current->data);
        current = current->next;
    }
    printf("\n");
}

int getSize(struct LinkedList* list) {
    return list->size;
}

int main() {
    struct LinkedList list;
    init(&list);
    insert(&list, 5);
    insert(&list, 10);
    insert(&list, 15);
    printList(&list); // Output: 15 10 5
    deleteNode(&list, 1);
    printList(&list); // Output: 15 5
    printf("Number of elements: %d\n", getSize(&list)); // Output: 2
    return 0;
}

输出

15 10 5 
15 5 
Number of elements: 2

在C语言中向链接列表添加节点

下面是一个简单的C语言代码的例子,它演示了如何用一个主函数向一个链接列表添加一个新的节点。

C语言代码

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

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

struct LinkedList {
    struct Node* head;
};

void addNode(struct LinkedList* list, int value) {
    struct Node* newNode = (struct Node*) malloc(sizeof(struct Node));
    newNode->data = value;
    newNode->next = NULL;

    if (list->head == NULL) {
        list->head = newNode;
        return;
    }

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

    current->next = newNode;
}

int main() {
    struct LinkedList list;
    list.head = NULL;

    addNode(&list, 5);
    addNode(&list, 10);
    addNode(&list, 15);

    struct Node* current = list.head;
    while (current != NULL) {
        printf("%d ", current->data);
        current = current->next;
    }
    printf("\n");
    return 0;
}

输出

5 10 15

解释一下。

在这段代码中,函数addNode需要两个参数,一个指向链接列表的指针和一个整数值,这个整数值将被存储在新节点的数据字段中。首先,它创建一个新的节点对象,将值分配给数据字段,并将下一个字段设置为NULL。

链接列表更适合于动态数据结构和插入、删除元素,而数组更适合于快速随机访问,并具有更好的缓存定位。然而,这取决于用例和特定的实现。

然后,它检查列表的头部是否为NULL,如果是,它将新的节点分配到头部,否则它将遍历列表,找到最后一个节点并将新的节点添加到列表的末尾。在主函数中,它创建了一个LinkedList对象,并将头部设置为NULL,多次调用addNode函数来添加一些值,然后遍历列表来打印所有值。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程