나는 유형이 있습니다 :
typedef struct node
{
double data;
struct node * next;
}NODE;
연결된 목록 노드를 나타냅니다.
나는 기능이있다 :
void add(NODE ** head, double data)
{
NODE * new = NULL;
new = malloc(sizeof(NODE));
new->next = NULL;
new->data = data;
if(* head == NULL) * head = new;
else
{
NODE * temp = NULL;
for(temp = * head; temp->next; temp = temp->next);
temp->next = new;
}
}
목록 끝에 새 번호를 추가합니다.
차원 행렬을 기반으로 동적으로 할당 된 'n'연결 목록 배열 (배열의 모든 요소가 목록의 첫 번째 노드를 가리킴)을 형성하고 반환하는 함수 ( 'add'함수 사용)를 작성해야합니다. nxm ', 여기서 k 번째 목록의 요소는 행렬의 k 번째 순서의 요소와 일치해야합니다.
기능 프로토 타입 :
NODE ** mat2arr(double ** matrix, int n, int m)
여기서 '행렬'은 포인터 배열, n 개의 행 및 m 개의 열을 나타냅니다.
이렇게 시도했지만 분할 오류가 발생합니다. 코드를 수정하거나 새로운 아이디어로 다시 작성하려면 어떻게해야합니까? 또한 반환 된 연결 목록 배열에 액세스하여 값을 인쇄 할 수 있습니까?
NODE ** mat2arr(double ** matrix, int n, int m)
{
NODE ** array_list = NULL;
array_list = malloc(n * sizeof(NODE *));
for(int i = 0; i < n; i++)
{
NODE * list = NULL;
for(int j = 0; j < m; j++)
add(&list, matrix[i][j]);
array_list[i] = list;
}
return array_list;
}
mat2arr 함수 호출 :
NODE ** array_list = NULL;
array_list = mat2arr(matrix, n, m);
//matrix represents a 2D array, a matrix
이것은 작동하는 것 같습니다
#include <stdio.h>
#include <stdlib.h>
typedef struct node
{
double data;
struct node * next;
}NODE;
NODE * add(NODE * head, double data)
{
NODE * new = NULL;
new = malloc(sizeof(NODE));
new->next = NULL;
new->data = data;
if( head == NULL) {
head = new;
}
else
{
NODE * temp = head;
while( temp->next) {
temp = temp->next;
}
temp->next = new;
}
return head;
}
NODE ** mat2arr ( int n, int m, double **matrix)
{
NODE ** array_list = NULL;
array_list = calloc(n, sizeof(NODE *));
for(int i = 0; i < n; i++)
{
for(int j = 0; j < m; j++) {
array_list[i] = add(array_list[i], matrix[i][j]);
}
}
return array_list;
}
int main ( void) {
double **myArray = NULL;
NODE ** array_list = NULL;
myArray = calloc ( sizeof *myArray, 5);
for ( int i = 0; i < 5; ++i) {
myArray[i] = calloc ( sizeof **myArray, 3);
for ( int j = 0; j < 3; ++j) {
myArray[i][j] = ( i + 1) * ( j + 1);
}
}
array_list = mat2arr( 5, 3, myArray);
for(int i = 0; i < 5; i++) {
NODE * each = array_list[i];
while ( each) {
printf ( "data %f\n", each->data);
each = each->next;
}
printf ( "\n");
}
for(int i = 0; i < 5; i++) {
NODE * each = array_list[i];
while ( each) {
NODE *temp = each;
each = each->next;
free ( temp);
}
free ( myArray[i]);
}
free ( array_list);
free ( myArray);
return 0;
}
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다