Ir ao conteúdo
  • Cadastre-se

Criar e Concatenar Lista simplesmente encadeada


skaz

Posts recomendados

Minha duvida é seguinte, para criar duas listas simplesmente encadeadas seria necessário duas estruturas?

Escrevi uma estrutura e uma função para inserir dados, apontem os erros se puderem sei que são muitos pois não tenho a minina noção de como criar duas listas.

struct lista{

int num;

struct lista *prox,*prox2;

};

typedef struct lista Lista;

Lista* ini(){

return NULL;

}

Lista* insereF(Lista *lista,int i)

{

Lista *novo,*novo2;

Lista *Lt;

lista=ini();

novo=(Lista*)malloc(sizeof(Lista));

novo2=(Lista*)malloc(sizeof(Lista));

i+=1;

printf("Primeira Lista:\n informe o %d numero: ",i);

scanf("%d",&novo->num);

novo->prox=lista;

system("cls");

printf("Segunda Lista:\n informe o %d numero: ",i);

scanf("%d",&novo2->num);

novo2->prox2=lista;

novo->prox=novo2->prox2;

novo2->prox2=lista;

Lt=(Lista*)malloc(sizeof(Lista)); // alocar memoria para lista concatenada

Lt->prox=novo2->prox2;

return Lt;

}

Link para o comentário
Compartilhar em outros sites

Segue correção para a sua função:


int insereF( Lista **lista, Lista **lista2, int i )
{

Lista *novo = NULL;
Lista *ptr = NULL;

i++; /** O mesmo que 'i += 1' **/

novo = (Lista *) malloc( sizeof( Lista ) );
novo->prox = NULL;

printf( "Primeira Lista:\n informe o %d numero: ", i );
scanf( "%d", &novo->num );
ptr = *lista;
novo->prox = *lista;
*lista = novo;

system( "cls" );

novo = (Lista *) malloc( sizeof( Lista ) );

printf( "Segunda Lista:\n informe o %d numero: ", i );
scanf( "%d", &novo->num );
ptr = *lista2;
novo->prox = *lista2;
*lista2 = novo;

return i;
}

Como chamar a função:


Lista *lista1 = NULL;
Lista *lista2 = NULL;
int contador = 0;

contador = insereF( &lista1, &lista2, contador );

Lembro que, a função 'insereF()', irá inserir cada elemento novo na primeira posição da lista.

Link para o comentário
Compartilhar em outros sites

Segue correção para a sua função:


int insereF( Lista **lista, Lista **lista2, int i )
{

Lista *novo = NULL;
Lista *ptr = NULL;

i++; /** O mesmo que 'i += 1' **/

novo = (Lista *) malloc( sizeof( Lista ) );
novo->prox = NULL;

printf( "Primeira Lista:\n informe o %d numero: ", i );
scanf( "%d", &novo->num );
ptr = *lista;
novo->prox = *lista;
*lista = novo;

system( "cls" );

novo = (Lista *) malloc( sizeof( Lista ) );

printf( "Segunda Lista:\n informe o %d numero: ", i );
scanf( "%d", &novo->num );
ptr = *lista2;
novo->prox = *lista2;
*lista2 = novo;

return i;
}

Como chamar a função:


Lista *lista1 = NULL;
Lista *lista2 = NULL;
int contador = 0;

contador = insereF( &lista1, &lista2, contador );

Lembro que, a função 'insereF()', irá inserir cada elemento novo na primeira posição da lista.

caso eu queira fazer uma pesquisa na lista terei de declarar o tipo da função como o tipo Lista, porém ao utilizar esta lista concatenada a comparação apenas encontrara o segundo numero inserido na lista (fora do loop).Caso mais de 2 numeros seja inseridos a função não encontra nenhum :wacko:

void pesquisaF(Lista *L)

{

Lista *p;

int aux,resp;

printf("Informe um numero para pesquisa: ");

scanf("%d",&aux);

for( p=L ; p!=NULL ; p = p->prox){

if(! p->num == aux ){

resp=1;

break;

}else{

resp=0;

break;

}

}

if(resp==1){

printf("encontrado!\n");

}else{

printf("nao encontrado!\n");

}

system( "cls" );

}

Link para o comentário
Compartilhar em outros sites

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...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!