Buscar

Estrutura de Dados - Lista de Listas Encadeadas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 3 páginas

Prévia do material em texto

Disciplina: Estrutura de Dados I 
Profª: Hellen Carmo de Oliveira Matos 
Aluno: Cleiton Alves e Silva Junior 
 
Lista de Exercícios – Listas Encadeadas 
1. Escreva uma função que encontre uma célula com conteúdo mínimo. 
R: 
int contMin(CELULA *le) 
{ 
int Cont; 
 
CELULA *P, *Q; 
P = le; 
Q = le->prox; 
Cont = Q->conteudo; 
 
while(Q->prox != NULL) 
{ 
 if(Q->conteudo < Cont) 
 { 
 Cont = Q->conteudo; 
 P = Q; 
 Q = P->prox; 
 } 
 P = Q; 
 Q = P->prox; 
} 
 return Q; 
} 
 
2. Escreva uma função que copie o conteúdo de um vetor para uma lista encadeada preservando a 
ordem dos elementos. 
R: 
celula *copiaVetorLista(int vetor[], int n){ 
 celula *lista, *novaCel, *p; 
 int i; 
 lista = (celula)malloc(sizeof(celula)); 
 lista->conteudo = vetor[0]; 
 lista->prox = NULL; 
 p=lista; 
 for(i=1;i<n;i++){ 
 novaCel= (celula)malloc(sizeof(celula)); 
 novaCel->conteudo = vetor[i]; 
 p->prox=novaCel; 
 p=novaCel; 
 novaCel->prox=NULL; 
 
 } 
 return lista; 
} 
3. Escreva uma função que copie o conteúdo de uma lista encadeada para um vetor preservando a 
ordem dos elementos. 
 
R: 
celula *p; 
 int i, tamanhoLista=0; 
 
 for(p=lista;p!=NULL;p=p->prox)//conta o tamanho da lista 
 tamanhoLista++; 
 
 int vetor[tamanhoLista]; 
 p=lista 
 for(i=0;i<tamanhoLista;i++){ 
 vetor[i]= p->conteudo; 
 p= p->prox; 
 } 
} 
 
4. Escreva uma função que faça uma cópia de uma lista encadeada. 
R: 
celula *copiaLista(celula *ini){ 
 celula *p, *listaCopia, *auxCopia, *q; 
 p=ini; 
 listaCopia = (celula)malloc(sizeof(celula)); 
 listaCopia->conteudo = p->conteudo; 
 listaCopia->prox=NULL; 
 q=listaCopia; 
 
 for(p=ini->prox;p!=NULL;p=p->prox){ 
 auxCopia = (celula)malloc(sizeof(celula)); 
 auxCopia->conteudo = p->conteudo; 
 q->prox = auxCopia; 
 q = auxCopia; 
 auxCopia->prox=NULL; 
 } 
 return listaCopia; 
} 
5. Escreva uma função que concatene duas listas encadeadas (isto é, engate a segunda no fim da 
primeira). 
R: 
Lista* concatList(Lista* a, Lista* b){ 
 
 Lista* temp = b; 
 while(temp != NULL){ 
 a = inserirFim(a, temp->item); 
 temp = temp->prox; 
 } 
 return a; 
} 
 
6. Escreva uma função que conte o número de células de uma lista encadeada. 
R: 
void contaRecursiva(celula *p) 
{ 
 int numCel; 
 if(p != NULL) 
 { 
 numCel++; 
 contaRecursiva(p->prox); 
 } 
} 
 
7. Escreva uma função que verifique se duas listas encadeadas são iguais, ou melhor, se têm o mesmo 
conteúdo. Faça duas versões: uma iterativa e uma recursiva. 
R: 
bool comparar(no *lista1, no *lista2) 
{ 
 no *atual1 = lista1; 
 no *atual2 = lista2; 
 
 while (atual1 != NULL && atual2 != NULL) 
 { 
 if (atual1->info != atual2->info) 
 { 
 return false; 
 } 
 
 atual1 = atual1->prox; 
 atual2 = atual2->prox; 
 } 
 
 return true; 
} 
 
OBS: TENTE FAZER AS DUAS VERSÕES(ITERATIVA E RECURSIVA) EM TODAS AS 
QUESTÕES

Outros materiais