BC1424 Algoritmos e Estruturas de Dados I Aula 08: Algoritmos de busca e Listas encadeadas Prof. Jesús P. Mena-Chalco [email protected] 1Q-2016 1 Benchmark 2 Tidia Baixar do tidia os arquivos de teste: AED1­08.tar.gz (repositório) Subir o arquivo AED1­08.tar.gz a sua área no cloud9 Descomprimir o arquivo no cloud9. No terminal execute: tar xvf AED1­08.tar.gz 3 Gerando um vetor com números aleatórios $ gcc gerarVetorAleatorio.c ­o gerarVetorAleatorio.exe $ ./gerarVetorAleatorio.exe 10 4 Gerando um vetor crescente $ gcc gerarVetorCrescente.c ­o gerarVetorCrescente.exe $ ./gerarVetorCrescente.exe 10 5 Gerando o benchmark No terminal digite: sh ­v benchmark.sh O caractere '>' indica redirecionamento. O vetor com números será salvo em formato txt e terá o nome vetorAleatorio100.dat (pode ter qualquer extensão) 6 Busca de um elemento 7 Versão Elegante! (*) Fonte: P. Feofiloff. Algoritmos em Linguagem C. 1ª Edição, Editora Campos, 2008. 8 buscarLinear.c 9 buscarLinear.c $ gcc buscarLinear.c ­o buscarLinear.exe $ time ./buscarLinear.exe 1000000 < vetorAleatorio1000000.dat ­1 real 0m0.268s user 0m0.236s sys 0m0.024s 10 buscarLinearRec.c 11 buscarLinearRec.c $ gcc buscarLinearRec.c ­o buscarLinearRec.exe $ time ./buscarLinearRec.exe 1000000 < vetorAleatorio1000000.dat Segmentation fault real 0m0.249s user 0m0.180s sys 0m0.016s 12 buscarLinearRec.c $ gcc buscarLinearRec.c ­o buscarLinearRec.exe $ time ./buscarLinearRec.exe 1000 < vetorAleatorio1000000.dat real 0m0.002s user 0m0.000s sys 0m0.000s 13 Pesquisa (Busca) Binária 14 buscarBinarioRec.c Melhor caso: 1 Pior caso: log(n) 15 buscarBinarioRec.c $ gcc buscarBinarioRec.c ­o buscarBinarioRec.exe $ time ./buscarBinarioRec.exe 1000000 < vetorCrescente1000000.dat ­1 real 0m0.131s user 0m0.124s sys 0m0.000s 16 Para pensar… Se a chave não estiver no vetor, então devolver o índice do elemento mais próximo à chave. 17 Listas encadeadas 18 Estação Consolação: “Quatro estações” (1991). Mosaico abstrato feito de pastilhas vitrificadas por Tomie Ohtake null 19 Definição Uma lista encadeada é uma sequência de registros que armazenam células. → Cada célula contém um objeto de determinado tipo. → Cada célula contém o endereço para a célula seguinte. 3 6 7 -2 No caso da última célula, o endereço é NULL 20 Definição Suporemos que os objetos armazenados nas células são do tipo int. A estrutura de células pode ser definida como: 3 7 21 22 Listas O endereço de uma lista encadeada é o endereço de sua primeira célula. Se p é o endereço de uma lista, podemos dizer, “p é uma lista”. p 23 Outros tipos de listas encadeadas: Lista circular p 7 -3 4 A última célula aponta para a primeira 0 8 13 24 Outros tipos de listas encadeadas: Lista duplamente encadeada q p 7 9 -2 Null 75 Null Cada célula contém o endereço da célula anterior e o da seguinte 25 Desafio 1: +1 na P1 Implementar os 15 exercícios de listas ligadas do HackerRank Data: 15/Março até às 23h50. Envio: Através do Tidia. Arquivos: Para cada exercício-problema deverá submeter: O código fonte: nome do arquivo O comprovante de aceitação (screenshot) → RA_nomeDoProblema.c → RA_nomeDoProblema.pdf Exemplo: 10123456_solveMeFirst.c 10123456_solveMeFirst.pdf 26 27 (1) Print the Elements of a Linked List 28 (2) Insert a Node at the Tail of a Linked List 29 (3) Insert a node at the head of a linked list 30 (4) Insert a node at a specific position in a linked list 31 (5) Delete a Node 32