Lista encadeada - Concatenar

1. Lista encadeada - Concatenar

thunder
thunder1

(usa Outra)

Enviado em 12/04/2011 - 11:52h

Estou com problemas para criar estas duas funções:
Implementar um função para concatenar 2 listas encadeadas reais. Sendo estas listas de valores reais. E deverá seguir o protótipo Lista*concatena (Lista* l1, Lista* l2);
Segue o que consegui fazer

http://pastebin.com/EzG10ERS

Só que esta com erro na hora de imprimir a lista

O compilador diz que existe um erro na função printf

Alguém poderia ajudar?


  


2. Re: Lista encadeada - Concatenar

Mauricio Souza Klein
Hebang

(usa Arch Linux)

Enviado em 12/04/2011 - 13:15h

Você está usando Malloc para alocar mais espaço na lista.

Faça o seguinte: use malloc para alocar o tamanho inicial (primeiro elemento).
Quando for inserir os próximos, use realloc.

Quando você usa Malloc, ele aloca uma nova posição de memória em qualquer lugar possivel da memória. Ou seja, os seus dados atuais são perdidos. O realloc aloca mais espaço em um trecho de memória já alocado.

Explicando: Se a sua lista fosse um trem, o malloc joga seu trem atual fora e coloca um novo e vazio no lugar. O realloc coloca mais um vagão no seu trem atual (desculpe pelo baby step, mas garanto que entendeu a idéia :))

Espero ter ajudado!


3. Re: Lista encadeada - Concatenar

Bruno Rogério Fernandes
brunorf

(usa Arch Linux)

Enviado em 12/04/2011 - 13:46h

Cara, não há nenhum problema com o malloc, como dito.
Acontece que realmente tem alguns erros no uso do printf.
Na linha 90,no primeiro printf, foi especificado que o segundo parâmetro deveria ser um float(%f), mas o tipo de retorno da função comprimento(Lista *) é int. Isso também aconteceu nas linhas 93 e 94, relativos a impressão do valor de retorno da função maiores(Lista *, int) e do ultimo(l)->info. Por fim, na linha 96, o problema é que também foi especificado que o segundo parâmetro deveria ser um float(%f), porém o valor de retorno da função concatena(Lista*, Lista*) é um tipo struct Lista*, ou seja, não é um número. Portanto o printf não funcionará.
O que deve ser feito é usar a função que você mesmo criou, chamada lista_imprime, em vez de printf, ficando assim:
lista_imprime(l1, l2).

Outro problema que constatei foi que você só criou uma lista, e não duas como requerido pela função lista_imprime. Além disso, quando você tentou usar a função printf com a função concatena, foi utilizado o identificador l1, que não foi declarado. o correto é somente l.

Espero ter ajudado






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts