如何在c中创建数组的链表

问题描述

我想创建一个链表,其中包含类似可变长度数组的 int A[n][n]

我尝试这样做,但我收到错误 Incomplete type is not allowed

struct Node {
 int A[n][n];
 struct Node* next;
};

有没有办法在 c 中做到这一点?

解决方法

您需要使用在堆上分配的 int ** 以获得可变长度。为此,您需要一个构造函数和一个析构函数。我还添加了在构造函数中指定下一个节点的功能。

struct Node{
    size_t size;
    int **A;
    struct Node* next;
};

void construct_node(struct Node *node,size_t n,struct Node *next_node) {
    node->size = n;
    node->A = malloc(n * sizeof(int *));
    for (size_t i = 0; i < n; i++) {
        node->A[i] = malloc(n * sizeof(int));
    }
    node->next = next_node;
}

void destruct_node(struct Node *node) {
    for (size_t i = 0; i < node->size; i++) {
        free(node->A[i]);
    }
    free(node->A);
    // You probably also want to call destruct_node on the next node to free the entire list:
    // if (node->next) destruct_node(node->next);
}

执行此操作后,将需要以下代码来创建您的节点:

int size = 10;
struct Node your_node;
construct_node(&your_node,size,NULL);

// Do your stuff with the node

destruct_node(&your_node);