Algoritmos de busca e Listas encadeadas.

Propaganda
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
Download