Ir ao conteúdo

Lista encadeada - Concatenar


rs40

Posts recomendados

Postado

Estou com problemas para criar esta função

Implementar um função para concatenar 2 listas encadeadas. Sendo estas listas de valores reais. E deverá seguir o protótipo Lista*concatena (Lista* l1, Lista* l2);

Segue o que consegui fazer


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

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


Lista* lista_cria() {
return NULL;
}

Lista* lista_insere (Lista* l, int i) {
Lista* novo = (Lista*) malloc(sizeof(Lista));
novo->info = i;
novo->prox = l;
return novo;
}

void lista_imprime (Lista* l) {
Lista* p; /* variavel auxiliar para percorrer a lista */
for (p = l; p != NULL; p = p->prox)
printf("info = %f\n", p->info);
}

/* concatena modificando l1 */
Lista* concatena (Lista* l1, Lista* l2)
{
Lista* p; /* variável auxiliar para percorrer a lista */
Lista* q; /* variável auxiliar para criar a nova lista */

if (l1 == NULL)
return l2;

p = l1;
do
{
q = p;
p = p->prox;
}
while(p != NULL);

q->prox = l2;

return l1;
}


main() {
Lista* l;
int n;
l = lista_cria();
l = lista_insere(l, 23);
l = lista_insere(l, 45);
l = lista_insere(l, 67);
l = lista_insere(l, 89);
l = lista_insere(l, 1011);
lista_imprime(l);
printf("\n");
printf("\nLista concatenada: %f",concatena(l1,l2));

getch();
}


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

O erro esta na linha: printf("\nLista concatenada: %f",concatena(l1,l2));

Alguém poderia ajudar?

Postado

1- Sua lista é de float e você tá usando inteiro para inserir... não deve ser bom, né?

2- printf("%f",variavel); serve para imprimir UMA variável REAL e você está passando um ponteiro para ele e não um valor real...

Postado

Refiz o código mais ainda sim esta com erro na hora de imprimir


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

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


Lista* lista_cria() {
return NULL;
}

Lista* lista_insere (Lista* l, int i) {
Lista* novo = (Lista*) malloc(sizeof(Lista));
novo->info = i;
novo->prox = l;
return novo;
}

void lista_imprime (Lista* l) {
Lista* p; /* variavel auxiliar para percorrer a lista */
for (p = l; p != NULL; p = p->prox)
printf("info = %d\n", p->info);
}

/* concatena modificando l1 */
Lista* concatena (Lista* l1, Lista* l2)
{
Lista* p; /* variável auxiliar para percorrer a lista */
Lista* q; /* variável auxiliar para criar a nova lista */

if (l1 == NULL)
return l2;

p = l1;
do
{
q = p;
p = p->prox;
}
while(p != NULL);

q->prox = l2;

return l1;
}

main() {
Lista* l;
Lista* l2;
Lista* l1;

l = lista_cria();
l = lista_insere(l, 23);
l = lista_insere(l, 45);
l = lista_insere(l, 67);
l = lista_insere(l, 89);
l = lista_insere(l, 1011);

printf("\nLista original:\n");
lista_imprime(l);

//criando e imprimindo a lista l2
l2 = lista_cria();
l2 = lista_insere(l, 30);
l2 = lista_insere(l, 44);
l2 = lista_insere(l, 69);
l2 = lista_insere(l, 90);
l2 = lista_insere(l, 1013);

printf("\n");
printf("\nLista depois da concatenacao:\n");
concatena(l1,l2);

getch();
}

Postado

Assim funciona:


#include <stdlib.h>

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


Lista* lista_cria() {
return NULL;
}

Lista* lista_insere (Lista* l, int i) {
Lista* novo = (Lista*) malloc(sizeof(Lista));

novo->info = i;
novo->prox = l;

return novo;
}

void lista_imprime (Lista* l) {
/* nao precisa de variavel auxiliar para percorrer a lista */

for (; l != NULL; l = l->prox)
printf("info = %d\n", l->info);
}

/* concatena modificando l1 */
void concatena (Lista* l1, Lista* l2)
{
Lista* p; /* variável auxiliar para percorrer a lista */

if (l1 != NULL)
{
do
{
p = l1;
l1 = l1->prox;
}while(l1 != NULL);

p->prox = l2;
}
}

int main()
{
Lista* l;
Lista* l2;

l = lista_cria();
l = lista_insere(l, 23);
l = lista_insere(l, 45);
l = lista_insere(l, 67);
l = lista_insere(l, 89);
l = lista_insere(l, 1011);

printf("\nLista original:\n");
lista_imprime(l);

//criando e imprimindo a lista l2
l2 = lista_cria();
l2 = lista_insere(l2, 30);
l2 = lista_insere(l2, 44);
l2 = lista_insere(l2, 69);
l2 = lista_insere(l2, 90);
l2 = lista_insere(l2, 1013);
printf("\nLista 2:\n");
lista_imprime(l2);
printf("\n");
printf("\nLista depois da concatenacao:\n");
concatena(l,l2);
lista_imprime(l);

getchar();
return 0;
}
#include <stdio.h>

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!