Buscar

Estrutura de Dados APOL 1

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 13 páginas

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 6, do total de 13 páginas

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 9, do total de 13 páginas

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

Prévia do material em texto

Questão 1/10 - Estrutura de Dados 
Uma função que implementa parte do algoritmo merge sort pode ser vista abaixo. Todo o resto do algoritmo foi omitido para 
que analisemos somente este método. O algoritmo completo pode ser visto no material PDF da Aula 2. 
No código, inicio e fim são variáveis inteiras que correspondem a posições no vetor de dados, parteinteira significa truncar em 
zero casas decimais o respectivo cálculo da linha 6 e intercala refere-se a uma função que realiza a ordenação neste método. 
 
1. Função mergesort(X, inicio, fim) 
2. Var 
3. Meio: inteiro 
4. Inicio 
5. Se (inicio < fim) então 
6. Meio <- parteinteira((inicio + fim) / 2) 
7. mergesort(X, inicio, meio) 
8. mergesort(X, meio + 1, fim) 
9. Intercala(X, inicio, fim, meio) 
10. Fimse 
11. funfunção 
 
A assumindo que a dimensão do vetor de dados X é 10, e que a primeira chamada da função mergesort foi realizada com os 
seguintes parâmetros: Função mergesort(X, 0, 9). 
Acerca deste algoritmo, assinale a alternativa INCORRETA: 
Nota: 10.0 
 
A Na segunda instância aberta da função mergesort na memória do programa, a variável inicio vale zero e a variável meio vale 2. 
 
B Na primeira instância aberta da função mergesort na memória do programa, a variável meio corresponde ao valor 4. 
 
C Na segunda instância aberta da função mergesort na memória do programa, a variável inicio vale zero e a variável fim vale 2. 
Você acertou! 
Fim vale 4. 
 
D Na terceira instância aberta da função mergesort na memória do programa, a variável inicio vale zero e a variável fim vale 2. 
 
E Na primeira instância aberta da função mergesort na memória do programa, a variável inicio vale zero e a variável fim vale 9. 
 
Questão 2/10 - Estrutura de Dados 
Uma implementação do algoritmo de ordenação do tipo bubble sort pode ser visto abaixo. As partes que envolvem impressão 
de dados na tela e leitura de dados foram omitidas para um melhor entendimento do que é necessário na questão. 
 
X[TAMANHOVETOR], i, j, aux: inteiro 
para i de 1 até TAMANHOVETOR faça 
 para j de 0 até (TAMANHOVETOR - 2) faça 
 se (X[j] > X[j + 1]) então 
 aux <- X[j] 
 X[j] <- X[j + 1] 
 X[j + 1] <- aux 
 fimse 
 fimpara 
fimpara 
Acerca deste algoritmo, assinale a alternativa CORRETA: 
 
Nota: 10.0 
 
A O algoritmo apresentado no exercício realizado a ordenação de dados numéricos, inteiros, em ordem decrescente. 
Ordenação é crescente. 
 
B As linhas de código que correspondem a troca dos valores usando uma variável auxiliar poderiam ser também escritas da seguinte maneira: 
aux <- X[j+1] 
X[j+1] <- X[j] 
X[j] <- aux 
Você acertou! 
AULA 2 – TEMA 2. CORRETO. 
 
C Se precisarmos ordenar dados não numéricos, como caracteres, precisaremos repensar em toda a lógica do bubble sort, não sendo possível adaptar o código facilmente. 
Basta adaptarmos a linha da condicional para funcionar com outro tipo de dado. 
 
D Não é possível implementar o bubble sort com laços de repetição do tipo enquanto. 
É possível implementar com qualquer tipo de laço, para, enquanto ou repita. 
 
E A complexidade deste algoritmo, para o pior caso, é O(logn). 
Complexidade O(n²). 
 
Questão 3/10 - Estrutura de Dados 
Filas apresentam características de inserção e remoção na estrutura de dados seguindo a regra do primeiro que entra é o 
primeiro que sai. Observe o código da fila abaixo construída utilizando listas encadeadas. O código realiza a inserção de um 
novo elemento nesta fila. 
 
1. NovoElemento->dado = numero 
2. se (Head == NULO) então 
3. Head = NovoElemento 
4. Senão 
5. ElementoVarredura = Head 
6. enquanto (ElementoVarredura->prox <> NULO) 
7. ElementoVarredura = ElementoVarredura->prox 
8. Fimenquanto 
9. ElementoVarredura->prox = NovoElemento 
10. NovoElemento->prox = NULO 
11. Fimse 
Considerando que NovoElemento é um novo elemento que será inserido nesta fila, ElementoVarredura é uma variável que 
servirá para localizar o local de inserção, Head é o elemento que está no início da fila, assinale a alternativa CORRETA 
acerca de filas implementadas com listas encadeadas: 
Nota: 10.0 
 
A O último elemento da lista encadeada deverá conter um ponteiro nulo, conforme indicado na linha 9. 
Na linha 10. 
 
B As linhas 6, 7 e 8 indicam nos dizem que, para realizar a inserção, precisamos varrer até localizarmos o último elemento, o qual não poderá conter um ponteiro nulo. 
O último conterá um ponteiro nulo. 
 
C Se o head estiver nulo, significa que podemos inserir um elemento após o head, mesmo que ele esteja nulo 
Head nulo significa inserir no local do próprio head. 
 
D A varredura pela posição de inserção inicia no primeiro elemento da lista, conforme indicado na linha 5. 
Você acertou! 
Correto. 
 
E Não seria possível substituir o laço de repetição enquanto por uma para-faça devido a condição de parada aplicada. 
É sempre possível substituir um laço de repetição por outro, basta fazer as devidas adaptações. 
 
Questão 4/10 - Estrutura de Dados 
No primeiro assunto de nossa disciplina investigamos o que são estruturas de dados e como podemos classificá-las em tipos. 
Acerca deste assunto, assinale a alternativa INCORRETA: 
Nota: 10.0 
 
A Um dado que pode ser decomposto em partes mais simples, é considerado um dado estruturado e, portanto, uma estrutura de dados. 
 
B Os tipos de dados manipulados por um algoritmo podem ser classificados em duas categorias distintas: os atômicos, que são dados indivisíveis, e os dados compostos, 
que podem ser divisíveis em mais partes menores. 
 
C Podemos classificar uma estrutura de dados como sendo do tipo homogênea (como registros) ou do tipo heterogênea (como vetores e matrizes). 
Você acertou! 
AULA 1 – TEMA 1. Podemos classificar uma estrutura de dados como sendo do tipo heterogênea (como registros) ou do tipo homogênea (como vetores e matrizes). 
 
D Uma estrutura homogênea é aquela cujo tipo dos dados nela armazenados são de um único tipo, como inteiro, real, caractere ou lógico 
 
E Uma estrutura contendo dados do tipo caractere e do tipo real pode ser considerada uma estrutura de dados heterogênea. 
 
Questão 5/10 - Estrutura de Dados 
O algoritmo abaixo foi desenvolvido empregando uma lógica iterativa: 
Função Calcula (n: inteiro, x: inteiro): inteiro 
 y: inteiro 
 para i de 0 até n faça 
 se (x < 0) então 
 para i de 0 até n faça 
 y = y + 1 
 fimpara 
 senão 
 para i de 0 até x faça 
 y = y + 1 
 fimpara 
 fimse 
 fimpara 
 retorne y 
Fimfunção 
Acerca ao algoritmo acima, e trabalhando com os conceitos de complexidade assintótica e recursividade, assinale a 
alternativa CORRETA: 
Nota: 0.0 
 
A A função contém três laços de repetição, sendo que todos os três laços podem acabar sendo executados cada vez que esta função por chamada. 
Como o valor de x recebido como parâmetro nunca muda dentro da mesma chamada da função, teremos somente 2 laços sendo executados por vez devido a condicional composta. 
 
B A complexidade da função, para o pior caso será O(n³). 
Como temos somente 2 laços aninhados, a complexidade será O(n²). 
 
C A função não realiza chamadas de si mesma, portanto pode ser considerada uma função recursiva. 
Uma função recursiva é a que realizada chamadas de si mesma. 
 
D Caso exista a possibilidade de implementação deste algoritmo usando uma função recursiva, e sem uso de laços de repetição, a complexidade em tempo de execução da 
implementação irá melhorar. 
AULA 1 – TEMA 3, 4 E 5. Sim, pois implementando com recursividade teremos uma complexidade atrelada a um crescimento logarítmico. 
 
E Caso substituíssemos todos os laços de repetição do tipo para, por laços do tipo enquanto, o desempenho do algoritmo em tempo de execução irá melhorar 
significativamente,uma vez que o laço enquanto tem um custo inferior ao do para. 
O custo de todos os três tipos de laços de repetição é o mesmo na análise de complexidade e, virtualmente não faz diferença qual você utiliza. 
 
Questão 6/10 - Estrutura de Dados 
Uma função que implementa parte do algoritmo quick sort pode ser vista abaixo. Todo o resto do algoritmo foi omitido para 
que analisemos somente este método. O algoritmo completo pode ser visto no material PDF da Aula 2. 
No código, a função chamada de particao refere-se à função que localiza um pivô no vetor de dados e faz as respectivas 
trocas dos valores, ordenando seguindo algum critério. 
No código, vet é o vetor de dados, e troca é a função que realiza uma troca entre dois valores destoantes utilizando uma 
variável auxiliar. 
 
1. int particao(int vet[], int p, int u) 
2. { 
3. int pivo, pivo_pos, i, j; 
4. pivo_pos = (p + u) / 2; 
5. pivo = vet[pivo_pos]; 
6. 
7. i = p - 1; 
8. j = u + 1; 
9. while (i < j) 
10. { 
11. do 
12. { 
13. j--; 
14. } while (vet[j] > pivo); 
15. 
16. do 
17. { 
18. i++; 
19. } while (vet[i] < pivo); 
20. 
21. if (i < j) 
22. troca(vet, i, j); 
23. } 
24. return j; 
25. } 
Acerca deste algoritmo, assinale a alternativa INCORRETA: 
Nota: 10.0 
 
A A variável pivo_pos localiza a posição a qual conterá o valor de referência para comparações com todos os outros valores do vetor. 
 
B Na linha 11 até a linha 14 comparamos o pivô com todos os valores ao lado direito do mesmo. Caso um valor seja menor que o pivô, ele deve ser colocado para uma 
posição anterior a do pivô, ou no máximo, no local do pivô. 
 
C Na linha 16 até a linha 19 comparamos o pivô com todos os valores ao lado esquerdo do mesmo. Caso um valor seja maior que o pivô, ele deve ser colocado para uma 
posição posterior a do pivô, ou no máximo, no local do pivô. 
 
D A troca (linha 21 e 22) pode acontecer entre um valor do lado esquerdo e do lado direito, ou entre o próprio pivô e um dos valores destoantes de cada um dos lados. 
 
E Na linha 4 acessamos a posição do pivô no vetor e na linha 5 acessamos a posição correspondente do vetor conforme calculado na linha 4. 
Você acertou! 
Primeiro localizamos a posição (linha 4) e depois o valor daquela posição (linha 5). 
 
Questão 7/10 - Estrutura de Dados 
No terceiro assunto da disciplina estudamos a estrutura de dados do tipo lista encadeada. O código abaixo representa a 
inserção em uma lista encadeada. 
 
1. NovoElemento->dado = numero 
2. se (Head == NULO) então 
3. Head = NovoElemento 
4. Head->prox = NULO 
5. Senão 
6. NovoElemento->prox = Head 
7. Head = NovoElemento 
8. fimse 
Considerando que NovoElemento é um novo elemento que será inserido nesta lista e Head caracteriza o primeiro elemento 
da lista. Assinale a alternativa CORRETA sobre este algoritmo. 
Nota: 10.0 
 
A O algoritmo apresentado representa uma inserção no final de uma lista encadeada simples, pois um laço faz a varredura até localizar o final da lista e insere o novo 
elemento. 
Não existe laço que varre até o final da lista. 
 
B O algoritmo apresentado representa uma inserção no início de uma lista encadeada dupla, pois a linha 6 mostra o novo elemento apontando para o Head. 
A lista não é do tipo simples. 
 
C O algoritmo apresentado representa uma inserção no início de uma lista encadeada simples, pois a linha 6 mostra o novo elemento apontando para o Head. 
Você acertou! 
CORRETO – AULA 3 – TEMA 2. 
 
D O algoritmo apresentado representa uma inserção no final de uma lista encadeada dupla, pois um laço faz a varredura até localizar o final da lista e insere o novo 
elemento. 
Não existe laço que varre até o final da lista e alista é simples. 
 
E Baseado no algoritmo apresentado, podemos afirmar que este código pertence ao de uma lista encadeada simples e circular. 
Não podemos afirmar que a lista é circular, pois só saberemos caso víssemos o código de inserção no final da lista. 
 
Questão 8/10 - Estrutura de Dados 
No terceiro assunto da disciplina estudamos a estrutura de dados do tipo lista encadeada. O código abaixo representa a 
inserção em uma posição específica da lista encadeada simples. 
 
1. NovoElemento->dado = numero 
2. se (posicao == 0) então 
3. Head = NovoElemento 
4. Head->prox = NULO 
5. Senão 
6. ElementoVarredura = Head 
7. para i de 0 até posicao faça 
8. ElementoVarredura = ElementoVarredura->prox 
9. Fimpara 
10. ElementoAuxiliar = ElementoVarredura->prox 
11. ElementoVarredura->prox = NovoElemento 
12. NovoElemento->prox = ElementoAuxiliar 
13. Fimse 
Considerando que NovoElemento é um novo elemento que será inserido nesta lista, ElementoVarredura é uma variável que 
servirá para localizar o local de inserção, ElementoAuxiliar é uma variável temporária para auxiliar na inserção do dado, Head 
caracteriza o primeiro elemento da lista e prox é o ponteiro para o próximo elemento da lista. Assinale a alternativa 
INCORRETA sobre este algoritmo. 
Nota: 10.0 
 
A Nas linhas 7 a 9 temos o laço de repetição que localiza a posição em que o elemento será inserido. 
 
B Na linha 8, a variável ElementoVarredura salta de elemento em elemento da lista, sempre utilizando como referencia o ponteiro para o próximo elemento. 
 
C Nas linhas 10, 11 e 12 fazemos uma troca entre 2 valores da lista encadeada utilizando uma variável auxiliar. 
Você acertou! 
Errado, pois não temos uma troca, mas sim a inserção do novo elemento. 
 
D Na linha 10 uma variável auxiliar armazena temporariamente o elemento subsequente ao da posição desejada para inserção. 
 
E Na linha 12, o novo elemento, agora já inserido na respectiva posição da lista, aponta para o elemento armazenado na variável auxiliar, que corresponde ao elemento 
subsequente ao da posição inserida. 
 
Questão 9/10 - Estrutura de Dados 
No terceiro assunto de nossa disciplina estudamos uma nova estrutura de dados denominada de LISTA ENCADEADA. Um 
tipo de lista encadeada é a chamada de LISTA ENCADEADA DUPLA, ou LISTA DUPLAMENTE ENCADEADA. 
Acerca de listas encadeadas simples, assinale a alternativa CORRETA: 
Nota: 10.0 
 
A Uma lista encadeada dupla só permite a inserção no início desta lista. 
Permite em qualquer posição. 
 
B Uma lista encadeada dupla conterá, em cada elemento, dois ponteiros de endereços. Um endereço corresponderá ao primeiro elemento da lista e o outro endereço ao 
último elemento da lista. 
Um endereço é do elemento imediatamente subsequente e do anterior, e não do primeiro e último. 
 
C Uma lista encadeada dupla circular conterá em seu último elemento, o endereço do primeiro elemento da lista. E conterá no seu primeiro elemento, o endereço do último 
elemento da lista. Fechando dois círculos. 
Você acertou! 
CORRETO. 
 
D Os dados de uma lisa dupla podem ser acessados mais rapidamente que uma simples, devido ao emprego de um ponteiro a mais. 
Os ponteiros nada impactam no tempo de acesso da lista. 
 
E Uma lista encadeada dupla ocupa o dobro de memória do programa em relação a uma lista simples, pois precisa armazenar duas vezes os dados de cada elemento. 
O fato de existir um ponteiro a mais não impacta significativamente a ponto de dobra o uso de memória. 
 
Questão 10/10 - Estrutura de Dados 
Assuma um vetor de dimensão 10 com dados numéricos e inteiros colocados na seguinte ordem: 
 
| 05 | 07 | 08 | 14 | 24 | 29 | 56 | 77 | 78 | 88 | 
Suponha que você deseja implementar um algoritmo de busca para localizar algum dado neste vetor já ordenado de maneira 
crescente. Você resolve testar a busca sequencial e a busca binária. 
Acerca destes algoritmos e analisando o vetor acima, assinale a alternativa CORRETA: 
Nota: 10.0 
 
A No algoritmo de busca sequencial, o valor 24 seria localizado na 6ª tentativa, se fizermos uma varredura da esquerda para a direita. 
Na 5ª tentativa. 
 
B No algoritmo de busca binária, o valor 24 seria localizadona 3ª tentativa. 
Na 1ª tentativa. 
 
C No algoritmo de busca sequencial, o valor 77 seria localizado mais rapidamente que se comparado com a busca binária. 
Binária se sairia mais rápida. 
 
D No algoritmo de busca sequencial, o valor 07 seria localizado mais rapidamente que se comparado com a busca binária. 
Você acertou! 
CORRETO. Levará menos iterações. 
 
E Em nenhum cenário de busca o algoritmo sequencial irá localizar o valor antes da busca binária. 
É possível que sim, a sequencial ache antes. Dependerá o valor buscado e onde ele se localizado no vetor.

Outros materiais