You are on page 1of 3

Universidade Federal Fluminense

Instituto de Computao
Departamento de Cincia da Computao
Programao de Computadores II
Professores: Leandro A. F. Fernandes, Marcos Lage, Isabel Rosseti

4 Lista de Exerccios
Listas lineares
1) Seja L uma lista simplesmente encadeada composta de nmeros inteiros cujos ns so l1, l2,
l3, ..., ln. Escreva uma classe com mtodos que, percorrendo L, uma nica vez, construa uma
outra lista L formada dos seguintes elementos:

l2, l3 ,..., ln, l1;


ln, ln-1,, l1;
l1+ln, l2+ln-1,,ln/2+ln/2+1; onde n par.

2) Escreva uma classe ListaInteiros, atravs de uma lista ordenada simplesmente encadeada
com as seguintes operaes:

a) Verificar se um nmero pertence lista;


b) Inserir um novo elemento na lista mantendo a ordem;
c) Remover um elemento da lista;
d) Imprimir os valores da lista;
e) Copiar uma lista l1 para uma lista l2;
f) Concatenar uma lista l1 com uma lista l2;
g) Intercalar l1 e l2;

3) Resolva o exerccio anterior utilizando recursividade, sempre que possvel, na


implementao das operaes.

4) Considere uma coleo de nomes de sites da web e seus respectivos links na Internet
armazenados atravs de uma lista simplesmente encadeada. Escreva uma classe que contenha
um mtodo que, dado o nome de um site, busque o seu link correspondente na lista e ao mesmo
tempo mova o n que contm o nome buscado para o incio da lista, de forma que ele possa ser
encontrado mais rapidamente na prxima vez que for buscado.

5) Escreva uma classe Java que implemente uma lista ordenada duplamente encadeada que
armazena em cada n uma chave e um nome. As seguintes operaes abaixo devem ser
definidas:

a) Buscar um nome dado o valor da chave;


b) Inserir um novo elemento na lista mantendo a ordem;
c) Remover um elemento da lista;
d) Imprimir os valores da lista;
e) Copiar uma lista l1 para uma lista l2;
f) Concatenar uma lista l1 com uma lista l2;
g) Intercalar l1 e l2 ;
6) Implemente uma classe ConjuntoInteiros atravs de uma lista duplamente encadeada cujos
ns armazenam inteiros e com as operaes tpicas de unio, interseo, diferena e de
pertinncia de um elemento ao conjunto.

7) Escreva um procedimento que crie todas as permutaes de uma cadeia de caracteres e as


armazene em uma lista duplamente encadeada. Considere que a string pode possuir letras
repetidas e que a lista resultante no pode conter duplicatas.

8) Escreva um procedimento que receba uma lista duplamente encadeada contendo comandos
armazenados na forma de cadeias de caracteres e rotacione a lista para a direita e esquerda,
tantas vezes quanto for o valor de um inteiro n passado como parmetro. Se o inteiro n for
positivo a lista deve ser rotacionada n vezes para a direita e se for negativo para a esquerda.

9) O problema de Josephus descreve a seguinte situao: Um grupo de soldados est cercado e


no h esperana de vitria, porm existe somente um cavalo disponvel para escapar e buscar
por reforos. Para determinar qual soldado deve escapar para encontrar ajuda, eles formam um
crculo e sorteiam um nmero de um chapu. Comeando por um soldado sorteado
aleatoriamente, uma contagem realizada at o nmero sorteado. Quando a contagem terminar,
o soldado em que a contagem parou removido do crculo, um novo nmero sorteado e a
contagem recomea no soldado seguinte ao que foi eliminado. A cada rodada, portanto, o crculo
diminui em um, at que somente um soldado reste e seja escolhido para a tarefa.

Utilizando um vetor de tamanho 10, sorteie nmeros entre -9 e 9 a cada consulta ao chapu e
simule o processo, imprimindo o nmero do soldado eliminado a cada rodada e o nmero do
soldado escolhido ao final. Valores negativos fazem a contagem andar para a esquerda, enquanto
valores positivos andam para a direita. Considere que 0 um valor invlido e realize um novo
sorteio neste caso. Represente os soldados na estrutura de dados como um tipo capaz de
armazenar um identificar nico para cada individuo.

10) Escreva um programa que remova todos os elementos com chaves pares de uma lista
encadeada.

11) Escreva um programa que recebe duas listas de caracteres e concatena os elementos da
segunda na primeira lista. Implemente esta funo para listas lineares e encadeadas.

12) Escreva um programa que recebe duas listas encadeadas de inteiros e efetue os seguintes
passos:
a) Verifique se as listas esto ordenadas;
b) Ordene as listas, caso no estejam ordenadas;
c) Mescle os elementos da segunda lista na primeira, mantendo a ordenao na lista final.

13) Escreva um programa solicite ao usurio uma sequncia de caracteres sem limite de
mximo de tamanho e realize as seguintes operaes usando uma pilha:
a) Imprimir o texto na ordem inversa;
b) Verificar se o texto um palndromo, ou seja, se a string escrita da mesma maneira
de frente para trs e de trs para frente. Ignore espaos e pontos.

14) Suponha que um dado problema requer o uso de duas pilhas, onde cada pilha suporta no
mximo 50 elementos e em nenhum momento as duas pilhas tero juntas mais do que 80
elementos. Assim, possvel implementar as duas pilhas em um nico vetor usando apenas 80
posies ao invs de 100. Implemente a estrutura de dados e as de empilhar e desempilhar para
estas duas pilhas.

15) Utilizando somente operaes de empilhar e desempilhar, escreva um programa que


remove um item com chave c fornecida pelo usurio da pilha. Ao final da execuo da funo, a
pilha deve ser igual original, exceto pela ausncia do item removido.

16) Escreva um programa que tenha uma fila cujos elementos possuem um campo inteiro
representando sua prioridade. Quanto menor o valor deste campo, maior a prioridade do
elemento. Insira n elementos com prioridades diversas na fila e depois divida a fila em duas, uma
com elementos cuja prioridade menor ou igual ao valor p fornecido pelo usurio e outra com
os elementos restantes.

17) Escreva um programa que simule o controle de uma pista de decolagem de avies em um
aeroporto. Neste programa, o usurio deve ser capaz de realizar as seguintes tarefas:
a) Listar o nmero de avies aguardando na fila de decolagem;
b) Autorizar a decolagem do primeiro avio da fila;
c) Adicionar um avio fila de espera;
d) Listar todos os avies na fila de espera;
e) Listar as caractersticas do primeiro avio da fila.
Considere que os avies possuem um nome e um nmero inteiro como identificador. Adicione
outras caractersticas conforme achar necessrio.

18) Escreva um programa que implemente uma fila circular utilizando uma lista linear. O
programa deve ser capaz de inserir, remover e informar o tamanho da fila em um dado
momento.

19) Uma empilhadeira carrega caixas de 7, 5 e 3 toneladas. H trs pilhas P1, P2 e P3. A pilha P1
onde se encontram todas as caixas que chegam ao depsito. Com um detalhe: caixas maiores
no podem ser empilhadas sobre caixas menores. Elabore na classe principal uma funo
chamada
static void chegaNoDeposito(Caixa nova, Pilha p1, Pilha p2, Pilha p3)

que efetue o controle das caixas, de forma que caso uma caixa de maior peso do que uma que j
est em P1 deva ser empilhada ento todas as caixas que esto em P1 so movidas para as
pilhas auxiliares P2 (contendo somente caixa de 5 toneladas) e P3 (contendo somente caixas de
3 toneladas) at que se possa empilhar a nova caixa. Depois, todas as caixas so movidas de
volta para a pilha P1.

Crie e utilize a classe Pilha contendo apenas o construtor padro e os seguintes mtodos:
public boolean estaVazia()
public void empilhar(Caixa novaCaixa)
public void desempilhar()
public Caixa topo()

A classe Caixa deve ser abstrata e ter como subclasses as classes concretas Caixa7, Caixa5 e
Caixa3 que representam caixas com, respectivamente, 7, 5 e 3 toneladas. Essas classes devem
conter apenas o construtor padro e implementar o mtodo declarado como abstrato na classe
Caixa:
public abstract double obterPeso()