Когда нам нужно передать массив списков в функцию на языке программирования Си или 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++. Однако, в зависимости от требований программы, вы можете изменить структуру списка и реализовать более сложные операции над списками.