construct a linked list from 2d matrix in c
C program for construct a linked list from 2d matrix. Here problem description and other solutions.
// C Program for
// Construct a linked list from 2D matrix
#include <stdio.h>
#include <stdlib.h> //for malloc function
#define ROW 3
#define COLS 5
//create structure
struct Node {
int data;
struct Node * next;
struct Node * down;
};
// insert Node element of end of linked list
struct Node * insert(int value) {
// Create a dynamic node
struct Node * node = (struct Node * ) malloc(sizeof(struct Node));
if (node == NULL) {
printf("Memory overflow\n");
exit(0);
} else {
//set data value
node->data = value;
node->next = NULL;
node->down = NULL;
}
return node;
}
//display element of Node
void display(struct Node * head) {
if (head == NULL) {
printf("Empty linked list");
} else {
struct Node * right_side = NULL;
//Traverse doubly linked list from front to rear
while (head != NULL) {
right_side = head;
while (right_side != NULL) {
printf("%3d", right_side->data);
right_side = right_side->next;
}
printf("\n");
head = head->down;
}
}
}
struct Node * insertData(int(*matrix)[COLS],
int row,
int cols) {
struct Node *head = NULL,
*levelHead = NULL,
*root = NULL,
*perv = NULL;
// Add first rows in linked List
for (int i = 0; i < cols; ++i) {
if (head == NULL) {
head = insert(matrix[0][i]);
levelHead = head;
} else {
levelHead->next = insert(matrix[0][i]);
levelHead = levelHead->next;
}
}
levelHead = head;
for (int i = 1; i < row; ++i) {
root = NULL;
perv = root;
for (int j = 0; j < cols; ++j) {
// Add element into next nows
levelHead->down = insert(matrix[i][j]);
if (root == NULL) {
root = levelHead->down;
perv = root;
} else {
perv->next = levelHead->down;
perv = levelHead->down;
}
levelHead = levelHead->next;
}
levelHead = root;
}
return head;
}
int main() {
// Create 2D metrix
int matrix[ROW][COLS] = {
{1,6,9,2,-9},
{2,5,-5,7,1},
{3,4,-1,8,2}
};
struct Node * head = insertData(matrix, ROW, COLS);
display(head);
return 0;
}
Output
1 6 9 2 -9
2 5 -5 7 1
3 4 -1 8 2
Please share your knowledge to improve code and content standard. Also submit your doubts, and test case. We improve by your feedback. We will try to resolve your query as soon as possible.
New Comment