From your question I understood that the goal is the conversion of a structure containing sequential data (a vector and its number of elements) into a linked list structure (containing head).
I don’t understand the reason for nesting two structures in the sequential list, but I still did the program according to the types you defined (I just changed the name).
The code follows below. I have separated the print functions and inserted comments to help understanding. The vector was initialized with some sample data.
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define MAX 100
// tipo dos dados da lista sequencial
typedef struct dados {
int num[MAX];
int qtd;
} dados;
// tipo da lista sequencial
typedef struct {
dados dados;
} lista_sequencial;
// tipo dos nós da lista ligada
typedef struct no {
int numero;
struct no *prox;
} no;
// tipo da cabeça da lista ligada
typedef struct lista {
no *cabeca;
} lista_ligada;
// função para impressão da lista sequencial
void imprime_lista_sequencial(lista_sequencial *ls) {
for(int i = 0; i < ls->dados.qtd; i++)
printf("%d ", ls->dados.num[i]);
}
// função para impressão da lista ligada
void imprime_lista_ligada(lista_ligada *ll) {
no *p;
p = ll->cabeca;
while(p != NULL) {
printf("%d ", p->numero);
p = p->prox;
}
}
int main(int argc, char *argv[]) {
// Inicializa lista sequencial */
lista_sequencial ls;
for (int i=0; i <= 20; i++) {
ls.dados.num[i] = i * 2;
}
ls.dados.qtd = 21;
// impressão da lista sequencial
printf("Lista Sequencial: ");
imprime_lista_sequencial(&ls);
// criação da lista ligada com cabeça e cópia dos dados da lista sequencial */
lista_ligada ll;
ll.cabeca = NULL;
no **pn = &ll.cabeca;
for (int i = 0; i < ls.dados.qtd; i++) {
*pn = (no *) malloc(sizeof(no));
(*pn)->numero = ls.dados.num[i];
(*pn)->prox = NULL;
pn = &(*pn)->prox;
}
// impressão da lista ligada
printf("\nLista Ligada: ");
imprime_lista_ligada(&ll);
}
In a sequential list the data is organized by physical contiguity in a linked list you have to use pointers to indicate where the next data is.
– anonimo
I know that, but I can’t make the conversion please help me
– Lourenciano