Ir para conteúdo

POWERED BY:

Arquivado

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

Lanna Oliveira

Somar duas listas encadeadas

Recommended Posts

Gente, preciso de ajuda, estou fazendo um trabalho onde eu preciso somar duas listas encadeadas. No caso, somar a primeira posição da primeira lista, com a primeira da segunda, e assim sucessivamente, e armazenar numa terceira lista, mas já quebrei a cabeça e não consigo! Se as listas tem tamanhos iguais, da certo, mas se elas são de tamanho diferente, não consigo. Alguém me ajuda? Desde já agradeço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Apenas coloque os elementos da lista maior na 3a lista.

Mas, o problema é que se trata de polinomios...

 

Por exemplo, na primeira lista eu tenho 2x³ + 4x²+3x+1

e na segunda eu tenho 3x²+2x+3

 

O resultado tem que sair, 2x³+7x²+5x+4... Não consigo fazer isso...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se vc estiver usando arrays (sim, é comum ter gente falando de lista encadeada e estar usando arrays estáticos): use o grau da variável como índice e armazene só o coeficiente. A constante vai ficar na posição 0.

 

int a[] = {1, 3, 4, 2}; //2x³ + 4x²+3x+1
int b[] = {3, 2, 3};

 

Itere sobre o menor somando as posições e depois copie o resto do polinômio maior p/ nova lista.

 

Com uma lista encadeada vc vai ter que criar uma função de busca pelo grau do termo em cada polinômio e retorna a posição dele na lista. Nesse caso, provavelmente a estrutura de dados é uma struct contendo coeficiente e grau:

 

 

typedef struct {
   int coeficient;
   int grau;
} termo;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acho a solução que usa arrays mais elegante.

 

Se realmente precisar usar listas, sugiro manter a ordenação pelo coeficiente. Isso exclui a necessidade de armazenar o grau do elemento e é fácil de fazer:

 

 

bool insert(list_t *polynomial, unsigned int degree, double coefficient);
double get_coeff(list_t *polynomial, unsigned int degree);
...

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.