File

Propaganda
Exercícios de Listas Simplesmente Encadeadas, Duplamente Encadeadas e Recursividade
1) Implemente uma lista ligada de produtos. Cada produto possui um código, descrição, preço de venda e preço
unitário. Na lista ligada devem ser implementados os métodos: construtor, adicionaFinal, adicionaInicio,
adiciona(em posição específica), removeFinal, removeInicio, remove (em posição específica) e mostra (mostra
todos os elementos).
2) Implemente uma fila, com alocação dinâmica de memória, para produtos. Cada produto possui um código,
descrição, preço de venda e preço unitário. Na fila devem ser implementados os métodos: construtor, adiciona,
remove e mostra (mostra todos os elementos).
3) Implemente uma pilha, com alocação dinâmica de memória, para produtos. Cada produto possui um código,
descrição, preço de venda e preço unitário. Na pilha devem ser implementados os métodos: construtor, empilha,
desempilha e mostra (mostra todos os elementos).
4) Na Pilha com alocação dinâmica de memória, com encadeamento simples, o topo é no início ou no final da
estrutura de dados? Qual é o motivo dessa implementação?
5) Simule passo-a-passo no papel as instruções a seguir considerando uma pilha p1 e uma fila f1, ambas com
alocação dinâmica de memória.
a) f1.adiciona(71);
b) f1.adiciona(72);
c) f1.adiciona(73);
d) f1.adiciona(74);
e) x=f1.remove();
f) p1.empilha(x);
g) x=f1.remove();
h) p1.empilha(x);
i) x=f1.remove();
j) p1.empilha(x);
k) x=p1.desempilha();
l) f1.adiciona(x);
m) x=p1.desempilha();
n) f1.adiciona(x);
o) x=p1.desempilha();
p) f1.adiciona(x);
6) Mostre as passagens necessárias para ordenar a sequência:
45
64
32
70
51
12
69
aplicando MergeSort
7) Mostre as passagens necessárias para ordenar a sequência
45
64
32
70
51
12
69
aplicando QuickSort
8) Modifique o método mergeSortRecursivo para classificar em ordem inversa os elementos.
9) Modifique o método quickSort para classificar em ordem inversa os elementos.
10) Modifique o método quickSort para utilizar como pivô o último elemento da subdivisão.
11) Considere o método:
int X(int a)
{
if ( a <= 0 )
return 0;
else
return a + X(a-1);
}
Simule e mostre a pilha de instruções.
12) Vários algoritmos em computação usam a técnica de “Dividir para Conquistar”:
basicamente eles fazem alguma operação sobre todos os dados, e depois dividem o problema em sub-problemas
menores, repetindo a operação. Uma equação de recorrência típica para esse tipo de algoritmo é mostrada abaixo.
Implemente um método Java com essa equação de recorrência.
T(n) = 2T(n/2) + n;
T(1) = 1;
13) O máximo divisor comum (MDC) de dois números inteiros x e y pode ser calculado usando-se uma
definição recursiva:
MDC(x,y) = MDC (x-y,y), se x>y.
E:
MDC(x,y)=MDC(y,x)
MDC(x,x)=x
Implemente um método Java com essa recorrência.
14) Implemente em Java uma lista duplamente encadeada que possui dois atributos, o primeiro é uma referência
para o primeiro nó, e outro, uma referência para o último nó. O tipo do dado é inteiro. Faça as alterações
necessárias nos métodos adicionaInicio, adicionaFinal, removeInicio e removeFinal. Implemente dois métodos
para percorrer a lista mostrando os elementos, um percorre do início para o fim, e outro, do final para o início.
Implemente um método que calcula e retorna a média dos elementos da lista.
15) Implemente em Java uma lista duplamente encadeada que possui dois atributos, o primeiro é uma referência
para o primeiro nó, e outro, uma referência para o último nó. O tipo do dado é String. Faça as alterações
necessárias nos métodos adicionaInicio, adicionaFinal, removeInicio e removeFinal. Implemente dois métodos
para percorrer a lista mostrando os elementos, um percorre do início para o fim, e outro, do final para o início.
Escreva um método que recebe por parâmetro uma String. No método a lista será percorrida do início para o
final, se a String começar com letras de a até l, buscando a String. A lista será percorrida do final para o início,
se a String começar com letra a partir de m, buscando a String. Se a String for encontrada, o método retorna
true, e caso contrário, false.
16) Implemente em Java uma Fila Circular com alocação dinâmica de memória.
17) Utilizando as classes Fila e Pilha, tanto com alocação dinâmica quanto estática de memória, implemente em
Java um método que recebe por parâmetro uma pilha, inverte seus elementos e retorna a Pilha invertida.
Download