Как передать массив списков в функцию Си (С++)?

Когда нам нужно передать массив списков в функцию на языке программирования Си или C++, мы можем воспользоваться указателями и динамической памятью для создания и манипуляций с этими списками.

Для начала нам нужно создать структуру, представляющую список. Например, мы можем определить структуру Node, которая будет содержать данные элемента списка и указатель на следующий элемент:

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

Далее мы можем создать массив указателей на списки. Например, пусть у нас есть массив LinkedLists[], состоящий из элементов типа Node*. Каждый элемент этого массива будет указывать на первый элемент соответствующего списка.

Затем мы можем создать функцию, которая принимает массив списков в качестве параметра. Например, функция printLists будет выводить элементы каждого списка на экран:

void printLists(Node* lists[], int numLists) {
    for (int i = 0; i < numLists; ++i) {
        printf("List %d: ", i);
        Node* current = lists[i];
        while (current != NULL) {
            printf("%d ", current->data);
            current = current->next;
        }
        printf("n");
    }
}

Чтобы заполнить массив списков и передать его в функцию, нам потребуется выделить память и связать элементы внутри каждого списка. Вот пример функции main, которая заполняет массив и передает его в функцию printLists:

int main() {
    int numLists = 3;
    Node** lists = malloc(numLists * sizeof(Node*));
    
    for (int i = 0; i < numLists; ++i) {
        Node* head = NULL;
        for (int j = 0; j < i + 1; ++j) {
            Node* newNode = malloc(sizeof(Node));
            newNode->data = j;
            newNode->next = head;
            head = newNode;
        }
        lists[i] = head;
    }
    
    printLists(lists, numLists);
    
    // Освобождаем память после использования
    for (int i = 0; i < numLists; ++i) {
        Node* current = lists[i];
        while (current != NULL) {
            Node* next = current->next;
            free(current);
            current = next;
        }
    }
    free(lists);
    
    return 0;
}

В этом примере мы создали массив списков, где каждый список является односвязным списком целых чисел. Мы заполнили массив списков с помощью циклов и вывели значения каждого списка с помощью функции printLists. Затем мы освободили память, чтобы избежать утечек памяти.

Это пример базового использования массива списков в C/C++. Однако, в зависимости от требований программы, вы можете изменить структуру списка и реализовать более сложные операции над списками.