GUJ Discussões   :   últimos tópicos   |   categorias   |   GUJ Respostas

Como inserir um Vetor de números em uma Lista em C?

programação
Tags: #<Tag:0x00007f9d20731210>

#1

Como faço para inserir cada número do vetor em um nó e endereço diferente? Só consigo inserir um número:

#include <stdio.h>
#include <stdlib.h>

typedef struct lista {
	float info;
	struct lista *prox;
}Lista;

Lista *Cria(void){
    return NULL;
}

Lista *Insere(float *v,int tam,Lista *p){
    int count = 0;
    Lista *nova;
    nova = malloc(sizeof(Lista));

    for(count; count <= tam-1; count++){
        printf("%f\n",v[count]);
        nova->info = v[count];
        nova->prox = p;
    }
    p = nova;
    return p;
}

Lista *Concatena(Lista *L1, Lista *L2){
    while(L1->prox != NULL){
        L1 = L1->prox;

        if(L1->prox == NULL){
            L1->prox = L2;
            return L1;
        }
    }
}

void Imprime(Lista *p){
    for(; p!=NULL; p = p->prox){
        printf("END: %p  - VALOR: %f  - PROX END: %p\n\n",p,p->info,p->prox);
    }
}

main(){
    float v1[3] = {1.0,4.5,2.1}, v2[2] = {9.8,7.2};
    int tamv1 = sizeof(v1)/sizeof(float), tamv2 = sizeof(v2)/sizeof(float);
    Lista *L1, *L2;
    L1 = Cria();
    L2 = Cria();

    if((L1 == NULL) && (L2 == NULL)){
        printf("LISTAS (1 e 2) VAZIAS\n");
        printf("INSERINDO OS VALORES NAS LISTAS..\n\n");
        L1 = Insere(v1,tamv1,L1);
        L2 = Insere(v2,tamv2,L2);
        L1 = Concatena(L1,L2);
        Imprime(L1);
    } else {
        printf("\nAS LISTAS (1 e 2) CONTÉM VALORES\n\n");
    }

}

#2
#include <stdio.h>
#include <stdlib.h>

struct sNode {
    float val;
    struct sNode *next;
};

struct sNode* new_node(float val) {
    struct sNode* node = calloc(1, sizeof(struct sNode));
    node->val = val;
    return node;
}

struct sNode* create_list(const float* src, size_t len) {
    struct sNode *head, *curr, *temp;
    curr = head = new_node(src[0]);
    for (int i = 1; i < len; i++) {
        temp = new_node(src[i]);
        curr->next = temp;
        curr = temp;
    }
    return head;
}

void print_list(struct sNode *head) {
    while (head->next) {
        printf("%.2f -> ", head->val);
        head = head->next;
    }
    printf("%.2f\n", head->val);
}

int main() {
    float v[] = {1.0, 2.0, 3.0, 4.0, 5.0};
    size_t len = 5;
    print_list(create_list(v, len));
}