Baixe o app para aproveitar ainda mais
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
Compartilhar