Lista de Exercícios - Revisão 2º. Bimestre ED
1) Desenhe uma árvore binária para cada item a seguir mantendo a propriedade de, em um percurso em Ordem Simétrica, os elementos serem exibidos em ordem crescente e, em seguida, aplique os três percursos para exibir os elementos. a) 25, 45, 83, 16, 36, 9, 13, 18, 64, 21, 17, 39, 5, 30, 92
b) 123, 201, 46, 17, 155, 273
c) 85, 118, 97, 67, 11, 136, 26, 106, 71
2) Desenhe uma árvore binária para cada item a seguir mantendo a propriedade de, em um percurso em Ordem Simétrica, os elementos serem exibidos em ordem decrescente e, em seguida, aplique os três percursos para exibir os elementos. a) 25, 45, 83, 16, 36, 9, 13, 18, 64, 21, 17, 39, 5, 30, 92
b) 123, 201, 46, 17, 155, 273
c) 85, 118, 97, 67, 11, 136, 26, 106, 71
3) Desenhe uma árvore binária para cada item a seguir mantendo a propriedade de, em um percurso em Ordem Simétrica, os elementos serem exibidos em ordem alfabética e, em seguida, aplique os três percursos para exibir os elementos. a) Márcia, Daniela, Pedro, Orlando, Luiz, Ana, Olivia, Carlos, Aldria
b) Denise, Célia, Clélia, Lúcia, Elaine, Bruna 4) Dada a árvore, mostre os três percursos:
a) b)
c)
d)
5) Desenhe uma árvore binária para cada item a seguir mantendo a propriedade de, em um percurso em Ordem Simétrica, os elementos serem exibidos em ordem crescente e, em seguida, aplique os três percursos para exibir os elementos e sua quantidade de ocorrências. Os elementos repetidos devem ter a quantidade de ocorrências guardada no nó.
a) 25, 45, 83, 16, 36, 9, 83, 13, 25, 18, 64, 21, 17, 83, 39, 5, 30, 92, 64, 16, 83 b) 123, 201, 46, 17, 155, 273, 201, 17, 123, 46, 201, 273, 155, 46
c) 85, 118, 97, 67, 11, 136, 26, 106, 71, 85, 71, 97, 118, 85, 97, 71, 11
6) Implemente uma classe em Java para uma Árvore Binária com elementos do tipo String. A repetição de elemento deve ser controlada com um atributo para sua contagem. A classe deve possuir construtor, método para adicionar elemento, método para remover elemento (decrementando a contagem enquanto ela for maior que 1) e um método para cada percurso.
7) (ENADE-ADS-2014) Uma função é denominada recursiva quando ela é chamada novamente dentro de seu corpo. Implementações recursivas também tendem a ser menos eficientes, porém facilitam a codificação e seu entendimento.
CELES, W.; CERQUEIRA, R.; RANGEL, J.L. Introdução a estruturas de dados. Rio de Janeiro, 2004 (adaptado).
Considere a função recursiva f(), a qual foi escrita em linguagem C:
1. int f ( int v[], int n){
2. if(n== 0) 3. return 0; 4. else { 5. int s; 6. s = f (v, n-1); 7. if (v[n-1] > 0) s = s + v [n-1]; 8. return s; 9. } 10. }
Suponha que a função f() é acionada com os seguintes parâmetros de entrada: f({2,-4, 7, 0, -1, 4}, 6);
Nesse caso, o valor de retorno da função f() será: a) 8
b) 10 c) 13 d) 15 e) 18
8) (ENADE-ADS-2014) Existem várias maneiras de se percorrer uma árvore binária. A função a seguir, escrita em pseudo-código, percorre uma árvore na ordem esquerda-raiz-direita, conhecida por varredura e-r-d recursiva. A função erd() recebe por parâmetro a raiz r de uma árvore, e faz uso de seus elementos esq, dir e cont, que representam, respectivamente, ponteiros para uma sub-árvore à direita e de r e o conteúdo de r respectivamente.
função erd (árvore r) { se ( r != NULO) { erd( r -> esq); escreva (r -> conteúdo); erd (r -> dir); } }
Considere a árvore binária a seguir.
A sequência correta de exibição do conteúdo da árvore utilizando a função erd() é: a) 5, 3, 8, 0, 1, 7, 2
b) 0, 1, 7, 2, 3, 8, 5 c) 0, 3, 5, 1, 7, 8, 2 d) 0, 3, 1, 5, 7, 8, 2 e) 2, 7, 8, 5, 0, 3, 1
9) Qual é o valor de retorno da função a seguir, caso n=27? int recursao (int n){
if (n <= 10) { return n * 2; } else {
return recursao ( recursão (n/3) ); } } a) 8 b) 9 c) 12 d) 16 e) 18
10) Mostre passo-a-passo a execução de cada método a seguir em uma lista ligada (lista1). Considere que a lista ligada está vazia.
a) lista1.adicionaInicio(73) b) lista1.adicionaFinal(45) c) lista1.adicionaInício(98) d) lista1.remove(2) e) lista1.adicionaInício(22) f) lista1.adiciona(2,33) g) lista1.removeFinal() h) lista1.removeInício()
11) Mostre passo-a-passo a execução de cada método a seguir em uma lista ligada (lista2). Considere que a lista ligada já possui dois nós com os elementos 101 e 87, respectivamente.
a) lista2.adicionaInicio(15) b) lista2.adicionaFinal(44)
c) lista2.removeInício() d) lista2.adiciona(2,31) e) lista2.adicionaInício(92) f) lista2.remove(3) g) lista2.removeFinal() h) lista2.adicionaInício(98)
12) Implemente uma pilha com alocação dinâmica de memória para elementos do tipo String
13) Implemente uma fila com alocação dinâmica de memória para elementos do tipo String
14) Implemente uma lista ligada, com todos os métodos necessários para o seu funcionamento, para inserir texto em ordem alfabética e remover um determinado texto passado por parâmetro ao método.
15) Implemente uma fila circular com alocação dinâmica de memória para elementos do tipo String
16) Implemente uma lista duplamente encadeada, com todos os métodos necessários para o seu funcionamento. Nesta lista poderão ser adicionados e removidos elementos do tipo double, no início e no final.
17) ENADE2011-No desenvolvimento de um software que analisa bases de DNA, representadas pelas letras A, C, G, T, utilizou-se as estruturas de dados: pilha e fila. Considere que, se uma sequência representa uma pilha, o topo é o elemento mais à esquerda; e se uma sequência representa uma fila, a sua frente é o elemento mais à esquerda. Analise o seguinte cenário: “a sequência inicial ficou armazenada na primeira estrutura de dados na seguinte ordem: (A,G,T,C,A,G,T,T). Cada elemento foi retirado da primeira estrutura de dados e inserido na segunda estrutura de dados, e a sequência ficou armazenada na seguinte ordem: (T,T,G,A,C,T,G,A). Finalmente, cada elemento foi retirado da segunda estrutura de dados e inserido na terceira estrutura de dados e a sequência ficou armazenada na seguinte ordem: (T,T,G,A,C,T,G,A)”. Qual a única sequência de estruturas de dados apresentadas a seguir pode ter sido usada no cenário descrito acima? Justifique a sua resposta.
a) Pilha - Fila – Pilha b) Pilha - Pilha – Pilha c) Fila - Pilha – Fila d) Fila - Fila – Pilha e) Fila - Pilha – Pilha
18) Considere que uma tabela de espalhamento possui um vetor do tipo abstrato de dados ListaLigada, com duas posições, e que nela esteja armazenada uma sequência de quadrado de números inteiros como 1, 4, 9, ..., n2. Cada número da sequência é a chave enviada para a função de espalhamento que deverá calcular e devolver o índice em que a chave será armazenada. Implemente em Java a classe completa da tabela de espalhamento para este problema.
19) Considere que uma tabela de espalhamento armazena uma sequência de quadrado de números inteiros como 1, 4, 9, ..., n2, sendo que n2 é a chave enviada para a função de espalhamento. A função de espalhamento para esta tabela é:
public int funcaoEspalhamento(int chave){ return chave % 2;
}
Selecione a alternativa que indica a implementação mais adequada da tabela de espalhamento para a função de espalhamento acima:
a) A classe implementada para esta tabela de espalhamento possui apenas um atributo que é um vetor do tipo int de capacidade máxima 2. Dessa forma não ocorrerá colisão porque o método funcaoEspalhamento implementado não retornará o mesmo índice para chaves diferentes.
b) A classe implementada para esta tabela de espalhamento possui apenas um atributo que é um vetor do tipo int de capacidade máxima 3. Dessa forma não ocorrerá colisão porque o método funcaoEspalhamento implementado não poderá retornar o mesmo índice para mais de uma chave.
c) A classe implementada para esta tabela de espalhamento possui apenas um atributo que é um vetor do tipo ListaLigada de capacidade máxima 2. Dessa forma não ocorrerá colisão porque mesmo que o mesmo índice seja devolvido para chaves diferentes, a lista ligada poderá guardar mais de um valor.
d) A classe implementada para esta tabela de espalhamento possui apenas um atributo que é um vetor do tipo ListaLigada de capacidade máxima 3. Dessa forma ocorrerá colisão.