0
点赞
收藏
分享

微信扫一扫

用C语言写一个链表结构代码,包括添加,删除,和查找节点的功能。

南柯Taylor 2023-11-06 阅读 46

当然,下面是对这段代码的逐句解释:

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

这两行代码包含了C语言的标准库,stdio.h用于输入/输出操作,stdlib.h用于内存分配、数学函数等。

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

这段代码定义了一个名为Node的结构体类型,它有两个成员:一个整型的data和一个指向同类型结构体的指针next

Node* createNode(int data) {
    Node* newNode = (Node*)malloc(sizeof(Node));
    if (!newNode) {
        printf("内存错误\n");
        exit(0);
    }
    newNode->data = data;
    newNode->next = NULL;
    return newNode;
}

这是一个创建新节点的函数。它接收一个整数作为参数,然后使用malloc函数动态分配内存。如果内存分配失败,程序将打印错误信息并退出。然后,函数将传入的数据赋值给新节点的data成员,并将next成员设置为NULL。最后,函数返回新创建的节点的指针。

Node* addNode(Node* head, int data) {
    Node* newNode = createNode(data);
    newNode->next = head;
    return newNode;
}

这是一个添加新节点到链表头部的函数。它首先创建一个新节点,然后将新节点的next成员设置为当前的头节点,最后返回新的头节点。

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

这是一个删除节点的函数。它接收头节点和一个键作为参数,然后遍历链表以找到包含该键的节点。如果找到了这样的节点,它就会删除该节点并返回新的头节点。

Node* searchNode(Node* head, int key) {
    Node* current = head;
    while (current != NULL) {
        if (current->data == key) return current;
        current = current->next;
    }
    return NULL;
}

这是一个查找节点的函数。它接收头节点和一个键作为参数,然后遍历链表以找到包含该键的节点。如果找到了这样的节点,它就会返回该节点。如果没有找到,它就会返回NULL

这就是这段代码的逐句解释。如果您有任何问题,欢迎随时向我提问。😊

源: 与必应的对话, 2023/11/6 (1) github.com. https://github.com/humblefool96/DataStructure/tree/c0bb087ef546b97350a122da14912fa00e268820/LinkedList.cpp.

当然,以下是一个简单的链表结构的C语言代码,包括添加,删除和查找节点的功能:

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

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

Node* createNode(int data) {
    Node* newNode = (Node*)malloc(sizeof(Node));
    if (!newNode) {
        printf("内存错误\n");
        exit(0);
    }
    newNode->data = data;
    newNode->next = NULL;
    return newNode;
}

Node* addNode(Node* head, int data) {
    Node* newNode = createNode(data);
    newNode->next = head;
    return newNode;
}

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

Node* searchNode(Node* head, int key) {
    Node* current = head;
    while (current != NULL) {
        if (current->data == key) return current;
        current = current->next;
    }
    return NULL;
}

这段代码首先定义了一个链表节点的结构,然后提供了创建新节点、添加节点到链表头部、删除特定数据的节点以及查找特定数据的节点的函数。请注意,这是一个简单的实现,可能需要根据您的具体需求进行修改或扩展。在使用这段代码时,请确保正确地管理内存,避免内存泄漏。如果您有任何问题,欢迎随时向我提问。😊

举报

相关推荐

0 条评论